From 2e586b3d0ee48a10670dfda7f801ea98cd851433 Mon Sep 17 00:00:00 2001 From: Olaf Schusler Date: Thu, 10 Oct 2024 16:03:37 +0200 Subject: [PATCH 01/12] Release 0.1.0 (#353) --- .devcontainer/Dockerfile | 2 +- .devcontainer/devcontainer.json | 4 +- .github/workflows/release.yaml | 56 + .github/workflows/tests.yaml | 11 +- .gitignore | 7 +- CONTRIBUTING.md | 68 + LICENSE => LICENSE.md | 2 +- README.md | 139 +- docs/_static/devcontainer_docker_icon.png | Bin 0 -> 1093 bytes docs/_static/devcontainer_docker_icon_2.png | Bin 0 -> 1136 bytes docs/_static/terminal_icon.png | Bin 0 -> 68188 bytes docs/development.md | 58 - docs/index.md | 25 +- docs/javascripts/mathjax.js | 19 + docs/tutorial.md | 408 ++ example/README.md | 22 +- example/decompositions.ipynb | 922 +++ mkdocs.yaml | 78 +- opensquirrel/Circuit.py | 129 - opensquirrel/CircuitBuilder.py | 32 - opensquirrel/Common.py | 50 - opensquirrel/DefaultGates.py | 104 - opensquirrel/Gates.py | 71 - opensquirrel/MatrixExpander.py | 44 - opensquirrel/McKayDecomposer.py | 137 - opensquirrel/Replacer.py | 52 - opensquirrel/SquirrelAST.py | 54 - opensquirrel/SquirrelASTCreator.py | 64 - opensquirrel/SquirrelErrorHandler.py | 12 - opensquirrel/TestInterpreter.py | 30 - opensquirrel/TypeChecker.py | 95 - opensquirrel/Writer.py | 41 - opensquirrel/__init__.py | 8 +- opensquirrel/circuit.py | 143 + opensquirrel/circuit_builder.py | 150 + opensquirrel/circuit_matrix_calculator.py | 41 + opensquirrel/common.py | 41 + opensquirrel/decomposer/__init__.py | 23 + opensquirrel/decomposer/aba_decomposer.py | 199 + opensquirrel/decomposer/cnot_decomposer.py | 75 + opensquirrel/decomposer/general_decomposer.py | 73 + opensquirrel/decomposer/mckay_decomposer.py | 79 + opensquirrel/default_gates.py | 191 + opensquirrel/default_measures.py | 14 + opensquirrel/default_resets.py | 9 + opensquirrel/exceptions.py | 19 + .../exporter}/__init__.py | 0 opensquirrel/exporter/export_format.py | 5 + .../exporter/quantify_scheduler_exporter.py | 119 + opensquirrel/instruction_library.py | 55 + opensquirrel/ir.py | 712 +++ opensquirrel/mapper/__init__.py | 4 + opensquirrel/mapper/general_mapper.py | 22 + opensquirrel/mapper/mapping.py | 45 + opensquirrel/mapper/qubit_remapper.py | 82 + opensquirrel/mapper/simple_mappers.py | 20 + opensquirrel/mapper/utils.py | 22 + {parsing => opensquirrel/merger}/__init__.py | 0 opensquirrel/merger/general_merger.py | 126 + .../parser}/__init__.py | 0 opensquirrel/parser/libqasm/README.md | 3 + opensquirrel/parser/libqasm/__init__.py | 0 opensquirrel/parser/libqasm/parser.py | 191 + opensquirrel/register_manager.py | 187 + opensquirrel/reindexer/__init__.py | 3 + opensquirrel/reindexer/qubit_reindexer.py | 70 + opensquirrel/utils/__init__.py | 3 + opensquirrel/utils/check_passes/__init__.py | 5 + .../utils/check_passes/check_mapper.py | 46 + opensquirrel/utils/identity_filter.py | 11 + opensquirrel/utils/matrix_expander.py | 232 + opensquirrel/writer/__init__.py | 0 opensquirrel/writer/writer.py | 90 + parsing/GeneratedParsingCode/CQasm3.interp | 50 - parsing/GeneratedParsingCode/CQasm3.tokens | 28 - .../GeneratedParsingCode/CQasm3Lexer.interp | 68 - parsing/GeneratedParsingCode/CQasm3Lexer.py | 1248 ---- .../GeneratedParsingCode/CQasm3Lexer.tokens | 28 - .../GeneratedParsingCode/CQasm3Listener.py | 101 - parsing/GeneratedParsingCode/CQasm3Parser.py | 1351 ---- parsing/GeneratedParsingCode/CQasm3Visitor.py | 58 - .../GeneratedParsingCode/CQasmLexer.interp | 68 - parsing/GeneratedParsingCode/CQasmLexer.py | 1248 ---- .../GeneratedParsingCode/CQasmLexer.tokens | 28 - parsing/grammar/CQasm3.g4 | 26 - poetry.lock | 5686 ++++++++++++++++- pyproject.toml | 144 +- scripts/gen_reference_page.py | 33 + test/decomposer/__init__.py | 0 test/decomposer/test_cnot_decomposer.py | 58 + test/decomposer/test_mckay_decomposer.py | 79 + test/decomposer/test_xyx_decomposer.py | 52 + test/decomposer/test_xzx_decomposer.py | 52 + test/decomposer/test_yxy_decomposer.py | 52 + test/decomposer/test_yzy_decomposer.py | 55 + test/decomposer/test_zxz_decomposer.py | 53 + test/decomposer/test_zyz_decomposer.py | 53 + test/docs/__init__.py | 0 test/docs/test_tutorial.py | 259 + test/example/tutorials/test_decompositions.py | 198 + test/exporter/__init__.py | 0 .../test_quantify_scheduler_exporter.py | 112 + test/ir_equality_test_base.py | 39 + test/mapper/__init__.py | 0 test/mapper/test_general_mapper.py | 54 + test/mapper/test_mapping.py | 15 + test/mapper/test_qubit_remapper.py | 74 + test/mapper/test_simple_mappers.py | 33 + test/merger/__init__.py | 0 test/merger/test_merger.py | 171 + test/parser/__init__.py | 0 test/parser/libqasm/__init__.py | 0 test/parser/libqasm/test_libqasm.py | 80 + test/reindexer/test_qubit_reindexer.py | 57 + test/test_circuit_builder.py | 100 + test/test_circuit_matrix_calculator.py | 63 + test/test_circuitbuilder.py | 45 - test/test_decompose_mckay.py | 99 - test/test_integration.py | 454 +- test/test_ir.py | 336 + test/test_measure.py | 169 + test/test_parsing.py | 149 - test/test_registers.py | 40 + test/test_replacer.py | 148 +- test/test_reset.py | 117 + test/test_testinterpreter.py | 203 - test/test_writer.py | 83 - test/utils/__init__.py | 0 test/utils/test_matrix_expander.py | 61 + test/writer/__init__.py | 0 test/writer/test_writer.py | 131 + tox.ini | 22 +- 132 files changed, 13389 insertions(+), 6396 deletions(-) create mode 100644 .github/workflows/release.yaml create mode 100644 CONTRIBUTING.md rename LICENSE => LICENSE.md (99%) create mode 100644 docs/_static/devcontainer_docker_icon.png create mode 100644 docs/_static/devcontainer_docker_icon_2.png create mode 100644 docs/_static/terminal_icon.png delete mode 100644 docs/development.md create mode 100644 docs/javascripts/mathjax.js create mode 100644 docs/tutorial.md create mode 100644 example/decompositions.ipynb delete mode 100644 opensquirrel/Circuit.py delete mode 100644 opensquirrel/CircuitBuilder.py delete mode 100644 opensquirrel/Common.py delete mode 100644 opensquirrel/DefaultGates.py delete mode 100644 opensquirrel/Gates.py delete mode 100644 opensquirrel/MatrixExpander.py delete mode 100644 opensquirrel/McKayDecomposer.py delete mode 100644 opensquirrel/Replacer.py delete mode 100644 opensquirrel/SquirrelAST.py delete mode 100644 opensquirrel/SquirrelASTCreator.py delete mode 100644 opensquirrel/SquirrelErrorHandler.py delete mode 100644 opensquirrel/TestInterpreter.py delete mode 100644 opensquirrel/TypeChecker.py delete mode 100644 opensquirrel/Writer.py create mode 100644 opensquirrel/circuit.py create mode 100644 opensquirrel/circuit_builder.py create mode 100644 opensquirrel/circuit_matrix_calculator.py create mode 100644 opensquirrel/common.py create mode 100644 opensquirrel/decomposer/__init__.py create mode 100644 opensquirrel/decomposer/aba_decomposer.py create mode 100644 opensquirrel/decomposer/cnot_decomposer.py create mode 100644 opensquirrel/decomposer/general_decomposer.py create mode 100644 opensquirrel/decomposer/mckay_decomposer.py create mode 100644 opensquirrel/default_gates.py create mode 100644 opensquirrel/default_measures.py create mode 100644 opensquirrel/default_resets.py create mode 100644 opensquirrel/exceptions.py rename {parsing/GeneratedParsingCode => opensquirrel/exporter}/__init__.py (100%) create mode 100644 opensquirrel/exporter/export_format.py create mode 100644 opensquirrel/exporter/quantify_scheduler_exporter.py create mode 100644 opensquirrel/instruction_library.py create mode 100644 opensquirrel/ir.py create mode 100644 opensquirrel/mapper/__init__.py create mode 100644 opensquirrel/mapper/general_mapper.py create mode 100644 opensquirrel/mapper/mapping.py create mode 100644 opensquirrel/mapper/qubit_remapper.py create mode 100644 opensquirrel/mapper/simple_mappers.py create mode 100644 opensquirrel/mapper/utils.py rename {parsing => opensquirrel/merger}/__init__.py (100%) create mode 100644 opensquirrel/merger/general_merger.py rename {parsing/grammar => opensquirrel/parser}/__init__.py (100%) create mode 100644 opensquirrel/parser/libqasm/README.md create mode 100644 opensquirrel/parser/libqasm/__init__.py create mode 100644 opensquirrel/parser/libqasm/parser.py create mode 100644 opensquirrel/register_manager.py create mode 100644 opensquirrel/reindexer/__init__.py create mode 100644 opensquirrel/reindexer/qubit_reindexer.py create mode 100644 opensquirrel/utils/__init__.py create mode 100644 opensquirrel/utils/check_passes/__init__.py create mode 100644 opensquirrel/utils/check_passes/check_mapper.py create mode 100644 opensquirrel/utils/identity_filter.py create mode 100644 opensquirrel/utils/matrix_expander.py create mode 100644 opensquirrel/writer/__init__.py create mode 100644 opensquirrel/writer/writer.py delete mode 100644 parsing/GeneratedParsingCode/CQasm3.interp delete mode 100644 parsing/GeneratedParsingCode/CQasm3.tokens delete mode 100644 parsing/GeneratedParsingCode/CQasm3Lexer.interp delete mode 100644 parsing/GeneratedParsingCode/CQasm3Lexer.py delete mode 100644 parsing/GeneratedParsingCode/CQasm3Lexer.tokens delete mode 100644 parsing/GeneratedParsingCode/CQasm3Listener.py delete mode 100644 parsing/GeneratedParsingCode/CQasm3Parser.py delete mode 100644 parsing/GeneratedParsingCode/CQasm3Visitor.py delete mode 100644 parsing/GeneratedParsingCode/CQasmLexer.interp delete mode 100644 parsing/GeneratedParsingCode/CQasmLexer.py delete mode 100644 parsing/GeneratedParsingCode/CQasmLexer.tokens delete mode 100644 parsing/grammar/CQasm3.g4 create mode 100644 scripts/gen_reference_page.py create mode 100644 test/decomposer/__init__.py create mode 100644 test/decomposer/test_cnot_decomposer.py create mode 100644 test/decomposer/test_mckay_decomposer.py create mode 100644 test/decomposer/test_xyx_decomposer.py create mode 100644 test/decomposer/test_xzx_decomposer.py create mode 100644 test/decomposer/test_yxy_decomposer.py create mode 100644 test/decomposer/test_yzy_decomposer.py create mode 100644 test/decomposer/test_zxz_decomposer.py create mode 100644 test/decomposer/test_zyz_decomposer.py create mode 100644 test/docs/__init__.py create mode 100644 test/docs/test_tutorial.py create mode 100644 test/example/tutorials/test_decompositions.py create mode 100644 test/exporter/__init__.py create mode 100644 test/exporter/test_quantify_scheduler_exporter.py create mode 100644 test/ir_equality_test_base.py create mode 100644 test/mapper/__init__.py create mode 100644 test/mapper/test_general_mapper.py create mode 100644 test/mapper/test_mapping.py create mode 100644 test/mapper/test_qubit_remapper.py create mode 100644 test/mapper/test_simple_mappers.py create mode 100644 test/merger/__init__.py create mode 100644 test/merger/test_merger.py create mode 100644 test/parser/__init__.py create mode 100644 test/parser/libqasm/__init__.py create mode 100644 test/parser/libqasm/test_libqasm.py create mode 100644 test/reindexer/test_qubit_reindexer.py create mode 100644 test/test_circuit_builder.py create mode 100644 test/test_circuit_matrix_calculator.py delete mode 100644 test/test_circuitbuilder.py delete mode 100644 test/test_decompose_mckay.py create mode 100644 test/test_ir.py create mode 100644 test/test_measure.py delete mode 100644 test/test_parsing.py create mode 100644 test/test_registers.py create mode 100644 test/test_reset.py delete mode 100644 test/test_testinterpreter.py delete mode 100644 test/test_writer.py create mode 100644 test/utils/__init__.py create mode 100644 test/utils/test_matrix_expander.py create mode 100644 test/writer/__init__.py create mode 100644 test/writer/test_writer.py diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 7a49b7ff..e1a663ea 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -10,7 +10,7 @@ RUN apt-get update -y && \ apt-get clean # Set up user -ARG USER=vscode +ARG USER=pydev ENV PATH /home/${USER}/.local/bin:$PATH RUN groupadd -r ${USER} && \ useradd -m -r -s /bin/bash -g ${USER} ${USER} && \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 13ec8557..5601e7ce 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,8 +3,8 @@ "build": { "dockerfile": "Dockerfile", "args": { - "USER": "vscode" + "USER": "pydev" } }, - "remoteUser": "vscode" + "remoteUser": "pydev" } diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..62ffdefa --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,56 @@ +name: Releases + +on: + pull_request: + push: + branches: + - "release-*" + release: + types: + - created + +jobs: + publish: + name: Publish assets + runs-on: "ubuntu-latest" + permissions: + id-token: write + steps: + - uses: actions/checkout@master + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Install poetry + uses: abatilo/actions-poetry@v3 + with: + poetry-version: "1.8.3" + + # Setting the proper version + - name: Get previous Tag + if: contains(github.ref, 'refs/heads/release-') + id: previous_tag + uses: WyriHaximus/github-action-get-previous-tag@v1 + with: + fallback: 0.1.0 + - name: Set Build version + if: contains(github.ref, 'refs/heads/release-') + run: poetry version "${{ steps.previous_tag.outputs.tag }}.dev${{ github.run_number }}" + - name: Set Release version + if: github.event_name == 'release' && github.event.action == 'created' + run: poetry version ${{ github.ref_name }} + + # Build package + - name: Build poetry package + run: poetry build + + # Publishing the package + - name: Publish distribution 📦 to Test PyPI + if: contains(github.ref, 'refs/heads/release-') + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + verbose: true + - name: Publish distribution 📦 to PyPI + if: github.event_name == 'release' && github.event.action == 'created' + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 0d022c67..81f159b8 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -13,17 +13,17 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.11" - name: Install poetry - uses: abatilo/actions-poetry@v2 + uses: abatilo/actions-poetry@v3 with: poetry-version: "1.3.2" - name: Install tox run: pip install tox - name: run tox lint and type - run: tox -e lint #,type + run: tox -e lint,type unit-test: name: Unit testing needs: lint @@ -35,7 +35,6 @@ jobs: - macos-latest - windows-latest python-version: - - "3.8" - "3.9" - "3.10" - "3.11" @@ -44,11 +43,11 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install poetry - uses: abatilo/actions-poetry@v2 + uses: abatilo/actions-poetry@v3 with: poetry-version: "1.3.2" - name: Install tox diff --git a/.gitignore b/.gitignore index 68bc17f9..3f09f7e4 100644 --- a/.gitignore +++ b/.gitignore @@ -68,8 +68,8 @@ instance/ # Scrapy stuff: .scrapy -# Sphinx documentation -docs/_build/ +# MkDocs documentation +site/ # PyBuilder .pybuilder/ @@ -77,6 +77,7 @@ target/ # Jupyter Notebook .ipynb_checkpoints +example/tutorials/.ipynb_checkpoints # IPython profile_default/ @@ -127,6 +128,7 @@ venv/ ENV/ env.bak/ venv.bak/ +venv38/ # Spyder project settings .spyderproject @@ -153,6 +155,7 @@ dmypy.json cython_debug/ # PyCharm +.idea/ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..6ff1cde9 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,68 @@ +We recommend working on a feature branch and pull request from there. + +## Requirements + +- `poetry`, +- `PyCharm` (recommended). + +## Creating a feature branch + +Make sure your environment contains all the updated versions of the dependencies. + +From an OpenSquirrel checkout: + +``` +$ poetry shell +$ poetry install +``` + +And that you base your feature branch off an updated `develop`. + +From a `poetry` shell (started from an OpenSquirrel checkout): + +``` +$ git checkout develop +$ git fetch origin +$ git pull +$ git branch +``` + +## Before creating the pull request + +Make sure the tests and the following linters pass. +From a `poetry` shell (started from an OpenSquirrel checkout): + +``` +$ poetry run pytest . -vv +$ poetry run ruff check --fix +$ poetry run ruff format +$ poetry run mypy opensquirrel --strict +``` + +## Setting the Python interpreter (PyCharm) + +You can choose the Python interpreter from the `poetry` environment. + +- Go to `Settings` > `Project: OpenSquirrel` > `Python Interpreter`. +- Click on `Add Interpeter`, and then select `Add Local Interpreter`. +- Select `Poetry Environment`, and then `Existing environment`. +- Click on `...` to navigate to the `Interpreter` binary. + +## Running/Debugging tests (PyCharm) + +To run/debug all tests: + +- Right-click on the `test` folder of the Project tree. +- Click `Run 'pytest' in test` or `Debug 'pytest' in test`. + +This will also create a `Run/Debug Configuration`. + +### Troubleshooting + +If breakpoints are not hit during debugging: + +- Go to `Run/Debug Configurations`. +- Add `--no-cov` in the `Additional arguments` text box. + +This issue may be due to the code coverage module _hijacking_ the tracing mechanism +(check [this link](https://stackoverflow.com/a/56235965/260313) for a more detailed explanation). diff --git a/LICENSE b/LICENSE.md similarity index 99% rename from LICENSE rename to LICENSE.md index 261eeb9e..00646403 100644 --- a/LICENSE +++ b/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2023 Quantum Inspire: QuTech (TNO, TU Delft) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index f8fa1c5c..f5a5b3c2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -### Mini-compiler for Quantum Inspire's quantum chip[munks] +# OpenSquirrel: a flexible quantum program compiler. + +![CI](https://github.com/QuTech-Delft/OpenSquirrel/actions/workflows/tests.yaml/badge.svg) +[![pypi](https://img.shields.io/pypi/v/opensquirrel.svg)](https://pypi.org/project/opensquirrel/) +[![image](https://img.shields.io/pypi/pyversions/opensquirrel.svg)](https://pypi.python.org/pypi/opensquirrel) +[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) +[![pytest](https://img.shields.io/badge/py-test-blue?logo=pytest)](https://github.com/pytest-dev/pytest) +[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ``` ,;;:;, @@ -11,43 +18,133 @@ ``'"` ``` -# Installation +OpenSquirrel is a quantum compiler that chooses a _modular_, over a _configurable_, +approach to prepare and optimize quantum circuits for heterogeneous target architectures. + +It has a user-friendly interface and is straightforwardly extensible with custom-made readers, +compiler passes, and exporters. +As a quantum circuit compiler, +it is fully aware of the semantics of each gate and arbitrary quantum gates can be constructed manually. +It supports the [cQASM](https://qutech-delft.github.io/cQASM-spec/latest/) quantum programming language, +using [libQASM](https://github.com/QuTech-Delft/libqasm) as language parser. +It is developed in modern Python and follows best practices. + +## Installation -## General installation +OpenSquirrel can be easily installed from PyPI. +We recommend using a virtual environment (_e.g._, venv). ```shell $ pip install opensquirrel ``` -## Editable installation +To install the dependencies to run the examples on `jupyter`, install: -To perform an editable install, run the following command in the root directory of `OpenSquirrel` with the `-e` flag ```shell -$ pip install -e . +$ pip install opensquirrel[examples] ``` -To install the developer specific dependencies, run the command -```shell -$ pip install -e '.[dev]' +## Getting started + +Once installed, the `opensquirrel` module can be imported accordingly: + +```python +import opensquirrel ``` -# Documentation +Essentially, compiling a quantum circuit in OpenSquirrel can be seen as a 3-stage process: +1. Defining and building the quantum circuit using either the `CircuitBuilder` or from a cQASM string. +2. Executing (multiple) compilation passes on the circuit, +each traversing and modifying it (_e.g._, decomposition of the gates). +3. Writing the circuit to cQASM or exporting it to a specific quantum circuit format. + +Here is an example of building a circuit using the `CircuitBuilder`: -The package exposes only the `Circuit` class, whose up-to-date documentation is accessed: +```python +import math +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.ir import Qubit, Float -- from the Python console: -```pycon ->>> import opensquirrel ->>> help(opensquirrel.Circuit) +# Initialize the builder and build your circuit +builder = CircuitBuilder(qubit_register_size=1) +builder.H(Qubit(0)).Z(Qubit(0)).Y(Qubit(0)).Rx(Qubit(0), Float(math.pi / 3)) + +# Get the circuit from the circuit builder +qc = builder.to_circuit() ``` -- from a Linux shell: `python3 -c "import opensquirrel; help(opensquirrel.Circuit)"` +Alternatively, one can define the same circuit as a cQASM string: -Currently there is also a set of default gates exposed as `opensquirrel.DefaultGates` to use in the `Circuit` constructor. +```python +cqasm_string = (""" + version 3.0 -# Testing + qubit q -To run the tests, run the following command in the root directory of `OpenSquirrel` -```shell -$ pytest + H q + Z q + Y q + Rx(1.0471976) q +""") + +from opensquirrel.circuit import Circuit +qc = Circuit.from_string(cqasm_string) +``` + +The circuit can then be decomposed using a decomposition strategy. +The different decomposition strategies can be found in the +[examples](https://github.com/QuTech-Delft/OpenSquirrel/tree/develop/example/tutorials). +In the example below, the circuit is decomposed using the Z-Y-Z decomposer. + +```python +from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer + +qc.decompose(decomposer=ZYZDecomposer()) +``` + +Once the circuit is decomposed, it can be written back to cQASM. +This is done by invoking the `writer` class, as can be seen below. + +```python +from opensquirrel.writer import writer + +writer.circuit_to_string(qc) ``` + +The output is then given by the following cQASM string: + + version 3.0 + + qubit[1] q + + Rz(3.1415927) q[0] + Ry(1.5707963) q[0] + Rz(3.1415927) q[0] + Ry(3.1415927) q[0] + Rz(1.5707963) q[0] + Ry(1.0471976) q[0] + Rz(-1.5707963) q[0] + +> __*Note*__: The cQASM writer is the standard writer of OpenSquirrel. +> This means that the string representation of the `Circuit` object is by default a cQASM string. Moreover, simply printing the `Circuit` object will result in its cQASM string representation. + +## Documentation + +The [OpenSquirrel documentation](https://QuTech-Delft.github.io/OpenSquirrel/) is hosted through GitHub Pages. + + +## Contributing + +The contribution guidelines and set up can be found +[here](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/CONTRIBUTING.md). + + +## Licensing + +OpenSquirrel is licensed under the Apache License, Version 2.0. See +[LICENSE](https://github.com/QuTech-Delft/OpenSquirrel/blob/master/LICENSE.md) for the full license text. + + +## Authors + +Quantum Inspire: [support@quantum-inspire.com](mailto:"support@quantum-inspire.com") diff --git a/docs/_static/devcontainer_docker_icon.png b/docs/_static/devcontainer_docker_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1d295682f3d9e684b68a83cfd586c26d1939c9 GIT binary patch literal 1093 zcmV-L1iJf)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1KLSMK~z{r?U_kv z6loO4Uwu{8)h0dBEXFM^M8-r>M{q$T9uz^H@t`Lc1VKD0!{AL2R1iGrLC`@DGl=4H z6E_5L0cV83faqi}YGM!*Of+FMYuD0MpYN-B#Dt`4>2xP`$nQ}7-utNP@893{UbR$H zTg@Q?Oe+I6Z7E1<2}OKxEUmp&K&##hTJ5i>LZwJJGN1p3^z$RYGXoUK zAB;W&k;_+tw&ZZ+&I^>vI!|~32rWRJxe>3D=j4EQfBp$AK+-D6$_*(wovi#4T0mTx z6fn_D3Ycgn1r!2x&d;FzcmVfanIhSVp8%EsZSilQ)f|MPHD^(SMh&AAI{|9dHeht< zDbv?Ma`{o$&PHef+~^`JH@MzOmOtw3Eo6D9bGEs8ST;fnusR;&HB#n14DbG6Dv--7aLkzfM*# zM)RfbBOs|MU@2TcOmQ2>8YSnUtNG5#knJB%Bh?%o;&N2JCf60@A)4w&yQljDz@N?09FTqg)e{{;O{ zcR}C7&CvT`W9a*$Vzoa4yXP%={&)gfZ{syMr!yMQ4?dV@`ayqjEdL{6r$K*xj+|gz z0d~(D$b990Mz()tI{<14&6y>(~&BR)2Md zyzmSwXv8awqV-onPE}K69N;$SZ!TcI^9Kc@F|45BwgKt-Ly_j-SP*Nf|JnYWJ1-a} zKp?itzGnw82l8!^gHmM~)1Pd5~7zw#- zC9vXoAQ#QW0CRUPNh!vu*N&azcsBIl+-?I0*OAlP3{JX`*)G60_yu4=P;#7I00000 LNkvXXu0mjf$?5&U literal 0 HcmV?d00001 diff --git a/docs/_static/devcontainer_docker_icon_2.png b/docs/_static/devcontainer_docker_icon_2.png new file mode 100644 index 0000000000000000000000000000000000000000..917cd6dd1b1b2de1a939c6d465936114c57c04f1 GIT binary patch literal 1136 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 - - - -Install dependencies - -```shell -$ poetry install -``` - -Start a Poetry shell - -```shell -$ poetry shell -``` - -Within the shell PyTest and MyPy can be run accordingly: - -```shell -$ mypy -p opensquirrel -``` - -```shell -$ pytest -``` - -##### MkDocs - -The documentation is generated using MkDocs. For full documentation visit [mkdocs.org](https://www.mkdocs.org). - - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. - -##### Commands - -* `mkdocs new [dir-name]` - Create a new project. -* `mkdocs serve` - Start the live-reloading docs server. -* `mkdocs build` - Build the documentation site. -* `mkdocs -h` - Print help message and exit. - -#### MyPy - -Check Python typing by running the following command in the root directory - - - diff --git a/docs/index.md b/docs/index.md index 5e76213c..3d582c14 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,24 @@ -# Welcome to OpenSquirrel +This site contains the documentation for OpenSquirrel, _i.e._, a flexible quantum program compiler. +OpenSquirrel chooses a _modular_, over a _configurable_, approach to prepare and optimize quantum circuits for heterogeneous target architectures. -## Introduction +It has a user-friendly interface and is straightforwardly extensible with custom-made readers, compiler passes, and exporters. +As a quantum circuit compiler, it is fully aware of the semantics of each gate and arbitrary quantum gates can be constructed manually. +It understands the quantum programming language cQASM 3 and will support additional quantum programming languages in the future. +It is developed in modern Python and follows best practices. -A quantum circuit transformation and manipulation tool. +\[[GitHub repository]()\]\[[PyPI]()\] -**Authors**: +## Table of Contents -- Pablo Le Henaff () +The following documentation structure is used: [Diátaxis documentation framework](https://diataxis.fr/). -- Roberto Turrado Camblor () +1. [Tutorial](tutorial.md) +2. [Reference](reference/reference.md) -- Chris Elenbaas () +## Authors -GitHub repository: +Quantum Inspire () -PyPI: +## Acknowledgements + +The Quantum Inspire project (by QuTech: a collaboration of TNO and TU Delft) diff --git a/docs/javascripts/mathjax.js b/docs/javascripts/mathjax.js new file mode 100644 index 00000000..378edac4 --- /dev/null +++ b/docs/javascripts/mathjax.js @@ -0,0 +1,19 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"], ["$", "$"]], + displayMath: [["\\[", "\\]"], ["$$", "$$"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.startup.output.clearCache() + MathJax.typesetClear() + MathJax.texReset() + MathJax.typesetPromise() +}) diff --git a/docs/tutorial.md b/docs/tutorial.md new file mode 100644 index 00000000..40bef238 --- /dev/null +++ b/docs/tutorial.md @@ -0,0 +1,408 @@ +# Tutorial + +## Installation + +OpenSquirrel is available through the Python Package Index ([PyPI]()). + +Accordingly, installation is as easy as ABC: +```shell +$ pip install opensquirrel +``` + +You can check if the package is installed by importing it: +```python +import opensquirrel +``` + +## Creating a circuit + +OpenSquirrel's entrypoint is the `Circuit`, which represents a quantum circuit. +You can create a circuit in two different ways: + + 1. form a string written in [cQASM](https://qutech-delft.github.io/cQASM-spec), or; + 2. by using the `CircuitBuilder` in Python. + +### 1. From a cQASM string + +```python +from opensquirrel import Circuit + +qc = Circuit.from_string( + """ + version 3.0 + + // Initialise a circuit with two qubits and a bit + qubit[2] q + bit[2] b + + // Create a Bell pair + H q[0] + CNOT q[0], q[1] + + // Measure qubits + b = measure q + """ +) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[2] q + bit[2] b + + H q[0] + CNOT q[0], q[1] + b[0] = measure q[0] + b[1] = measure q[1] + + +### 2. Using the `CircuitBuilder` + +For creation of a circuit through Python, the `CircuitBuilder` can be used accordingly: + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.ir import Float + +builder = CircuitBuilder(qubit_register_size=2) +builder.Ry(0, Float(0.23)).CNOT(0, 1) +qc = builder.to_circuit() + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[2] q + + Ry(0.23) q[0] + CNOT q[0], q[1] + +You can naturally use the functionalities available in Python to create your circuit: + +```python +builder = CircuitBuilder(qubit_register_size=10) +for i in range(0, 10, 2): + builder.H(i) +qc = builder.to_circuit() + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[10] q + + H q[0] + H q[2] + H q[4] + H q[6] + H q[8] + +For instance, you can generate a quantum fourier transform (QFT) circuit as follows: + +```python +qubit_register_size = 5 +builder = CircuitBuilder(qubit_register_size) +for i in range(qubit_register_size): + builder.H(i) + for c in range(i + 1, qubit_register_size): + builder.CRk(c, i, c-i+1) +qft = builder.to_circuit() + +print(qft) +``` +_Output_: + + version 3.0 + + qubit[5] q + + H q[0] + CRk(2) q[1], q[0] + CRk(3) q[2], q[0] + CRk(4) q[3], q[0] + CRk(5) q[4], q[0] + H q[1] + CRk(2) q[2], q[1] + CRk(3) q[3], q[1] + CRk(4) q[4], q[1] + H q[2] + CRk(2) q[3], q[2] + CRk(3) q[4], q[2] + H q[3] + CRk(2) q[4], q[3] + H q[4] + +### Strong types + +As you can see, gates require _strong types_. For instance, you cannot do: + +```python +try: + Circuit.from_string( + """ + version 3.0 + qubit[2] q + + CNOT q[0], 3 // The CNOT expects a qubit as second argument. + """ + ) +except Exception as e: + print(e) +``` +_Output_: + + Parsing error: failed to resolve overload for cnot with argument pack (qubit, int) + +The issue is that the CNOT expects a qubit as second input argument where an integer has been provided. + +## Modifying a circuit + +### Merging single qubit gates + +All single-qubit gates appearing in a circuit can be merged by applying `merge_single_qubit_gates()` to the circuit. +Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. +The gate that results from the merger of single-qubit gates will, in general, +comprise an arbitrary rotation and, therefore, not be a known gate. +In OpenSquirrel an unrecognized gate is deemed _anonymous_. +When a circuit contains anonymous gates and is written to a cQASM string, +the semantic representation of the anonymous gate is exported. + +!!! warning + + The semantic representation of an anonymous gate is not compliant + [cQASM](https://qutech-delft.github.io/cQASM-spec), meaning that + a cQASM parser, _e.g._ [libQASM](https://qutech-delft.github.io/libqasm/), + will not recognize it as a valid statement. + +```python +import math + +builder = CircuitBuilder(1) +for _ in range(4): + builder.Rx(0, Float(math.pi / 4)) +qc = builder.to_circuit() + +qc.merge_single_qubit_gates() + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[1] q + + Anonymous gate: BlochSphereRotation(Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) + +In the above example, OpenSquirrel has merged all the Rx gates together. +Yet, for now, OpenSquirrel does not recognize that this results in a single Rx +over the cumulated angle of the individual rotations. +Moreover, it does not recognize that the result corresponds to the X gate (up to a global phase difference). +At a later stage, we may want OpenSquirrel to recognize the resultant gate +in the case it is part of the set of known gates. + +The gate set is, however, not immutable. +In the following section, we demonstrate how new gates can be defined and added to the default gate set. + +### Defining your own quantum gates + +OpenSquirrel accepts any new gate and requires its definition in terms of a semantic. +Creating new gates is done using Python functions, decorators, and one of the following gate semantic classes: +`BlochSphereRotation`, `ControlledGate`, or `MatrixGate`. + +- The `BlochSphereRotation` class is used to define an arbitrary single qubit gate. +It accepts a qubit, an axis, an angle, and a phase as arguments. +Below is shown how the X-gate is defined in the default gate set of OpenSquirrel: + +```python +@named_gate +def x(q: QubitLike) -> Gate: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) +``` + +Notice the `@named_gate` decorator. +This _tells_ OpenSquirrel that the function defines a gate and that it should, +therefore, have all the nice properties OpenSquirrel expects of it. + +- The `ControlledGate` class is used to define a multiple qubit gate that comprises a controlled operation. +For instance, the CNOT gate is defined in the default gate set of OpenSquirrel as follows: + +```python +@named_gate +def cnot(control: QubitLike, target: QubitLike) -> Gate: + return ControlledGate(control, x(target)) +``` + +- The `MatrixGate` class may be used to define a gate in the generic form of a matrix: + +```python +@named_gate +def swap(q1: QubitLike, q2: QubitLike) -> Gate: + return MatrixGate( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + [q1, q2], + ) +``` + +!!! note + + User defined gates can only be used in when creating a circuit with the circuit builder. + [cQASM](https://qutech-delft.github.io/cQASM-spec) parsers will not recognize user defined gates, _i.e._, + they cannot be used when creating a circuit through a cQASM string. + +### Gate decomposition + +OpenSquirrel can decompose the gates of a quantum circuit, given a specific decomposition. +OpenSquirrel offers several, so-called, decomposers out of the box, +but users can also make their own decomposer and apply them to the circuit. +Decompositions can be: + 1. predefined, or; + 2. inferred from the gate semantics. + +#### 1. Predefined decomposition + +The first kind of decomposition is when you want to replace a particular gate in the circuit, +like the CNOT gate, with a fixed list of gates. +It is commonly known that CNOT can be decomposed as H-CZ-H. +This decomposition is demonstrated below using a Python _lambda function_, +which requires the same parameters as the gate that is decomposed: + +```python +from opensquirrel.default_gates import CNOT, H, CZ + +qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] // Note that this notation is expanded in OpenSquirrel. + CNOT q[0], q[1] + Ry q[2], 6.78 + """ +) +qc.replace( + CNOT, + lambda control, target: + [ + H(target), + CZ(control, target), + H(target), + ] +) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[3] q + + X q[0] + X q[1] + X q[2] + H q[1] + CZ q[0], q[1] + H q[1] + Ry(6.78) q[2] + +OpenSquirrel will check whether the provided decomposition is correct. +For instance, an exception is thrown if we forget the final Hadamard, +or H gate, in our custom-made decomposition: + +```python +qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] + CNOT q[0], q[1] + Ry q[2], 6.78 + """ +) +try: + qc.replace( + CNOT, + lambda control, target: + [ + H(target), + CZ(control, target), + ] + ) +except Exception as e: + print(e) +``` +_Output_: + + replacement for gate CNOT does not preserve the quantum state + +#### 2. Inferred decomposition + +OpenSquirrel has a variety inferred decomposition strategies. +More in depth tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). + +One of the most common single qubit decomposition techniques is the Z-Y-Z decomposition. +This technique decomposes a quantum gate into an `Rz`, `Ry` and `Rz` gate in that order. +The decompositions are found in `opensquirrel.decomposer`, +an example can be seen below where a Hadamard, Z, Y and Rx gate are all decomposed on a single qubit circuit. + +```python +from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer + +builder = CircuitBuilder(qubit_register_size=1) +builder.H(0).Z(0).Y(0).Rx(0, Float(math.pi / 3)) +qc = builder.to_circuit() + +qc.decompose(decomposer=ZYZDecomposer()) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[1] q + + Rz(3.1415927) q[0] + Ry(1.5707963) q[0] + Rz(3.1415927) q[0] + Ry(3.1415927) q[0] + Rz(1.5707963) q[0] + Ry(1.0471976) q[0] + Rz(-1.5707963) q[0] + +Similarly, the decomposer can be used on individual gates. + +```python +from opensquirrel.decomposer.aba_decomposer import XZXDecomposer +from opensquirrel.default_gates import H + +print(ZYZDecomposer().decompose(H(0))) +``` +_Output_: + + [BlochSphereRotation(Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] + + +## Exporting a circuit + +As you have seen in the examples above, you can turn a circuit into a +[cQASM](https://qutech-delft.github.io/cQASM-spec) string +by simply using the `str` or `__repr__` methods. +We are aiming to support the possibility to export to other languages as well, +_e.g._, a OpenQASM 3.0 string, and frameworks, _e.g._, a Qiskit quantum circuit. diff --git a/example/README.md b/example/README.md index 3f2afde7..bdab8ba3 100644 --- a/example/README.md +++ b/example/README.md @@ -1,3 +1,21 @@ -Code and tests are the best documentation. -For example usage, see `test/test_integration.py`. \ No newline at end of file +The documentation for the code can be found in various Jupyter notebooks located in the `tutorials` folder. + +`Jupyter` and `sympy` are required to access the notebooks. These can be installed all at once by running: + +```shell +$ pip install opensquirrel[examples] +``` + +Alternatively, one can install both packages manually: +```shell +$ pip install jupyter sympy +``` + +To open the `Jupyter` notebooks, one can run + +```shell +jupyter notebook +``` + +in the `example/tutorials` folder. diff --git a/example/decompositions.ipynb b/example/decompositions.ipynb new file mode 100644 index 00000000..122c22a5 --- /dev/null +++ b/example/decompositions.ipynb @@ -0,0 +1,922 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "907632f5-a816-496f-bdf8-91ec46d123f3", + "metadata": {}, + "source": [ + "# Decomposing Circuits in OpenSquirrel\n", + "\n", + "Not all gates, such as the Hadamard gate, can be applied to physical qubits with a single operation. This is because each gate-based quantum computer has its own set of devices and architectural restrictions, which confine the _pulses_, or the operation used to create a gate on a quantum computer, to specific rotations, angles, and durations. \n", + "\n", + "Decomposition schemes extend a robust gate into a set of gates that can be pulsed on a quantum computer. OpenSquirrel offers many decomposition schemes that can be applied to a gate or a circuit.\n", + "\n", + "## 1 Single Qubit Gates\n", + "\n", + "### 1.1 ABA Decomposition\n", + "\n", + "The ABA decomposition (or KAK decomposition) is a decomposition method that uses three consecutive Pauli rotation gates to form any unitary gate. Thus, any arbitrary single qubit gate can be expressed as a product of rotations: a rotation around the A axis, followed by a rotation around the B axis, and then another rotation around the A axis. The mathematical formalism for this rotation can be seen in section 3.1.\n", + "\n", + "In OpenSquirrel, this can be found in the `get_decomposition_angles` method from the `opensquirrel.decomposer.aba_decomposer` module. The ABA Decomposition can be applied to list of gates or a circuit. Below we will first focus on decomposing a circuit.\n", + "\n", + "The circuit chosen is a single qubit circuit with an added Hadamard, Z, Y, and Rx gate. \n", + "\n", + "```\n", + " ┌───┐┌───┐┌───┐┌─────────┐\n", + " q: ┤ H ├┤ Z ├┤ Y ├┤ Rx(π/3) ├\n", + " └───┘└───┘└───┘└─────────┘\n", + "```\n", + "\n", + "This can be seen below, " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "022c5348-c2d5-4b8b-b600-8aa0722a5d3b", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.139077Z", + "start_time": "2024-08-05T11:35:25.102389Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[1] q\n", + "\n", + "H q[0]\n", + "Z q[0]\n", + "Y q[0]\n", + "Rx(1.0471976) q[0]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import math\n", + "\n", + "from opensquirrel.circuit_builder import CircuitBuilder\n", + "from opensquirrel.ir import Float\n", + "\n", + "# Build the circuit structure using the CircuitBuilder\n", + "builder = CircuitBuilder(qubit_register_size=1)\n", + "builder.H(0)\n", + "builder.Z(0)\n", + "builder.Y(0)\n", + "builder.Rx(0, Float(math.pi / 3))\n", + "\n", + "# Create a new circuit from the constructed structure\n", + "circuit = builder.to_circuit()\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "afe111839ab98b22", + "metadata": {}, + "source": [ + "Above we can see the current gates in our circuit. Having created a circuit, we can now use an ABA decomposition in `opensquirrel.decomposer.aba_decomposer` to decompose the gates in the circuit. For this example, we will apply the Z-Y-Z decomposition using the `ZYZDecomposer`. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "52cd16989c4eda95", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.276501Z", + "start_time": "2024-08-05T11:35:25.250600Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[1] q\n", + "\n", + "Rz(3.1415927) q[0]\n", + "Ry(1.5707963) q[0]\n", + "Rz(3.1415927) q[0]\n", + "Ry(3.1415927) q[0]\n", + "Rz(1.5707963) q[0]\n", + "Ry(1.0471976) q[0]\n", + "Rz(-1.5707963) q[0]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer\n", + "\n", + "# Decompose the circuit using ZYZDecomposer\n", + "circuit.decompose(decomposer=ZYZDecomposer())\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "2528385b2958b1ad", + "metadata": {}, + "source": [ + "```\n", + " ┌───────┐┌─────────┐┌───────┐┌───────┐┌─────────┐┌────────────┐┌──────────┐\n", + " q: ┤ Rz(π) ├┤ Ry(π/2) ├┤ Rz(π) ├┤ Ry(π) ├┤ Rz(π/2) ├┤ Ry(1.0472) ├┤ Rz(-π/2) ├\n", + " └───────┘└─────────┘└───────┘└───────┘└─────────┘└────────────┘└──────────┘\n", + "```\n", + "\n", + "All the gates are now a combination of rotations on the Z or Y axis. The first three gates are the decomposition of the Hadamard gate. Keep in mind that not every gate has to be decomposed into three gates! \n", + "\n", + "This can be seen with the Y and Z gates, where only a single rotation gate was necessary for each gate decomposition. The Pauli Y gate is equal to a rotation of $\\pi$ radians on the Bloch sphere in the Y-axis while the Pauli Z is equal to a $\\pi/2$ rotation on the Bloch sphere in the Z-axis.\n", + "\n", + "Finally, the $\\pi/3$ radian rotation in the X-axis can be decomposed into the last two remaining gates.\n", + "\n", + "It is also possible to decompose individual gates. This can be seen below with the Hadamard gate.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "31291a902d6a360e", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.337564Z", + "start_time": "2024-08-05T11:35:25.292151Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[BlochSphereRotation(Qubit[0], axis=Axis[1. 0. 0.], angle=1.5707963267948966, phase=0.0),\n", + " BlochSphereRotation(Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0),\n", + " BlochSphereRotation(Qubit[0], axis=Axis[1. 0. 0.], angle=1.5707963267948966, phase=0.0)]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from opensquirrel.decomposer.aba_decomposer import XZXDecomposer\n", + "from opensquirrel.default_gates import H\n", + "\n", + "XZXDecomposer().decompose(H(0))" + ] + }, + { + "cell_type": "markdown", + "id": "1820057d1b73e8f0", + "metadata": {}, + "source": [ + "### 1.2 McKay Decomposition\n", + "\n", + "The McKay decomposition comes from this paper https://arxiv.org/pdf/1612.00858. \n", + "\n", + "This decomposition utilizes at least three arbitrary Z rotations and two X90 gates (90-degree rotations around the X-axis on the Bloch sphere), totaling a maximum of five gates. It is particularly powerful in experimental settings where Rz gates can be efficiently pulsed to small angles, while other rotations cannot. The mathematical formalism of the McKay decomposition can be found in section 3.2.\n", + "\n", + "In OpenSquirrel, the `McKayDecomposer` works similarly to the `ABADecomposer`. Thus, we will begin once again by building a circuit the following circuit,\n", + "```\n", + " ┌───┐┌───┐┌───┐┌─────────┐\n", + " q: ┤ H ├┤ Z ├┤ X ├┤ Rx(π/3) ├\n", + " └───┘└───┘└───┘└─────────┘\n", + "``` " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "30f9963d11fe9f10", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.402396Z", + "start_time": "2024-08-05T11:35:25.386249Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[1] q\n", + "\n", + "H q[0]\n", + "Z q[0]\n", + "X q[0]\n", + "Rx(1.0471976) q[0]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Build the circuit structure using the CircuitBuilder\n", + "builder = CircuitBuilder(qubit_register_size=1)\n", + "builder.H(0)\n", + "builder.Z(0)\n", + "builder.X(0)\n", + "builder.Rx(0, Float(math.pi / 3))\n", + "\n", + "# Create a new circuit from the constructed structure\n", + "circuit = builder.to_circuit()\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "69517d8287c1777d", + "metadata": {}, + "source": [ + "The `McKayDecomposer` is called from `opensquirrel.decomposer.mckay_decomposer` and used in a similar method to the `ABADecomposer`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "fb14d44cc2787511", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.530182Z", + "start_time": "2024-08-05T11:35:25.501221Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[1] q\n", + "\n", + "Rz(1.5707963) q[0]\n", + "X90 q[0]\n", + "Rz(1.5707963) q[0]\n", + "Rz(3.1415927) q[0]\n", + "X90 q[0]\n", + "X90 q[0]\n", + "Rz(-1.5707963) q[0]\n", + "X90 q[0]\n", + "Rz(2.0943951) q[0]\n", + "X90 q[0]\n", + "Rz(-1.5707963) q[0]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer\n", + "\n", + "# Decompose the circuit using ZYZDecomposer\n", + "circuit.decompose(decomposer=McKayDecomposer())\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "d5ce1a182acf6f25", + "metadata": {}, + "source": [ + "```\n", + " ┌─────────┐┌─────────┐┌─────────┐┌───────┐┌─────────┐┌─────────┐┌──────────┐»\n", + "q: ┤ Rz(π/2) ├┤ Rx(π/4) ├┤ Rz(π/2) ├┤ Rz(π) ├┤ Rx(π/4) ├┤ Rx(π/4) ├┤ Rz(-π/2) ├»\n", + " └─────────┘└─────────┘└─────────┘└───────┘└─────────┘└─────────┘└──────────┘»\n", + "« ┌─────────┐┌────────────┐┌─────────┐┌──────────┐\n", + "«q: ┤ Rx(π/4) ├┤ Rz(2.0944) ├┤ Rx(π/4) ├┤ Rz(-π/2) ├\n", + "« └─────────┘└────────────┘└─────────┘└──────────┘\n", + "```\n", + "\n", + "Above you can see the decomposition. Depending on the gate, not all five gates are necessary for the decomposition as seen by the first three gates, which are used to decompose the Hadamard gate. \n", + "\n", + "The Pauli Z is simply a $\\pi$ rotation around the Z-axis and the Pauli X gate is two consecutive X90 gates. The $\\pi/3$ X axis rotation gate does subsequently use all five gates in it's decomposition. " + ] + }, + { + "cell_type": "markdown", + "id": "8899ef94cfadd37", + "metadata": {}, + "source": [ + "## 2. Multi-qubit Gates\n", + "\n", + "### 2.1 ABC Decomposition\n", + "\n", + "We can envision multi-qubit gates as controlled gates. This means that if a control qubit or qubit sets are equal to one, perform an operation on a target qubit (or qubits). Again, most architectures do not possess the full control capabilities of a controlled operation. Therefore, a multi-qubit gate is decomposed by three single qubit gates of arbitrary rotations (here we will use the `Rz` and `Ry`), with a `CNOT` gate in between each single qubit gate. An extra `Rz` rotation is added to the control qubit to preserve the global phase. This can be seen in section 3.3.\n", + "\n", + "This decomposition scheme is referred to as the `cnot_decomposer` on OpenSquirrel. In order to test this, we will build a circuit with multi-qubit gates. Below is an example containing a two qubit circuit with a controlled Z gate between the first qubit (control) and the second qubit (target), a controlled Z-axis rotation of $\\pi/3$ radians between the first qubit (control) and the second qubit (target) and an additional controlled Z-axis rotation of $\\pi/2$ radians between the second qubit (control) and the first qubit (target).\n", + "\n", + "```\n", + " ┌─────────┐\n", + " q_0: ─■──────■─────┤ Rz(π/2) ├\n", + " │ ┌────┴────┐└────┬────┘\n", + " q_1: ─■─┤ Rz(π/3) ├─────■─────\n", + " └─────────┘ \n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "9dde566d07c40960", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.629254Z", + "start_time": "2024-08-05T11:35:25.608325Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[2] q\n", + "\n", + "CZ q[0], q[1]\n", + "CR(1.0471976) q[0], q[1]\n", + "CR(1.5707963) q[1], q[0]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Build the circuit structure using the CircuitBuilder\n", + "builder = CircuitBuilder(qubit_register_size=2)\n", + "builder.CZ(0, 1)\n", + "builder.CR(0, 1, Float(math.pi / 3))\n", + "builder.CR(1, 0, Float(math.pi / 2))\n", + "\n", + "# Create a new circuit from the constructed structure\n", + "circuit = builder.to_circuit()\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "8c945ab4572e9f77", + "metadata": {}, + "source": [ + "We can import `CNOTDecomposer` from `opensquirrel.decomposer.cnot_decomposer`. The above circuit can then be decomposed using `CNOTDecomposer` as seen below." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "d10cb0450661ad90", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:25.788024Z", + "start_time": "2024-08-05T11:35:25.754896Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "version 3.0\n", + "\n", + "qubit[2] q\n", + "\n", + "Rz(-3.1415927) q[1]\n", + "Ry(1.5707963) q[1]\n", + "CNOT q[0], q[1]\n", + "Ry(-1.5707963) q[1]\n", + "Rz(3.1415927) q[1]\n", + "Rz(0.52359878) q[1]\n", + "CNOT q[0], q[1]\n", + "Rz(-0.52359878) q[1]\n", + "CNOT q[0], q[1]\n", + "Rz(0.52359878) q[0]\n", + "Rz(0.78539816) q[0]\n", + "CNOT q[1], q[0]\n", + "Rz(-0.78539816) q[0]\n", + "CNOT q[1], q[0]\n", + "Rz(0.78539816) q[1]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer\n", + "\n", + "circuit.decompose(decomposer=CNOTDecomposer())\n", + "circuit" + ] + }, + { + "cell_type": "markdown", + "id": "a53a42651ab8e70", + "metadata": {}, + "source": [ + "```\n", + " »\n", + "q_0: ───────────────────────■───────────────────────────────────────■──»\n", + " ┌────────┐┌─────────┐┌─┴─┐┌──────────┐┌───────┐┌────────────┐┌─┴─┐»\n", + "q_1: ┤ Rz(-π) ├┤ Ry(π/2) ├┤ X ├┤ Ry(-π/2) ├┤ Rz(π) ├┤ Rz(0.5236) ├┤ X ├»\n", + " └────────┘└─────────┘└───┘└──────────┘└───────┘└────────────┘└───┘»\n", + "« ┌────────────┐┌────────────┐┌───┐┌─────────────┐┌───┐ \n", + "«q_0: ─┤ Rz(0.5236) ├┤ Rz(0.7854) ├┤ X ├┤ Rz(-0.7854) ├┤ X ├──────────────\n", + "« ┌┴────────────┤└────────────┘└─┬─┘└─────────────┘└─┬─┘┌────────────┐\n", + "«q_1: ┤ Rz(-0.5236) ├────────────────■───────────────────■──┤ Rz(0.7854) ├\n", + "« └─────────────┘ └────────────┘\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "a0d02d36e1ab2aaf", + "metadata": {}, + "source": [ + "## 3. Decomposition Theory\n", + "\n", + "### 3.1 ABADecomposer\n", + "Let us mathematically look at one of the most common ABA decompositions, the Z-Y-Z decomposition.\n", + "A 3D rotation of angle $\\alpha$ about the (normalized) axis $n=\\left(n_x, n_y, n_z \\right)$ can be represented by the quaternion $q = \\cos\\left(\\alpha/2\\right) + \\sin\\left(\\alpha/2\\right) \\left( n_x i + n_y j + n_z k \\right)$.\n", + "Since composition of rotations is equivalent of the product of their quaternions, we have to find angles $\\theta_1$, $\\theta_2$ and $\\theta_3$ such that\n", + "\n", + "$$\n", + "q =\n", + "\\left[ \\cos\\left(\\frac{\\theta_1}{2}\\right) + k \\sin\\left(\\frac{\\theta_1}{2}\\right) \\right]\n", + "\\left[ \\cos\\left(\\frac{\\theta_2}{2}\\right) + j \\sin\\left(\\frac{\\theta_2}{2}\\right) \\right]\n", + "\\left[ \\cos\\left(\\frac{\\theta_3}{2}\\right) + k \\sin\\left(\\frac{\\theta_3}{2}\\right) \\right]\\ .\n", + "$$\n", + "\n", + "Let us expand this last term with Sympy:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4f16e159e92e1bac", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:26.647908Z", + "start_time": "2024-08-05T11:35:25.839481Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + - \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" + ], + "text/plain": [ + "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + (-sin(theta_2/2)*sin((theta_1 - theta_3)/2))*i + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*j + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*k" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import sympy as sp\n", + "\n", + "theta1, theta2, theta3 = sp.symbols(\"theta_1 theta_2 theta_3\")\n", + "\n", + "z1 = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta1)\n", + "y = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta2)\n", + "z2 = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta3)\n", + "\n", + "rhs = sp.trigsimp(sp.expand(z1 * y * z2))\n", + "rhs" + ] + }, + { + "cell_type": "markdown", + "id": "6e776f2cb7cae465", + "metadata": {}, + "source": [ + "Let us change variables and define $p\\equiv\\theta_1 + \\theta_3$ and $m\\equiv\\theta_1 - \\theta_3$." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "ce154326701df80c", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:26.688943Z", + "start_time": "2024-08-05T11:35:26.650726Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} + - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} j + \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" + ], + "text/plain": [ + "cos(p/2)*cos(theta_2/2) + (-sin(m/2)*sin(theta_2/2))*i + sin(theta_2/2)*cos(m/2)*j + sin(p/2)*cos(theta_2/2)*k" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p, m = sp.symbols(\"p m\")\n", + "\n", + "rhs_simplified = rhs.subs({theta1 + theta3: p, theta1 - theta3: m})\n", + "\n", + "rhs_simplified" + ] + }, + { + "cell_type": "markdown", + "id": "1ece3d36eb99512b", + "metadata": {}, + "source": [ + "The original rotation's quaternion $q$ can be defined in Sympy accordingly:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "723edbb3c7fc18e9", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:26.717028Z", + "start_time": "2024-08-05T11:35:26.694571Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\alpha}{2} \\right)} + n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)} i + n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)} j + n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)} k$" + ], + "text/plain": [ + "cos(alpha/2) + n_x*sin(alpha/2)*i + n_y*sin(alpha/2)*j + n_z*sin(alpha/2)*k" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alpha, nx, ny, nz = sp.symbols(\"alpha n_x n_y n_z\")\n", + "\n", + "q = sp.algebras.Quaternion.from_axis_angle((nx, ny, nz), alpha).subs(\n", + " {nx**2 + ny**2 + nz**2: 1} # We assume the axis is normalized.\n", + ")\n", + "q" + ] + }, + { + "cell_type": "markdown", + "id": "7cb50842c8fa111a", + "metadata": {}, + "source": [ + "We get the following system of equations, where the unknowns are $p$, $m$, and $\\theta_2$:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ff552574a209d4fc", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:26.771550Z", + "start_time": "2024-08-05T11:35:26.722854Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" + ], + "text/plain": [ + "Eq(cos(p/2)*cos(theta_2/2), cos(alpha/2))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], + "text/plain": [ + "Eq(-sin(m/2)*sin(theta_2/2), n_x*sin(alpha/2))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} = n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], + "text/plain": [ + "Eq(sin(theta_2/2)*cos(m/2), n_y*sin(alpha/2))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], + "text/plain": [ + "Eq(sin(p/2)*cos(theta_2/2), n_z*sin(alpha/2))" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display\n", + "\n", + "display(\n", + " sp.Eq(rhs_simplified.a, q.a),\n", + " sp.Eq(rhs_simplified.b, q.b),\n", + " sp.Eq(rhs_simplified.c, q.c),\n", + " sp.Eq(rhs_simplified.d, q.d),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e6b34ef9cb46f2e4", + "metadata": {}, + "source": [ + "Instead, assume $\\sin(p/2) \\neq 0$, then we can substitute in the first equation $\\cos\\left(\\theta_2/2\\right)$ with its value computed from the last equation. We get:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "ace813c5d9563968", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:26.852537Z", + "start_time": "2024-08-05T11:35:26.773546Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}}{\\tan{\\left(\\frac{p}{2} \\right)}} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" + ], + "text/plain": [ + "Eq(n_z*sin(alpha/2)/tan(p/2), cos(alpha/2))" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.trigsimp(sp.Eq(rhs_simplified.a, q.a).subs(sp.cos(theta2 / 2), nz * sp.sin(alpha / 2) / sp.sin(p / 2)))" + ] + }, + { + "cell_type": "markdown", + "id": "c9aed6548039af25", + "metadata": {}, + "source": [ + "Therefore\n", + "$$\n", + "p = \\theta_1 + \\theta_3 = 2 \\arctan \\left[n_z \\tan\n", + "\\left(\n", + "\\frac{\\alpha}{2} \\right)\\right]\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "6299c321c4d313cf", + "metadata": {}, + "source": [ + "We can then deduce\n", + "$$\n", + "\\begin{array}{rl}\n", + "\\theta_2 & = 2 \\arccos \\left[ \\cos \\left(\\frac{\\alpha}{2}\\right) \\cos^{-1}\\left(\\frac{p}{2}\\right) \\right] \\\\\n", + "&= 2 \\arccos \\left[ \\cos\\left(\\frac{\\alpha}{2}\\right) \\sqrt{1 + n_z^2 \\tan^2 \\left(\n", + " \\frac{\\alpha}{2} \\right) } \\right] \\\\\n", + "\\end{array}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "301a87d61a19589f", + "metadata": {}, + "source": [ + "Using the third equation, we can finally deduce the value of $m$:\n", + "$$\n", + "m=\\theta_1 - \\theta_3 = 2\\arccos\\left[\\frac{ n_y \\sin\\left(\\frac{\\alpha}{2}\\right) } {\\sin\\left(\\frac{\\theta_2}{2}\\right)}\\right]\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "e3fc4cdb6d15dd1", + "metadata": {}, + "source": [ + "The terms are similar to the other decompositions, XZX, YXY, ZXZ, XYX and YZY. However, for ZXZ, XYX and YZY, the $i$ term in the quaternion is positive as seen below in the YZY decomposition." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "41885c573a5be060", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:27.864665Z", + "start_time": "2024-08-05T11:35:26.853611Z" + } + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} k$" + ], + "text/plain": [ + "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + sin(theta_2/2)*sin((theta_1 - theta_3)/2)*i + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*j + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*k" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "theta1, theta2, theta3 = sp.symbols(\"theta_1 theta_2 theta_3\")\n", + "\n", + "y1 = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta1)\n", + "z = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta2)\n", + "y2 = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta3)\n", + "\n", + "rhs = sp.trigsimp(sp.expand(y1 * z * y2))\n", + "rhs" + ] + }, + { + "cell_type": "markdown", + "id": "a41b84ed5f3365b2", + "metadata": {}, + "source": [ + "Thus, in order to correct for the orientation of the rotation, $\\theta_1$ and $\\theta_3$ are swapped. " + ] + }, + { + "cell_type": "markdown", + "id": "7fe8f13d6a29a652", + "metadata": {}, + "source": [ + "### 3.2 Mckay Decomposition\n", + "The McKay decomposition can be shown by studying the matrix representation of a generic gate with 3 Euler angles, $\\theta$, $\\phi$, and $\\lambda$. The $U$ gate can be seen below, which is capable of forming any unitary matrix or Bloch sphere rotation. \n", + "\n", + "$$\n", + "U(\\theta,\\phi, \\lambda) = \n", + "\\begin{bmatrix}\n", + " \\mathrm{cos}(\\theta/2) & -i e^{i\\lambda}\\mathrm{sin}(\\theta/2) \\\\\n", + "-i e^{i\\phi}\\mathrm{sin}(\\theta/2) & e^{i(\\lambda+\\phi)}\\mathrm{cos}(\\theta/2)\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "This can be conveniently represented as,\n", + "$$\n", + "U(\\theta,\\phi, \\lambda) = Rz(\\phi) \\cdot Rx(\\theta) \\cdot Rz(\\lambda). \n", + "$$\n", + "\n", + "Using the identity,\n", + "$$\n", + "Rx(\\theta) = Rz(-\\pi/2) \\cdot Rx(\\pi/2) \\cdot Rz(\\pi - \\theta) \\cdot Rx(\\pi/2) \\cdot Rz(-\\pi/2), \n", + "$$\n", + "one can show that any unitary gate is,\n", + "$$\n", + "U(\\theta,\\phi, \\lambda) = Rz(\\phi-\\pi/2) \\cdot Rx(\\pi/2) \\cdot Rz(\\pi - \\theta) \\cdot Rx(\\pi/2) \\cdot Rz(\\lambda-\\pi/2).\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "id": "866e89a24587f0af", + "metadata": {}, + "source": [ + "### 3.3 ABA Decomposition\n", + "In a two qubit system, the unitary matrix of a controlled operation is seen below,\n", + "$$ \n", + "U =\n", + "\\begin{pmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & U_{00} & U_{01} \\\\\n", + "0 & 0 & U_{10} & U_{11}\n", + "\\end{pmatrix}\n", + "$$\n", + "\n", + "OpenSquirrel utilises the ABC decomposition (https://arxiv.org/abs/quant-ph/9503016) to decompose multi-qubit gates. The trick is to express a 1-qubit unitary $U$ as,\n", + "$$\n", + "U = e^{i\\alpha} A \\times B \\times C,\n", + "$$\n", + "where gates $A$, $B$, and $C$ are chosen such that $ABC = I$. An arbitrary controlled unitary is then expressed as,\n", + "```\n", + " q_0: ───────■─────────■────────■─────\n", + " ┌───┐┌─┴─┐┌───┐┌─┴─┐┌───┐ │Ph(α) \n", + " q_1: ┤ A ├┤ X ├┤ B ├┤ X ├┤ C ├─■─────\n", + " └───┘└───┘└───┘└───┘└───┘ \n", + "```\n", + "where the first qubit acts as a control for two CNOTs and a controlled phase gate with a rotation of $\\alpha$. This can be reformulated as,\n", + "```\n", + " ┌───────┐\n", + " q_0: ───────■─────────■───┤ Rz(α) ├\n", + " ┌───┐┌─┴─┐┌───┐┌─┴─┐ └─┬───┬─┘\n", + " q_1: ┤ A ├┤ X ├┤ B ├┤ X ├───┤ C ├──\n", + " └───┘└───┘└───┘└───┘ └───┘ \n", + "```\n", + "where the last controlled gate is substituted with a single qubit Z-axis rotation of $\\alpha$ degrees.\n", + "\n", + "OpenSquirrel uses Z-Y-Z to construct the ABC gates. Consider,\n", + "$$\n", + "\\begin{split}\n", + " U &= e^{i\\alpha} R_z(\\theta_2) R_y(\\theta_1) R_z(\\theta_0) \\\\\n", + " &= e^{i\\alpha} R_z\\big(\\theta_2\\big) R_y\\big(\\frac{1}{2}\\theta_1\\big) R_y\\big(\\frac{1}{2}\\theta_0\\big)R_z\\big(\\frac{1}{2}\\theta_0+\\frac{1}{2}\\theta_2\\big)R_z\\big(\\frac{1}{2}\\theta_0-\\frac{1}{2}\\theta_2\\big) \\\\\n", + " &= e^{i\\alpha} R_z\\big(\\theta_2\\big) R_y\\big(\\frac{1}{2}\\theta_1\\big) X R_y\\big(-\\frac{1}{2}\\theta_0\\big) X X R_z\\big(-\\frac{1}{2}\\theta_0-\\frac{1}{2}\\theta_2\\big) X R_z\\big(\\frac{1}{2}\\theta_0-\\frac{1}{2}\\theta_2\\big) \\\\\n", + " &= e^{i\\alpha} A X B X C\n", + "\\end{split},\n", + "$$\n", + "thus, \n", + "$$\n", + "\\begin{split}\n", + "A &= Rz\\bigg(\\theta_2 \\bigg)Ry\\bigg( \\frac{1}{2} \\theta_1 \\bigg), \\\\\n", + "B &= Ry\\bigg( - \\frac{1}{2} \\theta_1 \\bigg)Rz\\bigg( -\\frac{1}{2} \\theta_0 - \\frac{1}{2}\\theta_2 \\bigg),\\\\\n", + "C &= Rz\\bigg(\\frac{1}{2} \\theta_0 - \\frac{1}{2} \\theta_2 \\bigg)\n", + "\\end{split}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3cc1e9963f3e794d", + "metadata": { + "ExecuteTime": { + "end_time": "2024-08-05T11:35:27.882752Z", + "start_time": "2024-08-05T11:35:27.871794Z" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mkdocs.yaml b/mkdocs.yaml index 26601854..9f148fe0 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -1,6 +1,78 @@ site_name: OpenSquirrel -site_url: http://127.0.0.1:8000/ +site_dir: public +repo_url: https://github.com/QuTech-Delft/OpenSquirrel +use_directory_urls: false + nav: - Home: index.md - - Development: development.md -theme: readthedocs + - Tutorial: tutorial.md + - API documentation: reference/ + +theme: + name: "material" + features: + - navigation.indexes + - navigation.tabs + - navigation.tracking + - navigation.footer + palette: + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + toggle: + icon: material/brightness-auto + name: Switch to light mode + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + primary: white + accent: light blue + toggle: + icon: material/brightness-7 + name: Switch to dark mode + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to system preference + +markdown_extensions: + - attr_list + - admonition + - def_list + - footnotes + - md_in_html + - pymdownx.arithmatex: + generic: true + - pymdownx.caret + - pymdownx.critic + - pymdownx.details + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.mark + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde + - tables + +extra_javascript: + - javascripts/mathjax.js + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js + +plugins: + - gen-files: + scripts: + - scripts/gen_reference_page.py + - literate-nav: + nav_file: reference.md + - mkdocstrings + - search diff --git a/opensquirrel/Circuit.py b/opensquirrel/Circuit.py deleted file mode 100644 index 7b0e6217..00000000 --- a/opensquirrel/Circuit.py +++ /dev/null @@ -1,129 +0,0 @@ -import antlr4 -import numpy as np - -from opensquirrel.DefaultGates import DefaultGates # For the doctest. -from opensquirrel.McKayDecomposer import McKayDecomposer -from opensquirrel.Replacer import Replacer -from opensquirrel.SquirrelAST import SquirrelAST -from opensquirrel.SquirrelASTCreator import SquirrelASTCreator -from opensquirrel.SquirrelErrorHandler import SquirrelErrorHandler -from opensquirrel.TestInterpreter import TestInterpreter -from opensquirrel.TypeChecker import TypeChecker -from opensquirrel.Writer import Writer -from parsing.GeneratedParsingCode import CQasm3Lexer, CQasm3Parser - - -class Circuit: - """The Circuit class is the only interface to access OpenSquirrel's features. - - A Circuit object is constructed from a cQasm3 string, representing a quantum circuit, and a Python dictionary - containing the prototypes and semantic of the allowed quantum gates. - A default set of gates is exposed as `opensquirrel.DefaultGates` but it can be replaced and extended. - - >>> c = Circuit.from_string(DefaultGates, "version 3.0; qubit[3] q; h q[0]") - >>> c - version 3.0 - - qubit[3] q - - h q[0] - - >>> c.decompose_mckay() - >>> c - version 3.0 - - qubit[3] q - - x90 q[0] - rz q[0], 1.5707963267948966 - x90 q[0] - - """ - - def __init__(self, squirrelAST: SquirrelAST): - """Create a circuit object from a SquirrelAST object.""" - - self.gates = squirrelAST.gates - self.squirrelAST = squirrelAST - - @classmethod - def from_string(cls, gates: dict, cqasm3_string: str): - """Create a circuit object from a cQasm3 string. All the gates in the circuit need to be defined in - the `gates` argument. - - * type-checking is performed, eliminating qubit indices errors and incoherencies - * checks that used gates are supported and mentioned in `gates` with appropriate signatures - * does not support map or variables, and other things... - * for example of `gates` dictionary, please look at TestGates.py - """ - - input_stream = antlr4.InputStream(cqasm3_string) - - lexer = CQasm3Lexer.CQasm3Lexer(input_stream) - - stream = antlr4.CommonTokenStream(lexer) - - parser = CQasm3Parser.CQasm3Parser(stream) - - parser.removeErrorListeners() - parser.addErrorListener(SquirrelErrorHandler()) - - tree = parser.prog() - - typeChecker = TypeChecker(gates) - typeChecker.visit(tree) # FIXME: return error instead of throwing? - - squirrelASTCreator = SquirrelASTCreator(gates) - - return Circuit(squirrelASTCreator.visit(tree)) - - def getNumberOfQubits(self) -> int: - return self.squirrelAST.nQubits - - def getQubitRegisterName(self) -> str: - return self.squirrelAST.qubitRegisterName - - def decompose_mckay(self): - """Perform gate fusion on all one-qubit gates and decompose them in the McKay style. - - * all one-qubit gates on same qubit are merged together, without attempting to commute any gate - * two-or-more-qubit gates are left as-is - * merged one-qubit gates are decomposed according to McKay decomposition, that is: - gate ----> Rz.Rx(pi/2).Rz.Rx(pi/2).Rz - * _global phase is deemed irrelevant_, therefore a simulator backend might produce different output - for the input and output circuit - those outputs should be equivalent modulo global phase. - """ - - mcKayDecomposer = McKayDecomposer(self.gates) - self.squirrelAST = mcKayDecomposer.process(self.squirrelAST) - - def replace(self, gateName: str, f): - """Manually replace occurrences of a given gate with a list of gates. - - * this can be called decomposition - but it's the least fancy version of it - * function parameter gives the decomposition based on parameters of original gate - """ - - assert gateName in self.gates, f"Cannot replace unknown gate `{gateName}`" - replacer = Replacer(self.gates) # FIXME: only one instance of this is needed. - self.squirrelAST = replacer.process(self.squirrelAST, gateName, f) - - def test_get_circuit_matrix(self) -> np.ndarray: - """Get the (large) unitary matrix corresponding to the circuit. - - * this matrix has 4**n elements, where n is the number of qubits - * therefore this function is only here for testing purposes on small number of qubits - * result is stored as a numpy array of complex numbers - """ - - interpreter = TestInterpreter(self.gates) - return interpreter.process(self.squirrelAST) - - def __repr__(self) -> str: - """Write the circuit to a cQasm3 string. - - * comments are removed - """ - - writer = Writer(self.gates) - return writer.process(self.squirrelAST) diff --git a/opensquirrel/CircuitBuilder.py b/opensquirrel/CircuitBuilder.py deleted file mode 100644 index eff52064..00000000 --- a/opensquirrel/CircuitBuilder.py +++ /dev/null @@ -1,32 +0,0 @@ -from opensquirrel.Circuit import Circuit -from opensquirrel.DefaultGates import DefaultGates -from opensquirrel.SquirrelAST import SquirrelAST - - -class CircuitBuilder: - """A class using the builder pattern to make construction of circuits easy. - Adds corresponding gate when a method is called. Checks gates are known and called with the right arguments. - Mainly here to allow for Qiskit-style circuit construction: - - >>> myCircuit = CircuitBuilder(DefaultGates, 3).h(0).cnot(0, 1).cnot(0, 2).to_circuit() - - """ - - __default_qubit_register_name = "q" - - def __init__(self, gates: dict, numberOfQubits: int): - self.squirrelAST = SquirrelAST(gates, numberOfQubits, self.__default_qubit_register_name) - - def __getattr__(self, attr): - def addComment(commentString: str): - self.squirrelAST.addComment(commentString) - return self - - def addThisGate(*args): - self.squirrelAST.addGate(attr, *args) - return self - - return addComment if attr == "comment" else addThisGate - - def to_circuit(self) -> Circuit: - return Circuit(self.squirrelAST) diff --git a/opensquirrel/Common.py b/opensquirrel/Common.py deleted file mode 100644 index 8da47982..00000000 --- a/opensquirrel/Common.py +++ /dev/null @@ -1,50 +0,0 @@ -import cmath -import math -from enum import Enum -from typing import Tuple - -import numpy as np - -ATOL = 0.0000001 - - -class ExprType(Enum): - QUBITREFS = 1 - FLOAT = 2 - INT = 3 - - -class ArgType(Enum): - QUBIT = 0 - FLOAT = 1 - INT = 2 - - -def exprTypeToArgType(t: ExprType) -> ArgType: - if t == ExprType.QUBITREFS: - return ArgType.QUBIT - if t == ExprType.FLOAT: - return ArgType.FLOAT - if t == ExprType.INT: - return ArgType.INT - - -X = np.array([[0, 1], [1, 0]]) -Y = np.array([[0, -1j], [1j, 0]]) -Z = np.array([[1, 0], [0, -1]]) - - -def Can1(axis: Tuple[float, float, float], angle: float, phase: float = 0) -> np.ndarray: - nx, ny, nz = axis - norm = math.sqrt(nx**2 + ny**2 + nz**2) - assert norm > 0.00000001 - - nx /= norm - ny /= norm - nz /= norm - - result = cmath.rect(1, phase) * ( - math.cos(angle / 2) * np.identity(2) - 1j * math.sin(angle / 2) * (nx * X + ny * Y + nz * Z) - ) - - return result diff --git a/opensquirrel/DefaultGates.py b/opensquirrel/DefaultGates.py deleted file mode 100644 index 02f3e795..00000000 --- a/opensquirrel/DefaultGates.py +++ /dev/null @@ -1,104 +0,0 @@ -import cmath -import math - -import numpy as np - -from opensquirrel.Common import ArgType -from opensquirrel.Gates import MultiQubitMatrixSemantic, SingleQubitAxisAngleSemantic - -DefaultGates = { - "h": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2), - }, - "H": "h", # This is how you define an alias. - "hadamard": "h", - "x": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), - }, - "X": "x", - "y": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2), - }, - "Y": "y", - "z": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2), - }, - "Z": "z", - "rx": { - "signature": (ArgType.QUBIT, ArgType.FLOAT), - "semantic": lambda theta: SingleQubitAxisAngleSemantic(axis=(1, 0, 0), angle=theta, phase=0), - }, - "RX": "rx", - "x90": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(1, 0, 0), angle=math.pi / 2, phase=0), - }, - "X90": "x90", - "mx90": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(1, 0, 0), angle=-math.pi / 2, phase=0), - }, - "MX90": "mx90", - "ry": { - "signature": (ArgType.QUBIT, ArgType.FLOAT), - "semantic": lambda theta: SingleQubitAxisAngleSemantic(axis=(0, 1, 0), angle=theta, phase=0), - }, - "RY": "ry", - "y90": { - "signature": (ArgType.QUBIT,), - "semantic": SingleQubitAxisAngleSemantic(axis=(0, 1, 0), angle=math.pi / 2, phase=0), - }, - "Y90": "y90", - "rz": { - "signature": (ArgType.QUBIT, ArgType.FLOAT), - "semantic": lambda theta: SingleQubitAxisAngleSemantic(axis=(0, 0, 1), angle=theta, phase=0), - }, - "RZ": "rz", - "cnot": { - "signature": (ArgType.QUBIT, ArgType.QUBIT), - "semantic": MultiQubitMatrixSemantic( - np.array( - [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - ] - ) - ), - }, - "CNOT": "cnot", - "cz": { - "signature": (ArgType.QUBIT, ArgType.QUBIT), - "semantic": MultiQubitMatrixSemantic( - np.array( - [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, -1], - ] - ) - ), - }, - "CZ": "cz", - "cr": { - "signature": (ArgType.QUBIT, ArgType.QUBIT, ArgType.FLOAT), - "semantic": lambda theta: MultiQubitMatrixSemantic( - np.array( - [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, cmath.rect(1, theta)], - ] - ) - ), - }, - "CR": "cr", - # Rest is TODO -} diff --git a/opensquirrel/Gates.py b/opensquirrel/Gates.py deleted file mode 100644 index eb097c39..00000000 --- a/opensquirrel/Gates.py +++ /dev/null @@ -1,71 +0,0 @@ -from typing import Tuple - -import numpy as np - -from opensquirrel.Common import ArgType - - -class Semantic: - pass - - -class SingleQubitAxisAngleSemantic(Semantic): - def __init__(self, axis: Tuple[float, float, float], angle: float, phase: float): - self.axis = self._normalize(np.array(axis).astype(np.float64)) - self.angle = angle - self.phase = phase - - def _normalize(self, axis): - norm = np.linalg.norm(axis) - axis /= norm - return axis - - -class MultiQubitMatrixSemantic(Semantic): - def __init__(self, matrix: np.ndarray): - self.matrix = matrix - - -class ControlledSemantic(MultiQubitMatrixSemantic): - def __init__(self, numberOfControlQubits: int, matrix: np.ndarray): - pass # TODO - - -def queryEntry(gatesDict: dict, gateName: str): - if gateName not in gatesDict: - raise Exception(f"Unknown gate or alias of gate: `{gateName}`") - - entry = gatesDict[gateName] - - if isinstance(entry, str): - return queryEntry(gatesDict, entry) - - return entry - - -def querySemantic(gatesDict: dict, gateName: str, *gateArgs): - signature = querySignature(gatesDict, gateName) - assert len(gateArgs) == sum(1 for t in signature if t != ArgType.QUBIT) - - entry = queryEntry(gatesDict, gateName) - - assert "semantic" in entry, f"Gate semantic not defined for gate: `{gateName}`" - - semantic = entry["semantic"] - - if isinstance(semantic, Semantic): - assert len(gateArgs) == 0, f"Gate `{gateName}` accepts no argument" - - return semantic - - return semantic(*gateArgs) # TODO: nice error when args don't match? But should be already checked by typer - - -def querySignature(gatesDict: dict, gateName: str): - entry = queryEntry(gatesDict, gateName) - - assert "signature" in entry, f"Gate signature not defined for gate: `{gateName}`" - - signature = entry["signature"] - - return signature diff --git a/opensquirrel/MatrixExpander.py b/opensquirrel/MatrixExpander.py deleted file mode 100644 index 97b92756..00000000 --- a/opensquirrel/MatrixExpander.py +++ /dev/null @@ -1,44 +0,0 @@ -import numpy as np - -from opensquirrel.Common import Can1 -from opensquirrel.Gates import MultiQubitMatrixSemantic, Semantic, SingleQubitAxisAngleSemantic - - -# This should only be used for testing and on circuits with low number of qubits. -def getBigMatrix(semantic: Semantic, qubitOperands, totalQubits): - if isinstance(semantic, SingleQubitAxisAngleSemantic): - whichQubit = qubitOperands[0] - - axis, angle, phase = semantic.axis, semantic.angle, semantic.phase - result = np.kron( - np.kron(np.eye(1 << (totalQubits - whichQubit - 1)), Can1(axis, angle, phase)), np.eye(1 << whichQubit) - ) - assert result.shape == (1 << totalQubits, 1 << totalQubits) - return result - - assert isinstance(semantic, MultiQubitMatrixSemantic) - - m = semantic.matrix - - assert m.shape[0] == 1 << len(qubitOperands) - - result = np.zeros((1 << totalQubits, 1 << totalQubits), dtype=np.complex128) - - for input in range(1 << totalQubits): - smallMatrixCol = 0 - for i in range(len(qubitOperands)): - smallMatrixCol |= ((input & (1 << qubitOperands[i])) >> qubitOperands[i]) << (len(qubitOperands) - 1 - i) - - col = m[:, smallMatrixCol] - - for output in range(len(col)): - coeff = col[output] - - largeOutput = 0 - for i in range(len(qubitOperands)): - index = len(qubitOperands) - i - 1 - largeOutput |= ((output & (1 << index)) >> index) << qubitOperands[i] - - result[largeOutput][input] = coeff - - return result diff --git a/opensquirrel/McKayDecomposer.py b/opensquirrel/McKayDecomposer.py deleted file mode 100644 index d722f04c..00000000 --- a/opensquirrel/McKayDecomposer.py +++ /dev/null @@ -1,137 +0,0 @@ -from math import acos, atan2, cos, pi, sin, sqrt -from typing import Tuple - -import numpy as np - -from opensquirrel.Common import ATOL, ArgType -from opensquirrel.Gates import SingleQubitAxisAngleSemantic, queryEntry, querySemantic, querySignature -from opensquirrel.SquirrelAST import SquirrelAST - - -def normalizeAngle(x: float) -> float: - t = x - 2 * pi * (x // (2 * pi) + 1) - if t < -pi + ATOL: - t += 2 * pi - elif t > pi: - t -= 2 * pi - return t - - -class McKayDecomposer: - def __init__(self, gates): - self.gates = gates - - queryEntry(self.gates, "rz") # FIXME: improve. Pass those gates as parameters to the constructor. - queryEntry(self.gates, "x90") - - def _decomposeAndAdd(self, qubit, angle: float, axis: Tuple[float, float, float]): - if abs(angle) < ATOL: - return - - # McKay decomposition - - zaMod = sqrt(cos(angle / 2) ** 2 + (axis[2] * sin(angle / 2)) ** 2) - zbMod = abs(sin(angle / 2)) * sqrt(axis[0] ** 2 + axis[1] ** 2) - - theta = pi - 2 * atan2(zbMod, zaMod) - - alpha = atan2(-sin(angle / 2) * axis[2], cos(angle / 2)) - beta = atan2(-sin(angle / 2) * axis[0], -sin(angle / 2) * axis[1]) - - lam = beta - alpha - phi = -beta - alpha - pi - - lam = normalizeAngle(lam) - phi = normalizeAngle(phi) - theta = normalizeAngle(theta) - - if abs(lam) > ATOL: - self.output.addGate("rz", qubit, lam) - - self.output.addGate("x90", qubit) - - if abs(theta) > ATOL: - self.output.addGate("rz", qubit, theta) - - self.output.addGate("x90", qubit) - - if abs(phi) > ATOL: - self.output.addGate("rz", qubit, phi) - - def _flush(self, q): - if q not in self.oneQubitGates: - return - p = self.oneQubitGates.pop(q) - self._decomposeAndAdd(q, p["angle"], p["axis"]) - - def _flush_all(self): - while len(self.oneQubitGates) > 0: - self._flush(next(iter(self.oneQubitGates.keys()))) - - def _acc(self, qubit, semantic: SingleQubitAxisAngleSemantic): - axis, angle, phase = semantic.axis, semantic.angle, semantic.phase - - if qubit not in self.oneQubitGates: - self.oneQubitGates[qubit] = {"angle": angle, "axis": axis, "phase": phase} - return - - existing = self.oneQubitGates[qubit] - combinedPhase = phase + existing["phase"] - - a = angle - l = axis - b = existing["angle"] - m = existing["axis"] - - combinedAngle = 2 * acos(cos(a / 2) * cos(b / 2) - sin(a / 2) * sin(b / 2) * np.dot(l, m)) - - if abs(sin(combinedAngle / 2)) < ATOL: - self.oneQubitGates.pop(qubit) - return - - combinedAxis = ( - 1 - / sin(combinedAngle / 2) - * (sin(a / 2) * cos(b / 2) * l + cos(a / 2) * sin(b / 2) * m + sin(a / 2) * sin(b / 2) * np.cross(l, m)) - ) - - self.oneQubitGates[qubit] = {"angle": combinedAngle, "axis": combinedAxis, "phase": combinedPhase} - - def process(self, squirrelAST): - # FIXME: duplicate gates in ast and self?? - self.output = SquirrelAST(self.gates, squirrelAST.nQubits, squirrelAST.qubitRegisterName) - self.oneQubitGates = {} - - for operation in squirrelAST.operations: - if isinstance(operation, str): - continue - - self._processSingleOperation(operation) - - self._flush_all() - - return self.output # FIXME: instead of returning a new AST, modify existing one - - def _processSingleOperation(self, operation): - gateName, gateArgs = operation - - signature = querySignature(self.gates, gateName) - qubitArguments = [gateArgs[i] for i in range(len(gateArgs)) if signature[i] == ArgType.QUBIT] - nonQubitArguments = [gateArgs[i] for i in range(len(gateArgs)) if signature[i] != ArgType.QUBIT] - - if len(qubitArguments) >= 2: - [self._flush(q) for q in qubitArguments] - self.output.addGate(gateName, *gateArgs) - return - - if len(qubitArguments) == 0: - assert False, "Unsupported" - return - - semantic = querySemantic(self.gates, gateName, *nonQubitArguments) - - assert isinstance( - semantic, SingleQubitAxisAngleSemantic - ), f"Not supported for single qubit gate `{gateName}`: {type(semantic)}" - - self._acc(qubitArguments[0], semantic) diff --git a/opensquirrel/Replacer.py b/opensquirrel/Replacer.py deleted file mode 100644 index 2a30ca8f..00000000 --- a/opensquirrel/Replacer.py +++ /dev/null @@ -1,52 +0,0 @@ -from opensquirrel.Common import ArgType -from opensquirrel.Gates import querySignature -from opensquirrel.SquirrelAST import SquirrelAST - - -class Replacer: - def __init__(self, gates): - self.gates = gates - - def process(self, squirrelAST: SquirrelAST, replacedGateName: str, f): - result = SquirrelAST(self.gates, squirrelAST.nQubits, squirrelAST.qubitRegisterName) - - signature = querySignature(self.gates, replacedGateName) - - for operation in squirrelAST.operations: - if isinstance(operation, str): - continue - - otherGateName, otherArgs = operation - - if otherGateName != replacedGateName: - result.addGate(otherGateName, *otherArgs) - continue - - # FIXME: handle case where if f is not a function but directly a list. - - assert len(otherArgs) == len(signature) - originalQubits = set(otherArgs[i] for i in range(len(otherArgs)) if signature[i] == ArgType.QUBIT) - - replacement = f(*otherArgs) - - # TODO: Here, check that the semantic of the replacement is the same! - # For this, need to update the simulation capabilities. - - # TODO: Do we allow skipping the replacement, based on arguments? - - assert isinstance(replacement, list), "Substitution needs to be a list" - - for replacementGate in replacement: - replacementGateName, replacementGateArgs = replacementGate - - replacementGateSignature = querySignature(self.gates, replacementGateName) - assert len(replacementGateArgs) == len(replacementGateSignature) - assert all( - replacementGateArgs[i] in originalQubits - for i in range(len(replacementGateArgs)) - if replacementGateSignature[i] == ArgType.QUBIT - ), (f"Substitution for gate `{replacedGateName}` " f"must use the input qubits {originalQubits} only") - - result.addGate(replacementGateName, *replacementGateArgs) - - return result diff --git a/opensquirrel/SquirrelAST.py b/opensquirrel/SquirrelAST.py deleted file mode 100644 index 3e8486f1..00000000 --- a/opensquirrel/SquirrelAST.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import Any - -from opensquirrel.Gates import querySignature - - -class SquirrelAST: - # This is just a list of gates (for now?) - def __init__(self, gates, nQubits: int, qubitRegisterName: str): - self.gates = gates - self.nQubits: int = nQubits - self.operations: list[Any] = [] - self.qubitRegisterName: str = qubitRegisterName - - def addGate(self, gateName: str, *interpretedArgs): - signature = querySignature(self.gates, gateName) - assert len(signature) == len(interpretedArgs), f"Wrong number of arguments for gate `{gateName}`" - - # FIXME: Also check int vs float - - self.operations.append((gateName, interpretedArgs)) - - def addComment(self, commentString: str): - assert "*/" not in commentString, "Comment contains illegal characters" - self.operations.append(commentString) - - def __eq__(self, other): - if self.gates != other.gates: - return False - - if self.nQubits != other.nQubits: - return False - - if self.qubitRegisterName != other.qubitRegisterName: - return False - - if len(self.operations) != len(other.operations): - return False - - for i in range(len(self.operations)): - leftName, leftArgs = self.operations[i] - rightName, rightArgs = other.operations[i] - - if leftName != rightName: - return False - - if len(leftArgs) != len(rightArgs) or any(leftArgs[i] != rightArgs[i] for i in range(len(leftArgs))): - # if len(leftArgs) != len(rightArgs) or any(abs(leftArgs[i] - rightArgs[i]) > - # ATOL for i in range(len(leftArgs))): - return False - - return True - - def __repr__(self): - return f"""AST ({self.nQubits} qubits, register {self.qubitRegisterName}): {self.operations}""" diff --git a/opensquirrel/SquirrelASTCreator.py b/opensquirrel/SquirrelASTCreator.py deleted file mode 100644 index a9b70032..00000000 --- a/opensquirrel/SquirrelASTCreator.py +++ /dev/null @@ -1,64 +0,0 @@ -from opensquirrel.Common import ArgType -from opensquirrel.Gates import querySignature -from opensquirrel.SquirrelAST import SquirrelAST -from parsing.GeneratedParsingCode import CQasm3Visitor - - -class SquirrelASTCreator(CQasm3Visitor.CQasm3Visitor): - def __init__(self, gates): - self.gates = gates - - def visitProg(self, ctx): - qubitRegisterName, nQubits = self.visit(ctx.qubitRegisterDeclaration()) # Use? - - self.squirrelAST = SquirrelAST(self.gates, nQubits, qubitRegisterName) - - for gApp in ctx.gateApplication(): - self.visit(gApp) - - return self.squirrelAST - - def visitGateApplication(self, ctx): - gateName = str(ctx.ID()) - - signature = querySignature(self.gates, gateName) - - numberOfQubits = next( - len(self.visit(ctx.expr(i))) for i in range(len(signature)) if signature[i] == ArgType.QUBIT - ) - - expandedArgs = [ - self.visit(ctx.expr(i)) - if signature[i] == ArgType.QUBIT - else [self.visit(ctx.expr(i)) for _ in range(numberOfQubits)] - for i in range(len(signature)) - ] - - for individualArgs in zip(*expandedArgs): - self.squirrelAST.addGate(gateName, *individualArgs) - - def visitQubitRegisterDeclaration(self, ctx): - return str(ctx.ID()), int(str(ctx.INT())) - - def visitQubit(self, ctx): - return [int(str(ctx.INT()))] - - def visitQubits(self, ctx): - return list(map(int, map(str, ctx.INT()))) - - def visitQubitRange(self, ctx): - qubitIndex1 = int(str(ctx.INT(0))) - qubitIndex2 = int(str(ctx.INT(1))) - return list(range(qubitIndex1, qubitIndex2 + 1)) - - def visitFloatLiteral(self, ctx): - return float(str(ctx.FLOAT())) - - def visitNegatedFloatLiteral(self, ctx): - return -float(str(ctx.FLOAT())) - - def visitIntLiteral(self, ctx): - return int(str(ctx.INT())) - - def visitNegatedIntLiteral(self, ctx): - return -int(str(ctx.INT())) diff --git a/opensquirrel/SquirrelErrorHandler.py b/opensquirrel/SquirrelErrorHandler.py deleted file mode 100644 index 02fc77c6..00000000 --- a/opensquirrel/SquirrelErrorHandler.py +++ /dev/null @@ -1,12 +0,0 @@ -from antlr4.error.ErrorListener import ErrorListener as Antlr4ErrorListener - - -class SquirrelParseException(Exception): - pass - - -class SquirrelErrorHandler(Antlr4ErrorListener): - def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e): - stack = recognizer.getRuleInvocationStack() - stack.reverse() - raise SquirrelParseException(f"Parsing error at {line}:{column}: {msg}") diff --git a/opensquirrel/TestInterpreter.py b/opensquirrel/TestInterpreter.py deleted file mode 100644 index 706dc365..00000000 --- a/opensquirrel/TestInterpreter.py +++ /dev/null @@ -1,30 +0,0 @@ -import numpy as np - -from opensquirrel.Common import ArgType -from opensquirrel.Gates import querySemantic, querySignature -from opensquirrel.MatrixExpander import getBigMatrix - - -class TestInterpreter: - def __init__(self, gates): - self.gates = gates - - def process(self, squirrelAST): - totalUnitary = np.eye(1 << squirrelAST.nQubits, dtype=np.complex128) - - for operation in squirrelAST.operations: - if isinstance(operation, str): - continue - - gateName, gateArgs = operation - - signature = querySignature(self.gates, gateName) - assert len(gateArgs) == len(signature) - qubitOperands = [gateArgs[i] for i in range(len(gateArgs)) if signature[i] == ArgType.QUBIT] - semantic = querySemantic( - self.gates, gateName, *[gateArgs[i] for i in range(len(gateArgs)) if signature[i] != ArgType.QUBIT] - ) - bigMatrix = getBigMatrix(semantic, qubitOperands, totalQubits=squirrelAST.nQubits) - totalUnitary = bigMatrix @ totalUnitary - - return totalUnitary diff --git a/opensquirrel/TypeChecker.py b/opensquirrel/TypeChecker.py deleted file mode 100644 index 00f907f8..00000000 --- a/opensquirrel/TypeChecker.py +++ /dev/null @@ -1,95 +0,0 @@ -from opensquirrel.Common import ExprType, exprTypeToArgType -from opensquirrel.Gates import querySignature -from parsing.GeneratedParsingCode import CQasm3Visitor - - -class TypeChecker(CQasm3Visitor.CQasm3Visitor): - def __init__(self, gates): - self.gates = gates - self.nQubits = 0 - - def visitProg(self, ctx): - self.visit(ctx.qubitRegisterDeclaration()) - for gate in ctx.gateApplication(): - self.visit(gate) - - def visitQubitRegisterDeclaration(self, ctx): - self.nQubits = int(str(ctx.INT())) - self.registerName = str(ctx.ID()) - - def visitGateApplication(self, ctx): - # Check that the type of operands match the gate declaration - gateName = str(ctx.ID()) - if gateName not in self.gates: - raise Exception(f"Unknown gate `{gateName}`") - - expectedSignature = querySignature(self.gates, gateName) - - if len(ctx.expr()) != len(expectedSignature): - raise Exception( - f"Gate `{gateName}` takes {len(expectedSignature)} arguments," f" but {len(ctx.expr())} were given!" - ) - - i = 0 - qubitArrays = None - for arg in ctx.expr(): - argumentData = self.visit(arg) - argumentType = argumentData[0] - if argumentType == ExprType.QUBITREFS: - if isinstance(qubitArrays, int) and qubitArrays != argumentData[1]: - raise Exception("Invalid gate call with qubit arguments of different sizes") - - qubitArrays = argumentData[1] - - if expectedSignature[i] != exprTypeToArgType(argumentType): - raise Exception( - f"Argument #{i} passed to gate `{gateName}` is of type" - f" {exprTypeToArgType(argumentType)} but should be {expectedSignature[i]}" - ) - i += 1 - - def visitQubit(self, ctx): - if str(ctx.ID()) != self.registerName: - raise Exception(f"Qubit register {str(ctx.ID())} not declared") - - qubitIndex = int(str(ctx.INT())) - if qubitIndex >= self.nQubits: - raise Exception(f"Qubit index {qubitIndex} out of range") - - return (ExprType.QUBITREFS, 1) - - def visitQubits(self, ctx): - if str(ctx.ID()) != self.registerName: - raise Exception(f"Qubit register {str(ctx.ID())} not declared") - - qubitIndices = list(map(int, map(str, ctx.INT()))) - if any(i >= self.nQubits for i in qubitIndices): - raise Exception(f"Qubit index {next(i for i in qubitIndices if i >= self.nQubits)} out of range") - - return ExprType.QUBITREFS, len(qubitIndices) - - def visitQubitRange(self, ctx): - if str(ctx.ID()) != self.registerName: - raise Exception(f"Qubit register {str(ctx.ID())} not declared") - - qubitIndex1 = int(str(ctx.INT(0))) - qubitIndex2 = int(str(ctx.INT(1))) - if max(qubitIndex1, qubitIndex2) >= self.nQubits: - raise Exception(f"Qubit indices {qubitIndex1}:{qubitIndex2} out of range") - - if qubitIndex1 > qubitIndex2: - raise Exception(f"Qubit indices {qubitIndex1}:{qubitIndex2} malformed") - - return (ExprType.QUBITREFS, qubitIndex2 - qubitIndex1 + 1) - - def visitIntLiteral(self, ctx): - return (ExprType.INT,) - - def visitNegatedIntLiteral(self, ctx): - return (ExprType.INT,) - - def visitFloatLiteral(self, ctx): - return (ExprType.FLOAT,) - - def visitNegatedFloatLiteral(self, ctx): - return (ExprType.FLOAT,) diff --git a/opensquirrel/Writer.py b/opensquirrel/Writer.py deleted file mode 100644 index 6986ae53..00000000 --- a/opensquirrel/Writer.py +++ /dev/null @@ -1,41 +0,0 @@ -from opensquirrel.Common import ArgType -from opensquirrel.Gates import querySignature - - -class Writer: - NUMBER_OF_SIGNIFICANT_DIGITS = 8 - - def __init__(self, gates): - self.gates = gates - - @classmethod - def _format_arg(cls, squirrelAST, arg, t: ArgType): - if t == ArgType.QUBIT: - return f"{squirrelAST.qubitRegisterName}[{arg}]" - if t == ArgType.INT: - return f"{int(arg)}" - if t == ArgType.FLOAT: - return f"{float(arg):.{Writer.NUMBER_OF_SIGNIFICANT_DIGITS}}" - - assert False, "Unknown argument type" - - def process(self, squirrelAST): - output = "" - output += f"""version 3.0\n\nqubit[{squirrelAST.nQubits}] {squirrelAST.qubitRegisterName}\n\n""" - - for operation in squirrelAST.operations: - if isinstance(operation, str): - comment = operation - assert "*/" not in comment, "Comment contains illegal characters" - - output += f"\n/* {comment} */\n\n" - continue - - gateName, gateArgs = operation - signature = querySignature(self.gates, gateName) - - args = [Writer._format_arg(squirrelAST, arg, t) for arg, t in zip(gateArgs, signature)] - - output += f"{gateName} {', '.join(args)}\n" - - return output diff --git a/opensquirrel/__init__.py b/opensquirrel/__init__.py index acd79122..6f1e5b84 100644 --- a/opensquirrel/__init__.py +++ b/opensquirrel/__init__.py @@ -1,3 +1,5 @@ -from opensquirrel.Circuit import Circuit -from opensquirrel.CircuitBuilder import CircuitBuilder -from opensquirrel.DefaultGates import DefaultGates +from opensquirrel.circuit import Circuit +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.default_gates import default_gate_aliases + +__all__ = ["Circuit", "CircuitBuilder", "default_gate_aliases"] diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py new file mode 100644 index 00000000..1452dedb --- /dev/null +++ b/opensquirrel/circuit.py @@ -0,0 +1,143 @@ +from __future__ import annotations + +from collections.abc import Callable, Mapping +from typing import TYPE_CHECKING, Any, Literal + +from opensquirrel.default_gates import default_gate_aliases, default_gate_set +from opensquirrel.default_measures import default_measure_set +from opensquirrel.exporter.export_format import ExportFormat + +if TYPE_CHECKING: + from opensquirrel.decomposer import Decomposer + from opensquirrel.ir import IR, Gate, Measure + from opensquirrel.mapper import Mapper + from opensquirrel.register_manager import RegisterManager + + +class Circuit: + """The Circuit class is the only interface to access OpenSquirrel's features. + + Examples: + >>> c = Circuit.from_string("version 3.0; qubit[3] q; h q[0]") + >>> c + version 3.0 + + qubit[3] q + + h q[0] + + >>> c.decomposer(decomposer=mckay_decomposer.McKayDecomposer) + >>> c + version 3.0 + + qubit[3] q + + x90 q[0] + rz q[0], 1.5707963 + x90 q[0] + + """ + + def __init__(self, register_manager: RegisterManager, ir: IR) -> None: + """Create a circuit object from a register manager and an IR.""" + self.register_manager = register_manager + self.ir = ir + + def __repr__(self) -> str: + """Write the circuit to a cQASM 3 string.""" + from opensquirrel.writer import writer + + return writer.circuit_to_string(self) + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, Circuit): + return False + return self.register_manager == other.register_manager and self.ir == other.ir + + @classmethod + def from_string( + cls, + cqasm3_string: str, + gate_set: list[Callable[..., Gate]] = default_gate_set, + gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, + measure_set: list[Callable[..., Measure]] = default_measure_set, + ) -> Circuit: + """Create a circuit object from a cQasm3 string. All the gates in the circuit need to be defined in + the `gates` argument. + + * type-checking is performed, eliminating qubit indices errors and incoherences + * checks that used gates are supported and mentioned in `gates` with appropriate signatures + * does not support map or variables, and other things... + * for example of `gates` dictionary, please look at TestGates.py + + Args: + cqasm3_string: a cQASM 3 string + gate_set: an array of gate semantic functions. See default_gates for examples + gate_aliases: a dictionary of extra gate aliases, mapping strings to functions in the gate set + measure_set: an array of measurement semantic functions. See default_measures for examples + """ + from opensquirrel.parser.libqasm.parser import Parser + + parser = Parser( + gate_set=gate_set, + gate_aliases=gate_aliases, + measure_set=measure_set, + ) + return parser.circuit_from_string(cqasm3_string) + + @property + def qubit_register_size(self) -> int: + return self.register_manager.get_qubit_register_size() + + @property + def bit_register_size(self) -> int: + return self.register_manager.get_bit_register_size() + + @property + def qubit_register_name(self) -> str: + return self.register_manager.get_qubit_register_name() + + @property + def bit_register_name(self) -> str: + return self.register_manager.get_bit_register_name() + + def merge_single_qubit_gates(self) -> None: + """Merge all consecutive 1-qubit gates in the circuit. + Gates obtained from merging other gates become anonymous gates. + """ + from opensquirrel.merger import general_merger + + general_merger.merge_single_qubit_gates(self) + + def decompose(self, decomposer: Decomposer) -> None: + """Generic decomposition pass. + It applies the given decomposer function to every gate in the circuit. + """ + from opensquirrel.decomposer import general_decomposer + + general_decomposer.decompose(self.ir, decomposer) + + def map(self, mapper: Mapper) -> None: + """Generic qubit mapper pass. + Map the (virtual) qubits of the circuit to the physical qubits of the target hardware. + """ + from opensquirrel.mapper.qubit_remapper import remap_ir + + remap_ir(self, mapper.get_mapping()) + + def replace(self, gate_generator: Callable[..., Gate], f: Callable[..., list[Gate]]) -> None: + """Manually replace occurrences of a given gate with a list of gates. + `f` is a callable that takes the arguments of the gate that is to be replaced and + returns the decomposition as a list of gates. + """ + from opensquirrel.decomposer import general_decomposer + + general_decomposer.replace(self.ir, gate_generator, f) + + def export(self, fmt: Literal[ExportFormat.QUANTIFY_SCHEDULER] | None = None) -> Any: + if fmt == ExportFormat.QUANTIFY_SCHEDULER: + from opensquirrel.exporter import quantify_scheduler_exporter + + return quantify_scheduler_exporter.export(self) + msg = "unknown exporter format" + raise ValueError(msg) diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py new file mode 100644 index 00000000..ceb043b7 --- /dev/null +++ b/opensquirrel/circuit_builder.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +import inspect +from collections.abc import Callable, Mapping +from copy import deepcopy +from functools import partial +from typing import Any + +from typing_extensions import Self + +from opensquirrel.circuit import Circuit +from opensquirrel.default_gates import default_gate_aliases, default_gate_set +from opensquirrel.default_measures import default_measure_set +from opensquirrel.default_resets import default_reset_set +from opensquirrel.instruction_library import GateLibrary, MeasureLibrary, ResetLibrary +from opensquirrel.ir import ANNOTATIONS_TO_TYPE_MAP, IR, Comment, Gate, Measure, Qubit, QubitLike, Reset +from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager + + +class CircuitBuilder(GateLibrary, MeasureLibrary, ResetLibrary): + """ + A class using the builder pattern to make construction of circuits easy from Python. + Adds corresponding instruction when a method is called. Checks that instructions are known and called with the right + arguments. + Mainly here to allow for Qiskit-style circuit construction: + + Args: + qubit_register_size (int): Size of the qubit register + bit_register_size (int): Size of the bit register + gate_set (list): Supported gates + gate_aliases (dict): Supported gate aliases + measure_set (list): Supported measure instructions + + Example: + >>> CircuitBuilder(qubit_register_size=3, bit_register_size=3).\ + H(0).CNOT(0, 1).CNOT(0, 2).\ + to_circuit() + version 3.0 + + qubit[3] q + + h q[0] + cnot q[0], q[1] + cnot q[0], q[2] + + + """ + + def __init__( + self, + qubit_register_size: int, + bit_register_size: int = 0, + gate_set: list[Callable[..., Gate]] = default_gate_set, + gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, + measure_set: list[Callable[..., Measure]] = default_measure_set, + reset_set: list[Callable[..., Reset]] = default_reset_set, + ) -> None: + GateLibrary.__init__(self, gate_set, gate_aliases) + MeasureLibrary.__init__(self, measure_set) + ResetLibrary.__init__(self, reset_set) + self.register_manager = RegisterManager(QubitRegister(qubit_register_size), BitRegister(bit_register_size)) + self.ir = IR() + + def __getattr__(self, attr: Any) -> Callable[..., Self]: + if attr == "comment": + return self._add_comment + + return partial(self._add_instruction, attr) + + def _add_comment(self, comment_string: str) -> Self: + self.ir.add_comment(Comment(comment_string)) + return self + + def _add_instruction(self, attr: str, *args: Any) -> Self: + if any(attr == measure.__name__ for measure in self.measure_set): + generator_f_measure = MeasureLibrary.get_measure_f(self, attr) + self._check_generator_f_args(generator_f_measure, attr, args) + self.ir.add_measure(generator_f_measure(*args)) + elif any(attr == reset.__name__ for reset in self.reset_set): + generator_f_reset = ResetLibrary.get_reset_f(self, attr) + self._check_generator_f_args(generator_f_reset, attr, args) + self.ir.add_reset(generator_f_reset(*args)) + else: + generator_f_gate = GateLibrary.get_gate_f(self, attr) + self._check_generator_f_args(generator_f_gate, attr, args) + self.ir.add_gate(generator_f_gate(*args)) + return self + + def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: + """Throw error if qubit index is outside the qubit register range. + + Args: + qubit: qubit to check. + """ + index = Qubit(qubit).index + if index >= self.register_manager.get_qubit_register_size(): + msg = "qubit index is out of bounds" + raise IndexError(msg) + + def _check_bit_out_of_bounds_access(self, index: int) -> None: + """Throw error if bit index is outside the qubit register range. + + Args: + index: bit index + """ + if index >= self.register_manager.get_bit_register_size(): + msg = "bit index is out of bounds" + raise IndexError(msg) + + def _check_generator_f_args( + self, + generator_f: Callable[..., Gate | Measure | Reset], + attr: str, + args: tuple[Any, ...], + ) -> None: + """General instruction validation function. The function checks if each instruction has the proper arguments + and if the qubit and bits are within the register range. + + Args: + generator_f: Instruction function + attr: Type of instruction + args: Arguments parsed into the function + + """ + for i, par in enumerate(inspect.signature(generator_f).parameters.values()): + try: + expected_type = ( + ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation + ) + except KeyError as e: + msg = "unknown annotation type" + raise TypeError(msg) from e + + # fix for python39 + try: + is_incorrect_type = not isinstance(args[i], expected_type) + except TypeError: + # expected type is probably a Union, which works differently in python39 + is_incorrect_type = not isinstance(args[i], expected_type.__args__) + + if is_incorrect_type: + msg = f"wrong argument type for instruction `{attr}`, got {type(args[i])} but expected {expected_type}" + raise TypeError(msg) + if expected_type in (QubitLike, Qubit): + self._check_qubit_out_of_bounds_access(args[i]) + elif args[i].__class__.__name__ == "Bit": + self._check_bit_out_of_bounds_access(args[i].index) + + def to_circuit(self) -> Circuit: + return Circuit(deepcopy(self.register_manager), deepcopy(self.ir)) diff --git a/opensquirrel/circuit_matrix_calculator.py b/opensquirrel/circuit_matrix_calculator.py new file mode 100644 index 00000000..77937b5e --- /dev/null +++ b/opensquirrel/circuit_matrix_calculator.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +import numpy as np +from numpy.typing import NDArray + +from opensquirrel.ir import Comment, Gate, IRVisitor +from opensquirrel.utils.matrix_expander import get_matrix + +if TYPE_CHECKING: + from opensquirrel.circuit import Circuit + + +class _CircuitMatrixCalculator(IRVisitor): + def __init__(self, qubit_register_size: int) -> None: + self.qubit_register_size = qubit_register_size + self.matrix = np.eye(1 << self.qubit_register_size, dtype=np.complex128) + + def visit_gate(self, gate: Gate) -> None: + big_matrix = get_matrix(gate, qubit_register_size=self.qubit_register_size) + self.matrix = big_matrix @ self.matrix + + def visit_comment(self, comment: Comment) -> None: + pass + + +def get_circuit_matrix(circuit: Circuit) -> NDArray[np.complex128]: + """Compute the (large) unitary matrix corresponding to the circuit. + + This matrix has 4**n elements, where n is the number of qubits. Result is stored as a numpy array of complex + numbers. + + Returns: + Matrix representation of the circuit. + """ + impl = _CircuitMatrixCalculator(circuit.qubit_register_size) + + circuit.ir.accept(impl) + + return impl.matrix diff --git a/opensquirrel/common.py b/opensquirrel/common.py new file mode 100644 index 00000000..e8544fc8 --- /dev/null +++ b/opensquirrel/common.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +import math + +import numpy as np +from numpy.typing import NDArray + +ATOL = 0.0000001 + + +def normalize_angle(x: float) -> float: + t = x - 2 * math.pi * (x // (2 * math.pi) + 1) + if t < -math.pi + ATOL: + t += 2 * math.pi + elif t > math.pi: + t -= 2 * math.pi + return t + + +def are_matrices_equivalent_up_to_global_phase( + matrix_a: NDArray[np.complex128], matrix_b: NDArray[np.complex128] +) -> bool: + """Checks whether two matrices are equivalent up to a global phase. + + Args: + matrix_a: first matrix. + matrix_b: second matrix. + + Returns: + Whether two matrices are equivalent up to a global phase. + """ + first_non_zero = next( + (i, j) for i in range(matrix_a.shape[0]) for j in range(matrix_a.shape[1]) if abs(matrix_a[i, j]) > ATOL + ) + + if abs(matrix_b[first_non_zero]) < ATOL: + return False + + phase_difference = matrix_a[first_non_zero] / matrix_b[first_non_zero] + + return np.allclose(matrix_a, phase_difference * matrix_b) diff --git a/opensquirrel/decomposer/__init__.py b/opensquirrel/decomposer/__init__.py new file mode 100644 index 00000000..de0651fa --- /dev/null +++ b/opensquirrel/decomposer/__init__.py @@ -0,0 +1,23 @@ +from opensquirrel.decomposer.aba_decomposer import ( + XYXDecomposer, + XZXDecomposer, + YXYDecomposer, + YZYDecomposer, + ZXZDecomposer, + ZYZDecomposer, +) +from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.decomposer.general_decomposer import Decomposer +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer + +__all__ = [ + "McKayDecomposer", + "XYXDecomposer", + "XZXDecomposer", + "YXYDecomposer", + "YZYDecomposer", + "ZXZDecomposer", + "ZYZDecomposer", + "CNOTDecomposer", + "Decomposer", +] diff --git a/opensquirrel/decomposer/aba_decomposer.py b/opensquirrel/decomposer/aba_decomposer.py new file mode 100644 index 00000000..5c48cc34 --- /dev/null +++ b/opensquirrel/decomposer/aba_decomposer.py @@ -0,0 +1,199 @@ +"""Module containing classes that inherit from the ABADecomposer class to decompose a circuit into one of the Pauli +ABA decompositions.""" + +from __future__ import annotations + +import math +from abc import ABC, abstractmethod +from collections.abc import Callable +from typing import ClassVar + +from opensquirrel.common import ATOL +from opensquirrel.decomposer.general_decomposer import Decomposer +from opensquirrel.default_gates import Rx, Ry, Rz +from opensquirrel.ir import Axis, AxisLike, BlochSphereRotation, Float, Gate +from opensquirrel.utils.identity_filter import filter_out_identities + + +class ABADecomposer(Decomposer, ABC): + @property + @abstractmethod + def ra(self) -> Callable[..., BlochSphereRotation]: ... + + @property + @abstractmethod + def rb(self) -> Callable[..., BlochSphereRotation]: ... + + _gate_list: ClassVar[list[Callable[..., BlochSphereRotation]]] = [Rx, Ry, Rz] + + def __init__(self) -> None: + self.index_a = self._gate_list.index(self.ra) + self.index_b = self._gate_list.index(self.rb) + + def _find_unused_index(self) -> int: + """Finds the index of the axis object that is not used in the decomposition. + For example, if one selects the ZYZ decomposition, the integer returned will be 0 (since it is X). + Returns: + Index of the axis object that is not used in the decomposition. + """ + return ({0, 1, 2} - {self.index_a, self.index_b}).pop() + + def get_decomposition_angles(self, alpha: float, axis: AxisLike) -> tuple[float, float, float]: + """Gives the angles used in the A-B-A decomposition of the Bloch sphere rotation + characterized by a rotation around `axis` of angle `alpha`. + + Parameters: + alpha: angle of the Bloch sphere rotation + axis: _normalized_ axis of the Bloch sphere rotation + + Returns: + A triple (theta1, theta2, theta3) corresponding to the decomposition of the + arbitrary Bloch sphere rotation into U = Ra(theta3) Rb(theta2) Ra(theta1) + + """ + axis = Axis(axis) + a_axis_value = axis[self.index_a] + b_axis_value = axis[self.index_b] + c_axis_value = axis[self._find_unused_index()] + + if not (-math.pi + ATOL < alpha <= math.pi + ATOL): + msg = "angle needs to be normalized" + raise ValueError(msg) + + if abs(alpha - math.pi) < ATOL: + # alpha == pi, math.tan(alpha / 2) is not defined. + if abs(a_axis_value) < ATOL: + theta2 = math.pi + p = 0.0 + m = 2 * math.acos(b_axis_value) + else: + p = math.pi + theta2 = 2 * math.acos(a_axis_value) + if abs(a_axis_value - 1) < ATOL or abs(a_axis_value + 1) < ATOL: + m = p # This can be anything, but setting m = p means theta3 == 0, which is better for gate count. + else: + m = 2 * math.acos( + round(b_axis_value / math.sqrt(1 - a_axis_value**2), abs(math.floor(math.log10(ATOL)))), + ) + + else: + p = 2 * math.atan2(a_axis_value * math.sin(alpha / 2), math.cos(alpha / 2)) + acos_argument = math.cos(alpha / 2) * math.sqrt(1 + (a_axis_value * math.tan(alpha / 2)) ** 2) + + # This fixes float approximations like 1.0000000000002, which acos does not like. + acos_argument = max(min(acos_argument, 1.0), -1.0) + + theta2 = 2 * math.acos(acos_argument) + theta2 = math.copysign(theta2, alpha) + + if abs(math.sin(theta2 / 2)) < ATOL: + m = p # This can be anything, but setting m = p means theta3 == 0, which is better for gate count. + else: + acos_argument = float(b_axis_value) * math.sin(alpha / 2) / math.sin(theta2 / 2) + + # This fixes float approximations like 1.0000000000002, which acos does not like. + acos_argument = max(min(acos_argument, 1.0), -1.0) + m = 2 * math.acos(acos_argument) + if math.pi - abs(m) > ATOL: + m_sign = 2 * math.atan2(c_axis_value, a_axis_value) + m = math.copysign(m, m_sign) + + is_sin_m_negative = self.index_a - self.index_b in (-1, 2) + if is_sin_m_negative: + m = m * -1 + + theta1 = (p + m) / 2 + theta3 = p - theta1 + + return theta1, theta2, theta3 + + def decompose(self, g: Gate) -> list[Gate]: + """General A-B-A decomposition function for a single gate. + + Args: + g: gate to decompose. + + Returns: + Three gates, following the A-B-A convention, corresponding to the decomposition of the input gate. + """ + if not isinstance(g, BlochSphereRotation): + # We only decompose Bloch sphere rotations. + return [g] + + theta1, theta2, theta3 = self.get_decomposition_angles(g.angle, g.axis) + a1 = self.ra(g.qubit, Float(theta1)) + b = self.rb(g.qubit, Float(theta2)) + a2 = self.ra(g.qubit, Float(theta3)) + return filter_out_identities([a1, b, a2]) + + +class XYXDecomposer(ABADecomposer): + """Class responsible for the X-Y-X decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rx + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Ry + + +class XZXDecomposer(ABADecomposer): + """Class responsible for the X-Z-X decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rx + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rz + + +class YXYDecomposer(ABADecomposer): + """Class responsible for the Y-X-Y decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Ry + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rx + + +class YZYDecomposer(ABADecomposer): + """Class responsible for the Y-Z-Y decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Ry + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rz + + +class ZXZDecomposer(ABADecomposer): + """Class responsible for the Z-X-Z decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rz + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rx + + +class ZYZDecomposer(ABADecomposer): + """Class responsible for the Z-Y-Z decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rz + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Ry diff --git a/opensquirrel/decomposer/cnot_decomposer.py b/opensquirrel/decomposer/cnot_decomposer.py new file mode 100644 index 00000000..b1eb6acf --- /dev/null +++ b/opensquirrel/decomposer/cnot_decomposer.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +import math + +from opensquirrel.common import ATOL +from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer +from opensquirrel.decomposer.general_decomposer import Decomposer +from opensquirrel.default_gates import CNOT, Ry, Rz, X +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, Gate +from opensquirrel.merger import general_merger +from opensquirrel.utils.identity_filter import filter_out_identities + + +class CNOTDecomposer(Decomposer): + """ + Decomposes 2-qubit controlled unitary gates to CNOT + Rz/Ry. + Applying single-qubit gate fusion after this pass might be beneficial. + + Source of the math: https://threeplusone.com/pubs/on_gates.pdf, chapter 7.5 "ABC decomposition" + """ + + def decompose(self, g: Gate) -> list[Gate]: + if not isinstance(g, ControlledGate): + # Do nothing: + # - BlochSphereRotation's are only single-qubit, + # - decomposing MatrixGate is currently not supported. + return [g] + + if not isinstance(g.target_gate, BlochSphereRotation): + # Do nothing. + # ControlledGate's with 2+ control qubits are ignored. + return [g] + + target_qubit = g.target_gate.qubit + + # Perform ZYZ decomposition on the target gate. + # This gives us an ABC decomposition (U = AXBXC, ABC = I) of the target gate. + # See https://threeplusone.com/pubs/on_gates.pdf + + # Try special case first, see https://arxiv.org/pdf/quant-ph/9503016.pdf lemma 5.5 + controlled_rotation_times_x = general_merger.compose_bloch_sphere_rotations(X(target_qubit), g.target_gate) + theta0_with_x, theta1_with_x, theta2_with_x = ZYZDecomposer().get_decomposition_angles( + controlled_rotation_times_x.angle, + controlled_rotation_times_x.axis, + ) + if abs((theta0_with_x - theta2_with_x) % (2 * math.pi)) < ATOL: + # The decomposition can use a single CNOT according to the lemma. + A = [Ry(target_qubit, Float(-theta1_with_x / 2)), Rz(target_qubit, Float(-theta2_with_x))] + B = [Rz(target_qubit, Float(theta2_with_x)), Ry(target_qubit, Float(theta1_with_x / 2))] + + return filter_out_identities( + [ + *B, + CNOT(g.control_qubit, target_qubit), + *A, + Rz(g.control_qubit, Float(g.target_gate.phase - math.pi / 2)), + ], + ) + + theta0, theta1, theta2 = ZYZDecomposer().get_decomposition_angles(g.target_gate.angle, g.target_gate.axis) + + A = [Ry(target_qubit, Float(theta1 / 2)), Rz(target_qubit, Float(theta2))] + B = [Rz(target_qubit, Float(-(theta0 + theta2) / 2)), Ry(target_qubit, Float(-theta1 / 2))] + C = [Rz(target_qubit, Float((theta0 - theta2) / 2))] + + return filter_out_identities( + [ + *C, + CNOT(g.control_qubit, target_qubit), + *B, + CNOT(g.control_qubit, target_qubit), + *A, + Rz(g.control_qubit, Float(g.target_gate.phase)), + ], + ) diff --git a/opensquirrel/decomposer/general_decomposer.py b/opensquirrel/decomposer/general_decomposer.py new file mode 100644 index 00000000..dc24cf50 --- /dev/null +++ b/opensquirrel/decomposer/general_decomposer.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from collections.abc import Callable, Iterable + +from opensquirrel.circuit_matrix_calculator import get_circuit_matrix +from opensquirrel.common import are_matrices_equivalent_up_to_global_phase +from opensquirrel.ir import IR, Gate +from opensquirrel.reindexer import get_reindexed_circuit + + +class Decomposer(ABC): + @abstractmethod + def decompose(self, gate: Gate) -> list[Gate]: + raise NotImplementedError() + + +def check_gate_replacement(gate: Gate, replacement_gates: Iterable[Gate]) -> None: + gate_qubit_indices = [q.index for q in gate.get_qubit_operands()] + replacement_gates_qubit_indices = set() + for g in replacement_gates: + replacement_gates_qubit_indices.update([q.index for q in g.get_qubit_operands()]) + + if set(gate_qubit_indices) != replacement_gates_qubit_indices: + msg = f"replacement for gate {gate.name} does not seem to operate on the right qubits" + raise ValueError(msg) + + replaced_matrix = get_circuit_matrix(get_reindexed_circuit([gate], gate_qubit_indices)) + replacement_matrix = get_circuit_matrix(get_reindexed_circuit(replacement_gates, gate_qubit_indices)) + + if not are_matrices_equivalent_up_to_global_phase(replaced_matrix, replacement_matrix): + msg = f"replacement for gate {gate.name} does not preserve the quantum state" + raise ValueError(msg) + + +def decompose(ir: IR, decomposer: Decomposer) -> None: + """Applies `decomposer` to every gate in the circuit, replacing each gate by the output of `decomposer`. + When `decomposer` decides to not decomposer a gate, it needs to return a list with the intact gate as single + element. + """ + statement_index = 0 + while statement_index < len(ir.statements): + statement = ir.statements[statement_index] + + if not isinstance(statement, Gate): + statement_index += 1 + continue + + gate = statement + replacement_gates: list[Gate] = decomposer.decompose(statement) + check_gate_replacement(gate, replacement_gates) + + ir.statements[statement_index : statement_index + 1] = replacement_gates + statement_index += len(replacement_gates) + + +class _GenericReplacer(Decomposer): + def __init__(self, gate_generator: Callable[..., Gate], replacement_function: Callable[..., list[Gate]]) -> None: + self.gate_generator = gate_generator + self.replacement_function = replacement_function + + def decompose(self, g: Gate) -> list[Gate]: + if g.is_anonymous or g.generator != self.gate_generator: + return [g] + arguments = () if g.arguments is None else g.arguments + return self.replacement_function(*arguments) + + +def replace(ir: IR, gate_generator: Callable[..., Gate], f: Callable[..., list[Gate]]) -> None: + """Does the same as decomposer, but only applies to a given gate.""" + generic_replacer = _GenericReplacer(gate_generator, f) + + decompose(ir, generic_replacer) diff --git a/opensquirrel/decomposer/mckay_decomposer.py b/opensquirrel/decomposer/mckay_decomposer.py new file mode 100644 index 00000000..09b3cedd --- /dev/null +++ b/opensquirrel/decomposer/mckay_decomposer.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +from math import atan2, cos, pi, sin, sqrt + +from opensquirrel.common import ATOL, normalize_angle +from opensquirrel.decomposer.aba_decomposer import ZXZDecomposer +from opensquirrel.decomposer.general_decomposer import Decomposer +from opensquirrel.default_gates import X90, Rz +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +class McKayDecomposer(Decomposer): + def decompose(self, g: Gate) -> list[Gate]: + """Return the McKay decomposition of a 1-qubit gate as a list of gates. + gate ----> Rz.Rx(pi/2).Rz.Rx(pi/2).Rz + + The global phase is deemed _irrelevant_, therefore a simulator backend might produce different output. + The results should be equivalent modulo global phase. + Notice that, if the gate is Rz or X90, it will not be decomposed further, since they are natively used + in the McKay decomposition. + + Relevant literature: https://arxiv.org/abs/1612.00858 + """ + if not isinstance(g, BlochSphereRotation) or g.name == "Rz" or g.name == "X90": + return [g] + + if abs(g.angle) < ATOL: + return [] + + if g.axis[0] == 0 and g.axis[1] == 0: + rz_angle = float(g.angle * g.axis[2]) + return [Rz(g.qubit, Float(rz_angle))] + + zxz_decomposition = ZXZDecomposer().decompose(g) + zxz_angle = 0.0 + if len(zxz_decomposition) >= 2 and isinstance(zxz_decomposition[1], BlochSphereRotation): + zxz_angle = zxz_decomposition[1].angle + + if abs(zxz_angle - pi / 2) < ATOL: + zxz_decomposition[1] = X90(g.qubit) + return zxz_decomposition + + # McKay decomposition + za_mod = sqrt(cos(g.angle / 2) ** 2 + (g.axis[2] * sin(g.angle / 2)) ** 2) + zb_mod = abs(sin(g.angle / 2)) * sqrt(g.axis[0] ** 2 + g.axis[1] ** 2) + + theta = pi - 2 * atan2(zb_mod, za_mod) + + alpha = atan2(-sin(g.angle / 2) * g.axis[2], cos(g.angle / 2)) + beta = atan2(-sin(g.angle / 2) * g.axis[0], -sin(g.angle / 2) * g.axis[1]) + + lam = beta - alpha + phi = -beta - alpha - pi + + lam = normalize_angle(lam) + phi = normalize_angle(phi) + theta = normalize_angle(theta) + + decomposed_g: list[Gate] = [] + + if abs(theta) < ATOL and lam == phi: + decomposed_g.append(X90(g.qubit)) + decomposed_g.append(X90(g.qubit)) + return decomposed_g + + if abs(lam) > ATOL: + decomposed_g.append(Rz(g.qubit, Float(lam))) + + decomposed_g.append(X90(g.qubit)) + + if abs(theta) > ATOL: + decomposed_g.append(Rz(g.qubit, Float(theta))) + + decomposed_g.append(X90(g.qubit)) + + if abs(phi) > ATOL: + decomposed_g.append(Rz(g.qubit, Float(phi))) + + return decomposed_g diff --git a/opensquirrel/default_gates.py b/opensquirrel/default_gates.py new file mode 100644 index 00000000..c6640e5e --- /dev/null +++ b/opensquirrel/default_gates.py @@ -0,0 +1,191 @@ +from __future__ import annotations + +import math +from collections.abc import Callable +from typing import SupportsInt + +import numpy as np + +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, Gate, Int, MatrixGate, QubitLike, named_gate + + +@named_gate +def I(q: QubitLike) -> BlochSphereRotation: # noqa: E743 + return BlochSphereRotation.identity(q) + + +@named_gate +def H(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def X(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def X90(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi / 2, phase=0) + + +@named_gate +def mX90(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0) + + +@named_gate +def Y(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def Y90(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=math.pi / 2, phase=0) + + +@named_gate +def mY90(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=-math.pi / 2, phase=0) + + +@named_gate +def Z(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def S(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi / 2, phase=0) + + +@named_gate +def Sdag(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=-math.pi / 2, phase=0) + + +@named_gate +def T(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi / 4, phase=0) + + +@named_gate +def Tdag(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=-math.pi / 4, phase=0) + + +@named_gate +def Rx(q: QubitLike, theta: Float) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=theta.value, phase=0) + + +@named_gate +def Ry(q: QubitLike, theta: Float) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=theta.value, phase=0) + + +@named_gate +def Rz(q: QubitLike, theta: Float) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=theta.value, phase=0) + + +@named_gate +def CNOT(control: QubitLike, target: QubitLike) -> ControlledGate: + return ControlledGate(control, X(target)) + + +@named_gate +def CZ(control: QubitLike, target: QubitLike) -> ControlledGate: + return ControlledGate(control, Z(target)) + + +@named_gate +def CR(control: QubitLike, target: QubitLike, theta: Float) -> ControlledGate: + return ControlledGate( + control, + BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta.value, phase=theta.value / 2), + ) + + +@named_gate +def CRk(control: QubitLike, target: QubitLike, k: SupportsInt) -> ControlledGate: + theta = 2 * math.pi / (2 ** Int(k).value) + return ControlledGate(control, BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=theta / 2)) + + +@named_gate +def SWAP(q1: QubitLike, q2: QubitLike) -> MatrixGate: + return MatrixGate( + np.array( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + ), + [q1, q2], + ) + + +@named_gate +def sqrtSWAP(q1: QubitLike, q2: QubitLike) -> MatrixGate: + return MatrixGate( + np.array( + [ + [1, 0, 0, 0], + [0, (1 + 1j) / 2, (1 - 1j) / 2, 0], + [0, (1 - 1j) / 2, (1 + 1j) / 2, 0], + [0, 0, 0, 1], + ], + ), + [q1, q2], + ) + + +@named_gate +def CCZ(control1: QubitLike, control2: QubitLike, target: QubitLike) -> ControlledGate: + return ControlledGate(control1, CZ(control2, target)) + + +default_bloch_sphere_rotations_without_params: list[Callable[[QubitLike], BlochSphereRotation]] +default_bloch_sphere_rotations_without_params = [ + I, + H, + X, + X90, + mX90, + Y, + Y90, + mY90, + Z, + S, + Sdag, + T, + Tdag, +] +default_bloch_sphere_rotations: list[ + Callable[[QubitLike], BlochSphereRotation] | Callable[[QubitLike, Float], BlochSphereRotation] +] +default_bloch_sphere_rotations = [ + *default_bloch_sphere_rotations_without_params, + Rx, + Ry, + Rz, +] +default_gate_set: list[Callable[..., Gate]] +default_gate_set = [ + *default_bloch_sphere_rotations, + CNOT, + CZ, + CR, + CRk, + SWAP, + sqrtSWAP, + CCZ, +] + +default_gate_aliases = { + "Hadamard": H, + "Identity": I, +} diff --git a/opensquirrel/default_measures.py b/opensquirrel/default_measures.py new file mode 100644 index 00000000..032851d1 --- /dev/null +++ b/opensquirrel/default_measures.py @@ -0,0 +1,14 @@ +from opensquirrel.ir import Bit, Measure, QubitLike, named_measure + + +@named_measure +def measure(q: QubitLike, b: Bit) -> Measure: + return Measure(qubit=q, bit=b, axis=(0, 0, 1)) + + +@named_measure +def measure_z(q: QubitLike, b: Bit) -> Measure: + return Measure(qubit=q, bit=b, axis=(0, 0, 1)) + + +default_measure_set = [measure_z, measure] diff --git a/opensquirrel/default_resets.py b/opensquirrel/default_resets.py new file mode 100644 index 00000000..e5516c9a --- /dev/null +++ b/opensquirrel/default_resets.py @@ -0,0 +1,9 @@ +from opensquirrel.ir import QubitLike, Reset, named_reset + + +@named_reset +def reset(q: QubitLike) -> Reset: + return Reset(qubit=q) + + +default_reset_set = [reset] diff --git a/opensquirrel/exceptions.py b/opensquirrel/exceptions.py new file mode 100644 index 00000000..9c876125 --- /dev/null +++ b/opensquirrel/exceptions.py @@ -0,0 +1,19 @@ +"""This module contains all custom exception used by ``OpenSquirrel``.""" + +from typing import Any + + +class UnsupportedGateError(Exception): + """Should be raised when a gate is not supported.""" + + def __init__(self, gate: Any, *args: Any) -> None: + """Init of the ``UnsupportedGateError``. + + Args: + gate: Gate that is not supported. + """ + super().__init__(f"{gate} not supported", *args) + + +class ExporterError(Exception): + """Should be raised when a circuit cannot be exported to the desired output format.""" diff --git a/parsing/GeneratedParsingCode/__init__.py b/opensquirrel/exporter/__init__.py similarity index 100% rename from parsing/GeneratedParsingCode/__init__.py rename to opensquirrel/exporter/__init__.py diff --git a/opensquirrel/exporter/export_format.py b/opensquirrel/exporter/export_format.py new file mode 100644 index 00000000..6adbb939 --- /dev/null +++ b/opensquirrel/exporter/export_format.py @@ -0,0 +1,5 @@ +from enum import Enum + + +class ExportFormat(Enum): + QUANTIFY_SCHEDULER = 0 diff --git a/opensquirrel/exporter/quantify_scheduler_exporter.py b/opensquirrel/exporter/quantify_scheduler_exporter.py new file mode 100644 index 00000000..16e639f7 --- /dev/null +++ b/opensquirrel/exporter/quantify_scheduler_exporter.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +import math +from typing import TYPE_CHECKING, Any + +from opensquirrel.common import ATOL +from opensquirrel.default_gates import X, Z +from opensquirrel.exceptions import ExporterError, UnsupportedGateError +from opensquirrel.ir import BlochSphereRotation, ControlledGate, IRVisitor, MatrixGate, Measure, Qubit, Reset + +try: + import quantify_scheduler + import quantify_scheduler.operations.gate_library as quantify_scheduler_gates +except ModuleNotFoundError: + pass + +if TYPE_CHECKING: + from opensquirrel.circuit import Circuit + +# Radian to degree conversion outcome precision +FIXED_POINT_DEG_PRECISION = 5 + + +class _ScheduleCreator(IRVisitor): + def _get_qubit_string(self, q: Qubit) -> str: + return f"{self.qubit_register_name}[{q.index}]" + + def __init__(self, qubit_register_name: str) -> None: + self.qubit_register_name = qubit_register_name + self.schedule = quantify_scheduler.Schedule("Exported OpenSquirrel circuit") + + def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> None: + # Note that when adding a rotation gate to the Quantify-scheduler Schedule, + # there exists an ambiguity with how Quantify-scheduler will store an angle of 180 degrees. + # Depending on the system the angle may be stored as either 180 or -180 degrees. + # This ambiguity has no physical consequences, but may cause the exporter test fail. + g_qubit = Qubit(g.qubit) + if abs(g.axis[2]) < ATOL: + # Rxy rotation. + theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) + phi: float = round(math.degrees(math.atan2(g.axis[1], g.axis[0])), FIXED_POINT_DEG_PRECISION) + self.schedule.add(quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(g_qubit))) + return + + if abs(g.axis[0]) < ATOL and abs(g.axis[1]) < ATOL: + # Rz rotation. + theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) + self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(g_qubit))) + return + + raise UnsupportedGateError(g) + + def visit_matrix_gate(self, g: MatrixGate) -> None: + raise UnsupportedGateError(g) + + def visit_controlled_gate(self, g: ControlledGate) -> None: + if not isinstance(g.target_gate, BlochSphereRotation): + raise UnsupportedGateError(g) + + g_control_qubit = Qubit(g.control_qubit) + g_target_gate_qubit = Qubit(g.target_gate.qubit) + + if g.target_gate == X(g.target_gate.qubit): + self.schedule.add( + quantify_scheduler_gates.CNOT( + qC=self._get_qubit_string(g_control_qubit), + qT=self._get_qubit_string(g_target_gate_qubit), + ), + ) + return + + if g.target_gate == Z(g.target_gate.qubit): + self.schedule.add( + quantify_scheduler_gates.CZ( + qC=self._get_qubit_string(g_control_qubit), + qT=self._get_qubit_string(g_target_gate_qubit), + ), + ) + return + + raise UnsupportedGateError(g) + + def visit_measure(self, g: Measure) -> None: + self.schedule.add( + quantify_scheduler_gates.Measure( + self._get_qubit_string(g.qubit), + acq_channel=g.qubit.index, + acq_index=g.qubit.index, + acq_protocol="ThresholdedAcquisition", + ), + ) + + def visit_reset(self, g: Reset) -> Any: + self.schedule.add(quantify_scheduler_gates.Reset(qubit=self._get_qubit_string(g.qubit))) + + +def export(circuit: Circuit) -> quantify_scheduler.Schedule: + if "quantify_scheduler" not in globals(): + + class QuantifySchedulerNotInstalled: + def __getattr__(self, attr_name: Any) -> None: + msg = "quantify-scheduler is not installed, or cannot be installed on your system" + raise ModuleNotFoundError(msg) + + global quantify_scheduler + quantify_scheduler = QuantifySchedulerNotInstalled() + global quantify_scheduler_gates + quantify_scheduler_gates = QuantifySchedulerNotInstalled() + + schedule_creator = _ScheduleCreator(circuit.qubit_register_name) + try: + circuit.ir.accept(schedule_creator) + except UnsupportedGateError as e: + msg = ( + f"cannot export circuit: {e}. " + "Decompose all gates to the Quantify-scheduler gate set first (rxy, rz, cnot, cz)" + ) + raise ExporterError(msg) from e + return schedule_creator.schedule diff --git a/opensquirrel/instruction_library.py b/opensquirrel/instruction_library.py new file mode 100644 index 00000000..ed980e31 --- /dev/null +++ b/opensquirrel/instruction_library.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from collections.abc import Callable, Iterable, Mapping +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from opensquirrel.ir import Gate, Measure, Reset + + +class InstructionLibrary: + """Base class for instruction libraries.""" + + +class GateLibrary(InstructionLibrary): + def __init__( + self, + gate_set: Iterable[Callable[..., Gate]], + gate_aliases: Mapping[str, Callable[..., Gate]], + ) -> None: + self.gate_set = gate_set + self.gate_aliases = gate_aliases + + def get_gate_f(self, gate_name: str) -> Callable[..., Gate]: + try: + generator_f = next(f for f in self.gate_set if f.__name__ == gate_name) + except StopIteration as exc: + if gate_name not in self.gate_aliases: + msg = f"unknown instruction `{gate_name}`" + raise ValueError(msg) from exc + generator_f = self.gate_aliases[gate_name] + return generator_f + + +class MeasureLibrary(InstructionLibrary): + def __init__(self, measure_set: Iterable[Callable[..., Measure]]) -> None: + self.measure_set = measure_set + + def get_measure_f(self, measure_name: str) -> Callable[..., Measure]: + try: + return next(f for f in self.measure_set if f.__name__ == measure_name) + except StopIteration as exc: + msg = f"unknown instruction `{measure_name}`" + raise ValueError(msg) from exc + + +class ResetLibrary(InstructionLibrary): + def __init__(self, reset_set: Iterable[Callable[..., Reset]]) -> None: + self.reset_set = reset_set + + def get_reset_f(self, reset_name: str) -> Callable[..., Reset]: + try: + return next(f for f in self.reset_set if f.__name__ == reset_name) + except StopIteration as exc: + msg = f"unknown instruction `{reset_name}`" + raise ValueError(msg) from exc diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py new file mode 100644 index 00000000..6dfb900c --- /dev/null +++ b/opensquirrel/ir.py @@ -0,0 +1,712 @@ +from __future__ import annotations + +import inspect +from abc import ABC, abstractmethod +from collections.abc import Callable, Iterable, Sequence +from dataclasses import dataclass +from functools import wraps +from typing import Any, SupportsFloat, SupportsInt, Union, cast, overload + +import numpy as np +from numpy.typing import ArrayLike, DTypeLike, NDArray + +from opensquirrel.common import ATOL, are_matrices_equivalent_up_to_global_phase, normalize_angle + +REPR_DECIMALS = 5 + + +def repr_round( + value: float | Axis | NDArray[np.complex64 | np.complex128], decimals: int = REPR_DECIMALS +) -> float | NDArray[np.complex64 | np.complex128]: + return np.round(value, decimals) + + +class IRVisitor: + def visit_comment(self, comment: Comment) -> Any: + pass + + def visit_int(self, i: Int) -> Any: + pass + + def visit_float(self, f: Float) -> Any: + pass + + def visit_bit(self, qubit: Bit) -> Any: + pass + + def visit_qubit(self, qubit: Qubit) -> Any: + pass + + def visit_gate(self, gate: Gate) -> Any: + pass + + def visit_axis(self, axis: Axis) -> Any: + pass + + def visit_measure(self, measure: Measure) -> Any: + pass + + def visit_reset(self, reset: Reset) -> Any: + pass + + def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: + pass + + def visit_matrix_gate(self, matrix_gate: MatrixGate) -> Any: + pass + + def visit_controlled_gate(self, controlled_gate: ControlledGate) -> Any: + pass + + +class IRNode(ABC): + @abstractmethod + def accept(self, visitor: IRVisitor) -> Any: + pass + + +class Expression(IRNode, ABC): + pass + + +@dataclass +class Float(Expression): + value: float + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_float(self) + + def __post_init__(self) -> None: + if isinstance(self.value, SupportsFloat): + self.value = float(self.value) + else: + msg = "value must be a float" + raise TypeError(msg) + + +@dataclass(init=False) +class Int(Expression): + """Integers used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``Int`` object. + """ + + value: int + + def __init__(self, value: SupportsInt) -> None: + """Init of the ``Int`` object. + + Args: + value: value of the ``Int`` object. + """ + if isinstance(value, SupportsInt): + self.value = int(value) + return + + msg = "value must be an int" + raise TypeError(msg) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_int(self) + + def __int__(self) -> int: + """Cast the ``Int`` object to a building python ``int``. + + Returns: + Building python ``int`` representation of the ``Int``. + """ + return self.value + + +@dataclass +class Bit(Expression): + index: int + + def __hash__(self) -> int: + return hash(str(self.__class__) + str(self.index)) + + def __repr__(self) -> str: + return f"Bit[{self.index}]" + + def __post_init__(self) -> None: + if isinstance(self.index, SupportsInt): + self.index = int(self.index) + else: + msg = "index must be an int" + raise TypeError(msg) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bit(self) + + +@dataclass(init=False) +class Qubit(Expression): + """``Qubit`` is used for intermediate representation of ``Statement`` arguments. + + Attributes: + index: index of the ``Qubit`` object. + """ + + index: int + + def __init__(self, index: QubitLike) -> None: + """Init of the ``Qubit`` object. + + Args: + index: index of the ``Qubit`` object. + """ + if isinstance(index, SupportsInt): + self.index = int(index) + elif isinstance(index, Qubit): + self.index = index.index + else: + msg = "index must be a QubitLike" + raise TypeError(msg) + + def __hash__(self) -> int: + """Create a hash for this qubit.""" + return hash(str(self.__class__) + str(self.index)) + + def __repr__(self) -> str: + """String representation of the Qubit.""" + return f"Qubit[{self.index}]" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_qubit(self) + + +class Axis(Sequence[np.float64], Expression): + """The ``Axis`` object parses and stores a vector containing 3 elements. + + The input vector is always normalized before it is stored. + """ + + _len = 3 + + def __init__(self, *axis: AxisLike) -> None: + """Init of the ``Axis`` object. + + axis: An ``AxisLike`` to create the axis from. + """ + axis_to_parse = axis[0] if len(axis) == 1 else cast(AxisLike, axis) + self._value = self._parse_and_validate_axislike(axis_to_parse) + + @property + def value(self) -> NDArray[np.float64]: + """The ``Axis`` data saved as a 1D-Array with 3 elements.""" + return self._value + + @value.setter + def value(self, axis: AxisLike) -> None: + """Parse and set a new axis. + + Args: + axis: An ``AxisLike`` to create the axis from. + """ + self._value = self._parse_and_validate_axislike(axis) + + @classmethod + def _parse_and_validate_axislike(cls, axis: AxisLike) -> NDArray[np.float64]: + """Parse and validate an ``AxisLike``. + + Check if the `axis` can be cast to a 1DArray of length 3, raise an error + otherwise. After casting to an array, the axis is normalized. + + Args: + axis: ``AxisLike`` to validate and parse. + + Returns: + Parsed axis represented as a 1DArray of length 3. + """ + if isinstance(axis, Axis): + return axis.value + + try: + axis = np.asarray(axis, dtype=float) + except (ValueError, TypeError) as e: + msg = "axis requires an ArrayLike" + raise TypeError(msg) from e + axis = axis.flatten() + if len(axis) != 3: + msg = f"axis requires an ArrayLike of length 3, but received an ArrayLike of length {len(axis)}" + raise ValueError(msg) + return cls._normalize_axis(axis) + + @staticmethod + def _normalize_axis(axis: NDArray[np.float64]) -> NDArray[np.float64]: + """Normalize a NDArray. + + Args: + axis: NDArray to normalize. + + Returns: + Normalized NDArray. + """ + return axis / np.linalg.norm(axis) + + def __getitem__(self, index: int, /) -> np.float64: # type:ignore[override] + """Get the item at `index`.""" + return cast(np.float64, self.value[index]) + + def __len__(self) -> int: + """Length of the axis, which is always 3.""" + return self._len + + def __repr__(self) -> str: + """String representation of the ``Axis``.""" + return f"Axis{self.value}" + + def __array__(self, dtype: DTypeLike = None, *, copy: bool = True) -> NDArray[Any]: + """Convert the ``Axis`` data to an array.""" + return np.array(self.value, dtype=dtype, copy=copy) + + def accept(self, visitor: IRVisitor) -> Any: + """Accept the ``Axis``.""" + return visitor.visit_axis(self) + + def __eq__(self, other: Any) -> bool: + """Check if `self` is equal to other. + + Two ``Axis`` objects are considered equal if their axes are equal. + """ + if not isinstance(other, Axis): + return False + return np.array_equal(self, other) + + +class Statement(IRNode, ABC): + pass + + +class Measure(Statement, ABC): + def __init__( + self, + qubit: QubitLike, + bit: Bit, + axis: AxisLike = (0, 0, 1), + generator: Callable[..., Measure] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + self.generator = generator + self.arguments = arguments + self.qubit = Qubit(qubit) + self.bit: Bit = bit + self.axis = Axis(axis) + + def __repr__(self) -> str: + return f"Measure(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" + + @property + def name(self) -> str: + return self.generator.__name__ if self.generator else "" + + @property + def is_abstract(self) -> bool: + return self.arguments is None + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Measure): + return False + return self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_measure(self) + + def get_bit_operands(self) -> list[Bit]: + return [self.bit] + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Reset(Statement, ABC): + def __init__( + self, + qubit: QubitLike, + generator: Callable[..., Reset] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + self.generator = generator + self.arguments = arguments + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"Reset(qubit={self.qubit})" + + @property + def name(self) -> str: + return self.generator.__name__ if self.generator else "" + + @property + def is_abstract(self) -> bool: + return self.arguments is None + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Reset): + return False + return self.qubit == other.qubit + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_reset(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Gate(Statement, ABC): + def __init__( + self, + generator: Callable[..., Gate] | None = None, + arguments: tuple[Expression, ...] | None = None, + *args: Any, + **kwargs: Any, + ) -> None: + # Note: two gates are considered equal even when their generators/arguments are different. + self.generator = generator + self.arguments = arguments + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Gate): + return False + return compare_gates(self, other) + + @property + def name(self) -> str: + if self.generator: + return self.generator.__name__ + return "Anonymous gate: " + self.__repr__() + + @property + def is_anonymous(self) -> bool: + return self.arguments is None + + @staticmethod + def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: + """Check if qubit operands are repeated. + + Args: + qubits: Sequence of qubits. + + Returns: + Whether qubit operands are repeated. + """ + return len(qubits) != len(set(qubits)) + + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + """Get the qubit operands of the Gate. + + Returns: + List of qubits on which the Gate operates. + """ + + @abstractmethod + def is_identity(self) -> bool: + """Check whether the Gate is an identity Gate. + + Returns: + Boolean value stating whether the Gate is an identity Gate. + """ + + +class BlochSphereRotation(Gate): + def __init__( + self, + qubit: QubitLike, + axis: AxisLike, + angle: float, + phase: float = 0, + generator: Callable[..., BlochSphereRotation] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + Gate.__init__(self, generator, arguments) + self.qubit = Qubit(qubit) + self.axis = Axis(axis) + self.angle = normalize_angle(angle) + self.phase = normalize_angle(phase) + + @staticmethod + def identity(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=0, phase=0) + + def __repr__(self) -> str: + return ( + f"BlochSphereRotation({self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}," + f" phase={repr_round(self.phase)})" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, BlochSphereRotation): + return False + + if self.qubit != other.qubit: + return False + + if abs(self.phase - other.phase) > ATOL: + return False + + if np.allclose(self.axis, other.axis): + return abs(self.angle - other.angle) < ATOL + if np.allclose(self.axis, -other.axis.value): + return abs(self.angle + other.angle) < ATOL + return False + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_gate(self) + return visitor.visit_bloch_sphere_rotation(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + def is_identity(self) -> bool: + # Angle and phase are already normalized. + return abs(self.angle) < ATOL and abs(self.phase) < ATOL + + +class MatrixGate(Gate): + def __init__( + self, + matrix: ArrayLike | list[list[int | DTypeLike]], + operands: Iterable[QubitLike], + generator: Callable[..., MatrixGate] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + Gate.__init__(self, generator, arguments) + + qubit_operands = [Qubit(operand) for operand in operands] + if len(qubit_operands) < 2: + msg = "for 1q gates, please use BlochSphereRotation" + raise ValueError(msg) + + if self._check_repeated_qubit_operands(qubit_operands): + msg = "control and target qubit cannot be the same" + raise ValueError(msg) + + matrix = np.asarray(matrix, dtype=np.complex128) + + if matrix.shape != (1 << len(qubit_operands), 1 << len(qubit_operands)): + msg = ( + f"incorrect matrix shape. " + f"Expected {(1 << len(qubit_operands), 1 << len(qubit_operands))} but received {matrix.shape}" + ) + raise ValueError(msg) + + self.matrix = matrix + self.operands = qubit_operands + + def __repr__(self) -> str: + return f"MatrixGate(qubits={self.operands}, matrix={repr_round(self.matrix)})" + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_gate(self) + return visitor.visit_matrix_gate(self) + + def get_qubit_operands(self) -> list[Qubit]: + return self.operands + + def is_identity(self) -> bool: + return np.allclose(self.matrix, np.eye(2 ** len(self.operands))) + + +class ControlledGate(Gate): + def __init__( + self, + control_qubit: QubitLike, + target_gate: Gate, + generator: Callable[..., ControlledGate] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + Gate.__init__(self, generator, arguments) + self.control_qubit = Qubit(control_qubit) + self.target_gate = target_gate + + if self._check_repeated_qubit_operands([self.control_qubit, *target_gate.get_qubit_operands()]): + msg = "control and target qubit cannot be the same" + raise ValueError(msg) + + def __repr__(self) -> str: + return f"ControlledGate(control_qubit={self.control_qubit}, {self.target_gate})" + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_gate(self) + return visitor.visit_controlled_gate(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.control_qubit, *self.target_gate.get_qubit_operands()] + + def is_identity(self) -> bool: + return self.target_gate.is_identity() + + +@overload +def named_gate(gate_generator: Callable[..., BlochSphereRotation]) -> Callable[..., BlochSphereRotation]: ... + + +@overload +def named_gate(gate_generator: Callable[..., MatrixGate]) -> Callable[..., MatrixGate]: ... + + +@overload +def named_gate(gate_generator: Callable[..., ControlledGate]) -> Callable[..., ControlledGate]: ... + + +def named_gate(gate_generator: Callable[..., Gate]) -> Callable[..., Gate]: + @wraps(gate_generator) + def wrapper(*args: Any, **kwargs: Any) -> Gate: + result = gate_generator(*args, **kwargs) + result.generator = wrapper + + all_args: list[Expression] = [] + for par in inspect.signature(gate_generator).parameters.values(): + next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] + next_annotation = ( + ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation + ) + + # Convert to correct expression for IR + if is_int_annotation(next_annotation): + next_arg = Int(next_arg) + if is_qubit_like_annotation(next_annotation): + next_arg = Qubit(next_arg) + + # Append parsed argument + all_args.append(next_arg) + + result.arguments = tuple(all_args) + return result + + return wrapper + + +def named_measure(measure_generator: Callable[..., Measure]) -> Callable[..., Measure]: + @wraps(measure_generator) + def wrapper(*args: Any, **kwargs: Any) -> Measure: + result = measure_generator(*args, **kwargs) + result.generator = wrapper + + all_args: list[Any] = [] + for par in inspect.signature(measure_generator).parameters.values(): + next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] + next_annotation = ( + ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation + ) + + # Convert to correct expression for IR + if is_qubit_like_annotation(next_annotation): + next_arg = Qubit(next_arg) + + # Append parsed argument + all_args.append(next_arg) + + result.arguments = tuple(all_args) + return result + + return wrapper + + +def named_reset(reset_generator: Callable[..., Reset]) -> Callable[..., Reset]: + @wraps(reset_generator) + def wrapper(*args: Any, **kwargs: Any) -> Reset: + result = reset_generator(*args, **kwargs) + result.generator = wrapper + + all_args: list[Any] = [] + for par in inspect.signature(reset_generator).parameters.values(): + next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] + next_annotation = ( + ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation + ) + + # Convert to correct expression for IR + if is_qubit_like_annotation(next_annotation): + next_arg = Qubit(next_arg) + + # Append parsed argument + all_args.append(next_arg) + + result.arguments = tuple(all_args) + return result + + return wrapper + + +def compare_gates(g1: Gate, g2: Gate) -> bool: + union_mapping = [q.index for q in list(set(g1.get_qubit_operands()) | set(g2.get_qubit_operands()))] + + from opensquirrel.circuit_matrix_calculator import get_circuit_matrix + from opensquirrel.reindexer import get_reindexed_circuit + + matrix_g1 = get_circuit_matrix(get_reindexed_circuit([g1], union_mapping)) + matrix_g2 = get_circuit_matrix(get_reindexed_circuit([g2], union_mapping)) + + return are_matrices_equivalent_up_to_global_phase(matrix_g1, matrix_g2) + + +@dataclass +class Comment(Statement): + str: str + + def __post_init__(self) -> None: + if "*/" in self.str: + msg = "comment contains illegal characters" + raise ValueError(msg) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_comment(self) + + +class IR: + # This is just a list of gates (for now?) + def __init__(self) -> None: + self.statements: list[Statement] = [] + + def add_gate(self, gate: Gate) -> None: + self.statements.append(gate) + + def add_measure(self, measure: Measure) -> None: + self.statements.append(measure) + + def add_reset(self, reset: Reset) -> None: + self.statements.append(reset) + + def add_comment(self, comment: Comment) -> None: + self.statements.append(comment) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, IR): + return False + + return self.statements == other.statements + + def __repr__(self) -> str: + return f"IR: {self.statements}" + + def accept(self, visitor: IRVisitor) -> None: + for statement in self.statements: + statement.accept(visitor) + + +# Type Aliases +AxisLike = Union[ArrayLike, Axis] +QubitLike = Union[SupportsInt, Qubit] + + +def is_qubit_like_annotation(annotation: Any) -> bool: + return annotation in (QubitLike, Qubit) + + +def is_int_annotation(annotation: Any) -> bool: + return annotation in (SupportsInt, Int) + + +ANNOTATIONS_TO_TYPE_MAP = { + "AxisLike": AxisLike, + "BlochSphereRotation": BlochSphereRotation, + "ControlledGate": ControlledGate, + "Float": Float, + "MatrixGate": MatrixGate, + "SupportsInt": SupportsInt, + "Qubit": Qubit, + "QubitLike": QubitLike, +} diff --git a/opensquirrel/mapper/__init__.py b/opensquirrel/mapper/__init__.py new file mode 100644 index 00000000..a0557640 --- /dev/null +++ b/opensquirrel/mapper/__init__.py @@ -0,0 +1,4 @@ +from opensquirrel.mapper.general_mapper import Mapper +from opensquirrel.mapper.simple_mappers import HardcodedMapper, IdentityMapper + +__all__ = ["Mapper", "IdentityMapper", "HardcodedMapper"] diff --git a/opensquirrel/mapper/general_mapper.py b/opensquirrel/mapper/general_mapper.py new file mode 100644 index 00000000..7fbf2fb7 --- /dev/null +++ b/opensquirrel/mapper/general_mapper.py @@ -0,0 +1,22 @@ +"""This module contains generic mapping components.""" + +from __future__ import annotations + +from opensquirrel.mapper.mapping import Mapping + + +class Mapper: + """Base class for the Mapper pass.""" + + def __init__(self, qubit_register_size: int, mapping: Mapping | None = None) -> None: + """Use ``IdentityMapper`` as the fallback case for ``Mapper``""" + physical_qubit_register = list(range(qubit_register_size)) + self.mapping = mapping if mapping is not None else Mapping(physical_qubit_register) + + if qubit_register_size != self.mapping.size(): + msg = "qubit register size and mapping size differ" + raise ValueError(msg) + + def get_mapping(self) -> Mapping: + """Get mapping.""" + return self.mapping diff --git a/opensquirrel/mapper/mapping.py b/opensquirrel/mapper/mapping.py new file mode 100644 index 00000000..291dbbf6 --- /dev/null +++ b/opensquirrel/mapper/mapping.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from typing import Any + + +class Mapping: + """A Mapping is a dictionary where: + - the keys are virtual qubit indices (from 0 to virtual_qubit_register_size-1), and + - the values are physical qubit indices. + + Args: + physical_qubit_register: a list of physical qubit indices. + + Raises: + ValueError: If the mapping is incorrect. + """ + + def __init__(self, physical_qubit_register: list[int]) -> None: + self.data: dict[int, int] = dict(enumerate(physical_qubit_register)) + if (self.data.keys()) != set(self.data.values()): + msg = "the mapping is incorrect" + raise ValueError(msg) + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, Mapping): + return False + return self.data == other.data + + def __getitem__(self, key: int) -> int: + return self.data[key] + + def __len__(self) -> int: + return len(self.data) + + def size(self) -> int: + return len(self.data) + + def items(self) -> list[tuple[int, int]]: + return list(self.data.items()) + + def keys(self) -> list[int]: + return list(self.data.keys()) + + def values(self) -> list[int]: + return list(self.data.values()) diff --git a/opensquirrel/mapper/qubit_remapper.py b/opensquirrel/mapper/qubit_remapper.py new file mode 100644 index 00000000..9303b3ac --- /dev/null +++ b/opensquirrel/mapper/qubit_remapper.py @@ -0,0 +1,82 @@ +from opensquirrel.circuit import Circuit +from opensquirrel.ir import ( + IR, + BlochSphereRotation, + Comment, + ControlledGate, + IRVisitor, + MatrixGate, + Measure, + Qubit, + Reset, +) +from opensquirrel.mapper.mapping import Mapping + + +class _QubitRemapper(IRVisitor): + """ + Remap a whole IR. + + Args: + mapping: a list of qubit indices, e.g. [3, 1, 0, 2] + + Returns: + A new IR where the qubit indices are replaced by the values passed in mapping. + E.g., for mapping = [3, 1, 0, 2]: + - Qubit(index=0) becomes Qubit(index=3), + - Qubit(index=1) becomes Qubit(index=1), + - Qubit(index=2) becomes Qubit(index=0), and + - Qubit(index=3) becomes Qubit(index=2). + """ + + def __init__(self, mapping: Mapping) -> None: + self.mapping = mapping + + def visit_comment(self, comment: Comment) -> Comment: + return comment + + def visit_qubit(self, qubit: Qubit) -> Qubit: + qubit.index = self.mapping[qubit.index] + return qubit + + def visit_reset(self, reset: Reset) -> Reset: + reset.qubit.accept(self) + return reset + + def visit_measure(self, measure: Measure) -> Measure: + measure.qubit.accept(self) + return measure + + def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: + g.qubit.accept(self) + return g + + def visit_matrix_gate(self, g: MatrixGate) -> MatrixGate: + for op in g.operands: + op.accept(self) + return g + + def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: + controlled_gate.control_qubit.accept(self) + controlled_gate.target_gate.accept(self) + return controlled_gate + + +def get_remapped_ir(circuit: Circuit, mapping: Mapping) -> IR: + if len(mapping) > circuit.qubit_register_size: + msg = "mapping is larger than the qubit register size" + raise ValueError(msg) + qubit_remapper = _QubitRemapper(mapping) + replacement_ir = circuit.ir + for statement in replacement_ir.statements: + statement.accept(qubit_remapper) + return replacement_ir + + +def remap_ir(circuit: Circuit, mapping: Mapping) -> None: + if len(mapping) > circuit.qubit_register_size: + msg = "mapping is larger than the qubit register size" + raise ValueError(msg) + qubit_remapper = _QubitRemapper(mapping) + for statement in circuit.ir.statements: + statement.accept(qubit_remapper) diff --git a/opensquirrel/mapper/simple_mappers.py b/opensquirrel/mapper/simple_mappers.py new file mode 100644 index 00000000..673f7767 --- /dev/null +++ b/opensquirrel/mapper/simple_mappers.py @@ -0,0 +1,20 @@ +"""This module contains the following simple mappers: + +* IdentityMapper +* HardcodedMapper +""" + +from opensquirrel.mapper.general_mapper import Mapper +from opensquirrel.mapper.mapping import Mapping + + +class IdentityMapper(Mapper): + def __init__(self, qubit_register_size: int) -> None: + """An ``IdentityMapper`` maps each virtual qubit to exactly the same physical qubit.""" + super().__init__(qubit_register_size) + + +class HardcodedMapper(Mapper): + def __init__(self, qubit_register_size: int, mapping: Mapping) -> None: + """A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit""" + super().__init__(qubit_register_size, mapping) diff --git a/opensquirrel/mapper/utils.py b/opensquirrel/mapper/utils.py new file mode 100644 index 00000000..7fb7952a --- /dev/null +++ b/opensquirrel/mapper/utils.py @@ -0,0 +1,22 @@ +import networkx as nx + +from opensquirrel.ir import IR, Gate + + +def make_interaction_graph(ir: IR) -> nx.Graph: + interaction_graph = nx.Graph() + gates = (statement for statement in ir.statements if isinstance(statement, Gate)) + + for gate in gates: + target_qubits = gate.get_qubit_operands() + if len(target_qubits) == 1: + continue + if len(target_qubits) > 2: + msg = ( + f"the gate {gate} acts on more than 2 qubits. " + "The gate must be decomposed before an interaction graph can be made", + ) + raise ValueError(msg) + interaction_graph.add_edge(*target_qubits) + + return interaction_graph diff --git a/parsing/__init__.py b/opensquirrel/merger/__init__.py similarity index 100% rename from parsing/__init__.py rename to opensquirrel/merger/__init__.py diff --git a/opensquirrel/merger/general_merger.py b/opensquirrel/merger/general_merger.py new file mode 100644 index 00000000..167227b9 --- /dev/null +++ b/opensquirrel/merger/general_merger.py @@ -0,0 +1,126 @@ +from math import acos, cos, floor, log10, sin + +import numpy as np + +from opensquirrel.circuit import Circuit +from opensquirrel.common import ATOL +from opensquirrel.default_gates import I, default_bloch_sphere_rotations_without_params +from opensquirrel.ir import BlochSphereRotation, Comment, Qubit + + +def compose_bloch_sphere_rotations(a: BlochSphereRotation, b: BlochSphereRotation) -> BlochSphereRotation: + """Computes the Bloch sphere rotation resulting from the composition of two Bloch sphere rotations. + The first rotation is applied and then the second. + The resulting gate is anonymous except if `a` is the identity and `b` is not anonymous, or vice versa. + + Uses Rodrigues' rotation formula, see for instance https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula. + """ + if a.qubit != b.qubit: + msg = "cannot merge two BlochSphereRotation's on different qubits" + raise ValueError(msg) + + acos_argument = cos(a.angle / 2) * cos(b.angle / 2) - sin(a.angle / 2) * sin(b.angle / 2) * np.dot(a.axis, b.axis) + # This fixes float approximations like 1.0000000000002 which acos doesn't like. + acos_argument = max(min(acos_argument, 1.0), -1.0) + + combined_angle = 2 * acos(acos_argument) + + if abs(sin(combined_angle / 2)) < ATOL: + return BlochSphereRotation.identity(a.qubit) + + order_of_magnitude = abs(floor(log10(ATOL))) + combined_axis = np.round( + ( + 1 + / sin(combined_angle / 2) + * ( + sin(a.angle / 2) * cos(b.angle / 2) * a.axis.value + + cos(a.angle / 2) * sin(b.angle / 2) * b.axis.value + + sin(a.angle / 2) * sin(b.angle / 2) * np.cross(a.axis, b.axis) + ) + ), + order_of_magnitude, + ) + + combined_phase = np.round(a.phase + b.phase, order_of_magnitude) + + generator = b.generator if a.is_identity() else a.generator if b.is_identity() else None + arguments = b.arguments if a.is_identity() else a.arguments if b.is_identity() else None + + return BlochSphereRotation( + qubit=a.qubit, + axis=combined_axis, + angle=combined_angle, + phase=combined_phase, + generator=generator, # type: ignore[arg-type] + arguments=arguments, + ) + + +def try_name_anonymous_bloch(bsr: BlochSphereRotation) -> BlochSphereRotation: + """Try converting a given BlochSphereRotation to a default BlochSphereRotation. + It does that by checking if the input BlochSphereRotation is close to a default BlochSphereRotation. + + Notice we don't try to match Rx, Ry, and Rz rotations, as those gates use an extra angle parameter. + + Returns: + A default BlockSphereRotation if this BlochSphereRotation is close to it, + or the input BlochSphereRotation otherwise. + """ + for gate_function in default_bloch_sphere_rotations_without_params: + gate = gate_function(*bsr.get_qubit_operands()) + if ( + np.allclose(gate.axis, bsr.axis) + and np.allclose(gate.angle, bsr.angle) + and np.allclose(gate.phase, bsr.phase) + ): + return gate + return bsr + + +def merge_single_qubit_gates(circuit: Circuit) -> None: + """Merge all consecutive 1-qubit gates in the circuit. + + Gates obtained from merging other gates become anonymous gates. + + Args: + circuit: Circuit to perform the merge on. + """ + accumulators_per_qubit: dict[Qubit, BlochSphereRotation] = { + Qubit(qubit_index): I(qubit_index) for qubit_index in range(circuit.qubit_register_size) + } + + ir = circuit.ir + statement_index = 0 + while statement_index < len(ir.statements): + statement = ir.statements[statement_index] + + if isinstance(statement, Comment): + # Skip, since statement is a comment + statement_index += 1 + continue + + if isinstance(statement, BlochSphereRotation): + # Accumulate consecutive Bloch sphere rotations + already_accumulated = accumulators_per_qubit[statement.qubit] + + composed = compose_bloch_sphere_rotations(statement, already_accumulated) + accumulators_per_qubit[statement.qubit] = composed + + del ir.statements[statement_index] + continue + + # Skip controlled-gates, measure, reset, and reset accumulator for their qubit operands + for qubit_operand in statement.get_qubit_operands(): # type: ignore + if not accumulators_per_qubit[qubit_operand].is_identity(): + ir.statements.insert(statement_index, accumulators_per_qubit[qubit_operand]) + accumulators_per_qubit[qubit_operand] = I(qubit_operand) + statement_index += 1 + + statement_index += 1 + + for accumulated_bloch_sphere_rotation in accumulators_per_qubit.values(): + if not accumulated_bloch_sphere_rotation.is_identity(): + if accumulated_bloch_sphere_rotation.is_anonymous: + accumulated_bloch_sphere_rotation = try_name_anonymous_bloch(accumulated_bloch_sphere_rotation) + ir.statements.append(accumulated_bloch_sphere_rotation) diff --git a/parsing/grammar/__init__.py b/opensquirrel/parser/__init__.py similarity index 100% rename from parsing/grammar/__init__.py rename to opensquirrel/parser/__init__.py diff --git a/opensquirrel/parser/libqasm/README.md b/opensquirrel/parser/libqasm/README.md new file mode 100644 index 00000000..99fd4fe4 --- /dev/null +++ b/opensquirrel/parser/libqasm/README.md @@ -0,0 +1,3 @@ +# Under development + +This directory will contain the code to parse a cQasm string using libqasm. diff --git a/opensquirrel/parser/libqasm/__init__.py b/opensquirrel/parser/libqasm/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/opensquirrel/parser/libqasm/parser.py b/opensquirrel/parser/libqasm/parser.py new file mode 100644 index 00000000..f75c15c1 --- /dev/null +++ b/opensquirrel/parser/libqasm/parser.py @@ -0,0 +1,191 @@ +from __future__ import annotations + +from collections.abc import Callable, Iterable, Mapping +from typing import Any + +import cqasm.v3x as cqasm + +from opensquirrel.circuit import Circuit +from opensquirrel.default_gates import default_gate_aliases, default_gate_set +from opensquirrel.default_measures import default_measure_set +from opensquirrel.default_resets import default_reset_set +from opensquirrel.instruction_library import GateLibrary, MeasureLibrary, ResetLibrary +from opensquirrel.ir import IR, Bit, Float, Gate, Int, Measure, Qubit, Reset +from opensquirrel.register_manager import RegisterManager + + +class Parser(GateLibrary, MeasureLibrary, ResetLibrary): + def __init__( + self, + gate_set: Iterable[Callable[..., Gate]] = default_gate_set, + gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, + measure_set: Iterable[Callable[..., Measure]] = default_measure_set, + reset_set: Iterable[Callable[..., Reset]] = default_reset_set, + ) -> None: + GateLibrary.__init__(self, gate_set, gate_aliases) + MeasureLibrary.__init__(self, measure_set) + ResetLibrary.__init__(self, reset_set) + self.ir = None + + @staticmethod + def _ast_literal_to_ir_literal( + cqasm_literal_expression: cqasm.values.ConstInt | cqasm.values.ConstFloat, + ) -> Int | Float | None: + if type(cqasm_literal_expression) not in [cqasm.values.ConstInt, cqasm.values.ConstFloat]: + msg = f"unrecognized type: {type(cqasm_literal_expression)}" + raise TypeError(msg) + if isinstance(cqasm_literal_expression, cqasm.values.ConstInt): + return Int(cqasm_literal_expression.value) + if isinstance(cqasm_literal_expression, cqasm.values.ConstFloat): + return Float(cqasm_literal_expression.value) + return None + + @staticmethod + def _type_of(ast_expression: Any) -> type: + if isinstance(ast_expression, (cqasm.values.IndexRef, cqasm.values.VariableRef)): + return type(ast_expression.variable.typ) + return type(ast_expression) + + @staticmethod + def _size_of(ast_expression: Any) -> int: + if isinstance(ast_expression, cqasm.values.IndexRef): + return len(ast_expression.indices) + if isinstance(ast_expression, cqasm.values.VariableRef): + return int(ast_expression.variable.typ.size) + return 1 + + @staticmethod + def _is_qubit_type(ast_expression: Any) -> bool: + ast_type = Parser._type_of(ast_expression) + return bool(ast_type == cqasm.types.Qubit or ast_type == cqasm.types.QubitArray) + + @staticmethod + def _is_bit_type(ast_expression: Any) -> bool: + ast_type = Parser._type_of(ast_expression) + return bool(ast_type == cqasm.types.Bit or ast_type == cqasm.types.BitArray) + + @staticmethod + def _get_qubits( + ast_qubit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef, + register_manager: RegisterManager, + ) -> list[Qubit]: + ret = [] + variable_name = ast_qubit_expression.variable.name + if isinstance(ast_qubit_expression, cqasm.values.VariableRef): + qubit_range = register_manager.get_qubit_range(variable_name) + ret = [Qubit(index) for index in range(qubit_range.first, qubit_range.first + qubit_range.size)] + if isinstance(ast_qubit_expression, cqasm.values.IndexRef): + int_indices = [int(i.value) for i in ast_qubit_expression.indices] + indices = [register_manager.get_qubit_index(variable_name, i) for i in int_indices] + ret = [Qubit(index) for index in indices] + return ret + + @staticmethod + def _get_bits( + ast_bit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef, + register_manager: RegisterManager, + ) -> list[Bit]: + ret = [] + variable_name = ast_bit_expression.variable.name + if isinstance(ast_bit_expression, cqasm.values.VariableRef): + bit_range = register_manager.get_bit_range(variable_name) + ret = [Bit(index) for index in range(bit_range.first, bit_range.first + bit_range.size)] + if isinstance(ast_bit_expression, cqasm.values.IndexRef): + int_indices = [int(i.value) for i in ast_bit_expression.indices] + indices = [register_manager.get_bit_index(variable_name, i) for i in int_indices] + ret = [Bit(index) for index in indices] + return ret + + @classmethod + def _get_expanded_measure_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + """Construct a list with a list of bits and a list of qubits, then return a zip of both lists. + For example: [(Qubit(0), Bit(0)), (Qubit(1), Bit(1))] + + Notice the list is walked in reverse mode. + This is because the AST measure node has a bit first operand and a qubit second operand. + """ + expanded_args: list[list[Any]] = [] + for ast_arg in reversed(ast_args): + if Parser._is_qubit_type(ast_arg): + expanded_args.append(cls._get_qubits(ast_arg, register_manager)) + elif Parser._is_bit_type(ast_arg): + expanded_args.append(cls._get_bits(ast_arg, register_manager)) + else: + msg = "received argument is not a (qu)bit" + raise TypeError(msg) + return zip(*expanded_args) + + @classmethod + def _get_expanded_reset_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + """Construct a list of qubits and return a zip. + For example: [Qubit(0), Qubit(1), Qubit(2)] + """ + expanded_args: list[Any] = [] + if len(ast_args) < 1: + expanded_args += [Qubit(qubit_index) for qubit_index in range(register_manager.get_qubit_register_size())] + return zip(expanded_args) + for ast_arg in ast_args: + if Parser._is_qubit_type(ast_arg): + expanded_args += cls._get_qubits(ast_arg, register_manager) + else: + msg = "received argument is not a (qu)bit" + raise TypeError(msg) + return zip(expanded_args) + + @classmethod + def _get_expanded_gate_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + """Construct a list with a list of qubits and a list of parameters, then return a zip of both lists. + For example: [(Qubit(0), Float(pi)), (Qubit(1), Float(pi))] + """ + number_of_operands = 0 + for ast_arg in ast_args: + if Parser._is_qubit_type(ast_arg): + number_of_operands += Parser._size_of(ast_arg) + expanded_args: list[list[Any]] = [] + for ast_arg in ast_args: + if Parser._is_qubit_type(ast_arg): + expanded_args.append(cls._get_qubits(ast_arg, register_manager)) + else: + expanded_args.append([cls._ast_literal_to_ir_literal(ast_arg)] * number_of_operands) + return zip(*expanded_args) + + @staticmethod + def _create_analyzer() -> cqasm.Analyzer: + without_defaults = False + return cqasm.Analyzer("3.0", without_defaults) + + @staticmethod + def _check_analysis_result(result: Any) -> None: + if isinstance(result, list): + raise OSError("parsing error: " + ", ".join(result)) + + def circuit_from_string(self, s: str) -> Circuit: + # Analysis result will be either an Abstract Syntax Tree (AST) or a list of error messages + analyzer = Parser._create_analyzer() + analysis_result = analyzer.analyze_string(s) + Parser._check_analysis_result(analysis_result) + ast = analysis_result + + # Create RegisterManager + register_manager = RegisterManager.from_ast(ast) + + # Parse statements + ir = IR() + for statement in ast.block.statements: + if "measure" in statement.name: + generator_f_measure = self.get_measure_f(statement.name) + expanded_args = Parser._get_expanded_measure_args(statement.operands, register_manager) + for arg_set in expanded_args: + ir.add_measure(generator_f_measure(*arg_set)) + elif "reset" in statement.name: + generator_f_reset = self.get_reset_f(statement.name) + expanded_args = Parser._get_expanded_reset_args(statement.operands, register_manager) + for arg_set in expanded_args: + ir.add_reset(generator_f_reset(*arg_set)) + else: + generator_f_gate = self.get_gate_f(statement.name) + expanded_args = Parser._get_expanded_gate_args(statement.operands, register_manager) + for arg_set in expanded_args: + ir.add_gate(generator_f_gate(*arg_set)) + + return Circuit(register_manager, ir) diff --git a/opensquirrel/register_manager.py b/opensquirrel/register_manager.py new file mode 100644 index 00000000..6e904123 --- /dev/null +++ b/opensquirrel/register_manager.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from dataclasses import dataclass +from typing import Any + +import cqasm.v3x as cqasm +from typing_extensions import Self + + +def is_qubit_type(variable: cqasm.semantic.MultiVariable) -> bool: + return isinstance(variable.typ, (cqasm.types.Qubit, cqasm.types.QubitArray)) + + +def is_bit_type(variable: cqasm.semantic.MultiVariable) -> bool: + return isinstance(variable.typ, (cqasm.types.Bit, cqasm.types.BitArray)) + + +@dataclass +class Range: + first: int = 0 + size: int = 0 + + def __repr__(self) -> str: + return "[{}{}]".format(self.first, "" if self.size == 1 else f"..{self.first + self.size - 1}") + + +class Register(ABC): + """Register manages a (virtual) register.""" + + @property + @abstractmethod + def name(self) -> str: ... + + @staticmethod + @abstractmethod + def is_of_type(variable: cqasm.semantic.MultiVariable) -> bool: ... + + def __init__( + self, + register_size: int, + variable_name_to_range: dict[str, Range] | None = None, + index_to_variable_name: dict[int, str] | None = None, + ) -> None: + self.register_size: int = register_size + self.variable_name_to_range: dict[str, Range] = variable_name_to_range or {} + self.index_to_variable_name: dict[int, str] = index_to_variable_name or {} + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, Register): + return False + return ( + self.register_size == other.register_size + and self.variable_name_to_range == other.variable_name_to_range + and self.index_to_variable_name == other.index_to_variable_name + ) + + def get_variable_name(self, index: int) -> str: + """Get the variable name at `index`.""" + return self.index_to_variable_name[index] + + def get_range(self, variable_name: str) -> Range: + """Get the Range for a `variable_name`.""" + return self.variable_name_to_range[variable_name] + + def get_index(self, variable_name: str, sub_index: int) -> int: + """Get the Index for a given `subIndex` of a `variable_name`.""" + return self.variable_name_to_range[variable_name].first + sub_index + + def __repr__(self) -> str: + entries: str = "" + first: bool = True + for variable_name, register_range in self.variable_name_to_range.items(): + entries += "{}{}: {}".format("" if first else ", ", variable_name, register_range) + first = False + return f"{{ {entries} }}" + + def size(self) -> int: + return self.register_size + + @classmethod + def from_ast(cls, ast: cqasm.semantic.Program) -> Self: + variables = [v for v in ast.variables if cls.is_of_type(v)] + register_size = sum([v.typ.size for v in variables]) + variable_name_to_range: dict[str, Range] = {} + index_to_variable_name: dict[int, str] = {} + + current_index: int = 0 + for v in variables: + v_name = v.name + v_size = v.typ.size + variable_name_to_range[v_name] = Range(current_index, v_size) + for _ in range(v_size): + index_to_variable_name[current_index] = v_name + current_index += 1 + return cls(register_size, variable_name_to_range, index_to_variable_name) + + +class QubitRegister(Register): + """QubitRegister manages a (virtual) qubit register.""" + + _default_qubit_register_name: str = "q" + + @property + def name(self) -> str: + return self._default_qubit_register_name + + @staticmethod + def is_of_type(variable: cqasm.semantic.MultiVariable) -> bool: + return is_qubit_type(variable) + + +class BitRegister(Register): + """BitRegister manages a (virtual) bit register.""" + + _default_bit_register_name: str = "b" + + @property + def name(self) -> str: + return self._default_bit_register_name + + @staticmethod + def is_of_type(variable: cqasm.semantic.MultiVariable) -> bool: + return is_bit_type(variable) + + +class RegisterManager: + """RegisterManager keeps track of a (virtual) qubit register, i.e., an array of consecutive qubits, + and the mappings between the (logical) qubit variable names, as used in an input cQASM program, + and the (virtual) qubit register. + + For example, given an input program that defines 'qubit[3] q': + - variable 'q' is mapped to qubits 0 to 2 in the qubit register, and + - positions 0 to 2 in the qubit register are mapped to variable 'q'. + + The mapping of qubit variable names to positions in the qubit register is an implementation detail, + i.e., it is not guaranteed that qubit register indices are assigned to qubit variable names in the order + these variables are defined in the input program. + """ + + def __init__(self, qubit_register: QubitRegister, bit_register: BitRegister | None = None) -> None: + self.qubit_register: QubitRegister = qubit_register + self.bit_register: BitRegister = bit_register or BitRegister(0) + + def __repr__(self) -> str: + return f"qubit_register:\n{self.qubit_register}\nbit_register:\n{self.bit_register}" + + @classmethod + def from_ast(cls, ast: cqasm.semantic.Program) -> Self: + qubit_register = QubitRegister.from_ast(ast) + bit_register = BitRegister.from_ast(ast) + return cls(qubit_register, bit_register) + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, RegisterManager): + return False + return self.qubit_register == other.qubit_register and self.bit_register == other.bit_register + + def get_qubit_register_size(self) -> int: + return self.qubit_register.size() + + def get_bit_register_size(self) -> int: + return self.bit_register.size() + + def get_qubit_register_name(self) -> str: + return self.qubit_register.name + + def get_bit_register_name(self) -> str: + return self.bit_register.name + + def get_qubit_range(self, variable_name: str) -> Range: + return self.qubit_register.get_range(variable_name) + + def get_bit_range(self, variable_name: str) -> Range: + return self.bit_register.get_range(variable_name) + + def get_qubit_index(self, variable_name: str, sub_index: int) -> int: + return self.qubit_register.get_index(variable_name, sub_index) + + def get_bit_index(self, variable_name: str, sub_index: int) -> int: + return self.bit_register.get_index(variable_name, sub_index) + + def get_qubit_variable_name(self, index: int) -> str: + return self.qubit_register.get_variable_name(index) + + def get_bit_variable_name(self, index: int) -> str: + return self.bit_register.get_variable_name(index) diff --git a/opensquirrel/reindexer/__init__.py b/opensquirrel/reindexer/__init__.py new file mode 100644 index 00000000..bd1322af --- /dev/null +++ b/opensquirrel/reindexer/__init__.py @@ -0,0 +1,3 @@ +from opensquirrel.reindexer.qubit_reindexer import _QubitReindexer, get_reindexed_circuit + +__all__ = ["_QubitReindexer", "get_reindexed_circuit"] diff --git a/opensquirrel/reindexer/qubit_reindexer.py b/opensquirrel/reindexer/qubit_reindexer.py new file mode 100644 index 00000000..31541b17 --- /dev/null +++ b/opensquirrel/reindexer/qubit_reindexer.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from collections.abc import Iterable +from typing import TYPE_CHECKING + +from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, Gate, IRVisitor, MatrixGate, Measure, Reset +from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager + +if TYPE_CHECKING: + from opensquirrel.circuit import Circuit + + +class _QubitReindexer(IRVisitor): + """ + Reindex a whole IR. + + Args: + qubit_indices: a list of qubit indices, e.g. [3, 1] + + Returns: + A new IR where the qubit indices are replaced by their positions in qubit indices. + E.g., for mapping = [3, 1]: + - Qubit(index=1) becomes Qubit(index=1), and + - Qubit(index=3) becomes Qubit(index=0). + """ + + def __init__(self, qubit_indices: list[int]) -> None: + self.qubit_indices = qubit_indices + + def visit_reset(self, reset: Reset) -> Reset: + qubit_to_reset = self.qubit_indices.index(reset.qubit.index) + return Reset(qubit=qubit_to_reset) + + def visit_measure(self, measure: Measure) -> Measure: + return Measure(qubit=self.qubit_indices.index(measure.qubit.index), bit=measure.bit, axis=measure.axis) + + def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: + return BlochSphereRotation( + qubit=self.qubit_indices.index(g.qubit.index), + angle=g.angle, + axis=g.axis, + phase=g.phase, + ) + + def visit_matrix_gate(self, g: MatrixGate) -> MatrixGate: + reindexed_operands = [self.qubit_indices.index(op.index) for op in g.operands] + return MatrixGate(matrix=g.matrix, operands=reindexed_operands) + + def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: + control_qubit = self.qubit_indices.index(controlled_gate.control_qubit.index) + target_gate = controlled_gate.target_gate.accept(self) + return ControlledGate(control_qubit=control_qubit, target_gate=target_gate) + + +def get_reindexed_circuit( + replacement_gates: Iterable[Gate], + qubit_indices: list[int], + bit_register_size: int = 0, +) -> Circuit: + from opensquirrel.circuit import Circuit + + qubit_reindexer = _QubitReindexer(qubit_indices) + qubit_register = QubitRegister(len(qubit_indices)) + bit_register = BitRegister(bit_register_size) + register_manager = RegisterManager(qubit_register, bit_register) + replacement_ir = IR() + for gate in replacement_gates: + gate_with_reindexed_qubits = gate.accept(qubit_reindexer) + replacement_ir.add_gate(gate_with_reindexed_qubits) + return Circuit(register_manager, replacement_ir) diff --git a/opensquirrel/utils/__init__.py b/opensquirrel/utils/__init__.py new file mode 100644 index 00000000..b159fe59 --- /dev/null +++ b/opensquirrel/utils/__init__.py @@ -0,0 +1,3 @@ +from opensquirrel.utils.matrix_expander import get_matrix + +__all__ = ["get_matrix"] diff --git a/opensquirrel/utils/check_passes/__init__.py b/opensquirrel/utils/check_passes/__init__.py new file mode 100644 index 00000000..625f7c22 --- /dev/null +++ b/opensquirrel/utils/check_passes/__init__.py @@ -0,0 +1,5 @@ +"""Ths subpackage contains compatibility checks for the different compilation passes.""" + +from opensquirrel.utils.check_passes.check_mapper import check_mapper + +__all__ = ["check_mapper"] diff --git a/opensquirrel/utils/check_passes/check_mapper.py b/opensquirrel/utils/check_passes/check_mapper.py new file mode 100644 index 00000000..81f96262 --- /dev/null +++ b/opensquirrel/utils/check_passes/check_mapper.py @@ -0,0 +1,46 @@ +"""This module contains checks for the ``Mapper`` pass.""" + +from __future__ import annotations + +from copy import deepcopy + +from opensquirrel.circuit import Circuit +from opensquirrel.ir import IR, Bit, BlochSphereRotation, Comment, ControlledGate, Measure +from opensquirrel.mapper.general_mapper import Mapper +from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager + + +def check_mapper(mapper: Mapper) -> None: + """Check if the `mapper` complies with the OpenSquirrel requirements. + + If an implementation of ``Mapper`` passes these checks it should be compatible with the ``Circuit.map`` method. + + Args: + mapper: Mapper to check. + """ + assert isinstance(mapper, Mapper) + + register_manager = RegisterManager(QubitRegister(10), BitRegister(10)) + ir = IR() + circuit = Circuit(register_manager, ir) + _check_scenario(circuit, mapper) + + ir = IR() + ir.add_comment(Comment("comment")) + ir.add_gate(BlochSphereRotation(42, (1, 0, 0), 1, 2)) + ir.add_gate(ControlledGate(42, BlochSphereRotation.identity(100))) + ir.add_measure(Measure(42, Bit(42), (0, 0, 1))) + Circuit(register_manager, ir) + _check_scenario(circuit, mapper) + + +def _check_scenario(circuit: Circuit, mapper: Mapper) -> None: + """Check if the given scenario can be mapped. + + Args: + circuit: Circuit containing the scenario to check against. + mapper: Mapper to use. + """ + ir_copy = deepcopy(circuit.ir) + circuit.map(mapper) + assert circuit.ir == ir_copy, "A Mapper pass should not change the IR" diff --git a/opensquirrel/utils/identity_filter.py b/opensquirrel/utils/identity_filter.py new file mode 100644 index 00000000..3120797f --- /dev/null +++ b/opensquirrel/utils/identity_filter.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from collections.abc import Iterable +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +def filter_out_identities(gates: Iterable[Gate]) -> list[Gate]: + return [gate for gate in gates if not gate.is_identity()] diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py new file mode 100644 index 00000000..40695f50 --- /dev/null +++ b/opensquirrel/utils/matrix_expander.py @@ -0,0 +1,232 @@ +from __future__ import annotations + +import cmath +import math +from collections.abc import Iterable +from typing import cast + +import numpy as np +from numpy.typing import NDArray + +from opensquirrel.ir import ( + Axis, + AxisLike, + BlochSphereRotation, + ControlledGate, + Gate, + IRVisitor, + MatrixGate, + Qubit, +) + + +def get_reduced_ket(ket: int, qubits: Iterable[Qubit]) -> int: + """ + Given a quantum ket represented by its corresponding base-10 integer, this computes the reduced ket + where only the given qubits appear, in order. + Roughly equivalent to the `pext` assembly instruction (bits extraction). + + Args: + ket: A quantum ket, represented by its corresponding non-negative integer. + By convention, qubit #0 corresponds to the least significant bit. + qubits: The indices of the qubits to extract. Order matters. + + Returns: + The non-negative integer corresponding to the reduced ket. + + Examples: + >>> get_reduced_ket(1, [Qubit(0)]) # 0b01 + 1 + >>> get_reduced_ket(1111, [Qubit(2)]) # 0b01 + 1 + >>> get_reduced_ket(1111, [Qubit(5)]) # 0b0 + 0 + >>> get_reduced_ket(1111, [Qubit(2), Qubit(5)]) # 0b01 + 1 + >>> get_reduced_ket(101, [Qubit(1), Qubit(0)]) # 0b10 + 2 + >>> get_reduced_ket(101, [Qubit(0), Qubit(1)]) # 0b01 + 1 + """ + reduced_ket = 0 + for i, qubit in enumerate(qubits): + qubit = Qubit(qubit) + reduced_ket |= ((ket & (1 << qubit.index)) >> qubit.index) << i + + return reduced_ket + + +def expand_ket(base_ket: int, reduced_ket: int, qubits: Iterable[Qubit]) -> int: + """ + Given a base quantum ket on n qubits and a reduced ket on a subset of those qubits, this computes the expanded ket + where the reduction qubits and the other qubits are set based on the reduced ket and the base ket, respectively. + Roughly equivalent to the `pdep` assembly instruction (bits deposit). + + Args: + base_ket: A quantum ket, represented by its corresponding non-negative integer. + By convention, qubit #0 corresponds to the least significant bit. + reduced_ket: A quantum ket, represented by its corresponding non-negative integer. + By convention, qubit #0 corresponds to the least significant bit. + qubits: The indices of the qubits to expand from the reduced ket. Order matters. + + Returns: + The non-negative integer corresponding to the expanded ket. + + Examples: + >>> expand_ket(0b00000, 0b0, [Qubit(5)]) # 0b000000 + 0 + >>> expand_ket(0b00000, 0b1, [Qubit(5)]) # 0b100000 + 32 + >>> expand_ket(0b00111, 0b0, [Qubit(5)]) # 0b000111 + 7 + >>> expand_ket(0b00111, 0b1, [Qubit(5)]) # 0b100111 + 39 + >>> expand_ket(0b0000, 0b000, [Qubit(1), Qubit(2), Qubit(3)]) # 0b0000 + 0 + >>> expand_ket(0b0000, 0b001, [Qubit(1), Qubit(2), Qubit(3)]) # 0b0010 + 2 + >>> expand_ket(0b0000, 0b011, [Qubit(1), Qubit(2), Qubit(3)]) # 0b0110 + 6 + >>> expand_ket(0b0000, 0b101, [Qubit(1), Qubit(2), Qubit(3)]) # 0b1010 + 10 + >>> expand_ket(0b0001, 0b101, [Qubit(1), Qubit(2), Qubit(3)]) # 0b1011 + 11 + """ + expanded_ket = base_ket + for i, qubit in enumerate(qubits): + qubit = Qubit(qubit) + expanded_ket &= ~(1 << qubit.index) # Erase bit. + expanded_ket |= ((reduced_ket & (1 << i)) >> i) << qubit.index # Set bit to value from reduced_ket. + + return expanded_ket + + +class MatrixExpander(IRVisitor): + def __init__(self, qubit_register_size: int) -> None: + self.qubit_register_size = qubit_register_size + + def visit_bloch_sphere_rotation(self, rot: BlochSphereRotation) -> NDArray[np.complex128]: + if rot.qubit.index >= self.qubit_register_size: + msg = "index out of range" + raise IndexError(msg) + + result = np.kron( + np.kron( + np.eye(1 << (self.qubit_register_size - rot.qubit.index - 1)), + can1(rot.axis, rot.angle, rot.phase), + ), + np.eye(1 << rot.qubit.index), + ) + if result.shape != (1 << self.qubit_register_size, 1 << self.qubit_register_size): + msg = "result has incorrect shape" + ValueError(msg) + return result + + def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: + if gate.control_qubit.index >= self.qubit_register_size: + msg = "index out of range" + raise IndexError(msg) + + expanded_matrix = gate.target_gate.accept(self) + for col_index, col in enumerate(expanded_matrix.T): + if col_index & (1 << gate.control_qubit.index) == 0: + col[:] = 0 + col[col_index] = 1 + return np.asarray(expanded_matrix, dtype=np.complex128) + + def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: + # The convention is to write gate matrices with operands reversed. + # For instance, the first operand of CNOT is the control qubit, and this is written as + # 1, 0, 0, 0 + # 0, 1, 0, 0 + # 0, 0, 0, 1 + # 0, 0, 1, 0 + # which corresponds to control being q[1] and target being q[0], + # since qubit #i corresponds to the i-th LEAST significant bit. + qubit_operands = list(reversed(gate.operands)) + + if any(q.index >= self.qubit_register_size for q in qubit_operands): + msg = "index out of range" + raise IndexError(msg) + + m = gate.matrix + + if m.shape != (1 << len(qubit_operands), 1 << len(qubit_operands)): + msg = ( + f"matrix has incorrect shape." + f"Expected {(1 << len(qubit_operands), 1 << len(qubit_operands))}, but received {m.shape}" + ) + raise ValueError(msg) + + expanded_matrix = np.zeros((1 << self.qubit_register_size, 1 << self.qubit_register_size), dtype=m.dtype) + + for expanded_matrix_column in range(expanded_matrix.shape[1]): + small_matrix_col = get_reduced_ket(expanded_matrix_column, qubit_operands) + + for small_matrix_row, value in enumerate(m[:, small_matrix_col]): + expanded_matrix_row = expand_ket(expanded_matrix_column, small_matrix_row, qubit_operands) + expanded_matrix[expanded_matrix_row][expanded_matrix_column] = value + + if expanded_matrix.shape != (1 << self.qubit_register_size, 1 << self.qubit_register_size): + msg = "expended matrix has incorrect shape" + raise ValueError(msg) + return expanded_matrix + + +X = np.array([[0, 1], [1, 0]]) +Y = np.array([[0, -1j], [1j, 0]]) +Z = np.array([[1, 0], [0, -1]]) + + +def can1(axis: AxisLike, angle: float, phase: float = 0) -> NDArray[np.complex128]: + nx, ny, nz = Axis(axis) + + result = cmath.rect(1, phase) * ( + math.cos(angle / 2) * np.identity(2) - 1j * math.sin(angle / 2) * (nx * X + ny * Y + nz * Z) + ) + + return np.asarray(result, dtype=np.complex128) + + +def get_matrix(gate: Gate, qubit_register_size: int) -> NDArray[np.complex128]: + """ + Compute the unitary matrix corresponding to the gate applied to those qubit operands, taken among any number of + qubits. This can be used for, e.g., + - testing, + - permuting the operands of multi-qubit gates, + - simulating a circuit (simulation in this way is inefficient for large numbers of qubits). + + Args: + gate: The gate, including the qubits on which it is operated on. + qubit_register_size: The size of the qubit register. + + Examples: + >>> X = lambda q: BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) + >>> get_matrix(X(Qubit(1)), 2).astype(int) # X q[1] + array([[0, 0, 1, 0], + [0, 0, 0, 1], + [1, 0, 0, 0], + [0, 1, 0, 0]]) + + >>> CNOT02 = ControlledGate(Qubit(0), X(Qubit(2))) + >>> get_matrix(CNOT02, 3).astype(int) # CNOT q[0], q[2] + array([[1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 1, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 1, 0, 0, 0, 0]]) + >>> get_matrix(ControlledGate(Qubit(1), X(Qubit(2))), 3).astype(int) # CNOT q[1], q[2] + array([[1, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0]]) + """ + expander = MatrixExpander(qubit_register_size) + return cast(NDArray[np.complex128], gate.accept(expander)) diff --git a/opensquirrel/writer/__init__.py b/opensquirrel/writer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py new file mode 100644 index 00000000..006b831b --- /dev/null +++ b/opensquirrel/writer/writer.py @@ -0,0 +1,90 @@ +import inspect +from typing import SupportsInt + +from opensquirrel.circuit import Circuit +from opensquirrel.ir import Bit, Comment, Float, Gate, Int, IRVisitor, Measure, Qubit, QubitLike, Reset +from opensquirrel.register_manager import RegisterManager + + +class _WriterImpl(IRVisitor): + # Precision used when writing out a float number + FLOAT_PRECISION = 8 + + def __init__(self, register_manager: RegisterManager) -> None: + self.register_manager = register_manager + qubit_register_size = self.register_manager.get_qubit_register_size() + qubit_register_name = self.register_manager.get_qubit_register_name() + bit_register_size = self.register_manager.get_bit_register_size() + bit_register_name = self.register_manager.get_bit_register_name() + self.output = "version 3.0\n\n{}\n{}\n".format( + f"qubit[{qubit_register_size}] {qubit_register_name}", + f"bit[{bit_register_size}] {bit_register_name}\n" if bit_register_size > 0 else "", + ) + + def visit_bit(self, bit: Bit) -> str: + bit_register_name = self.register_manager.get_bit_register_name() + return f"{bit_register_name}[{bit.index}]" + + def visit_qubit(self, qubit: Qubit) -> str: + qubit_register_name = self.register_manager.get_qubit_register_name() + return f"{qubit_register_name}[{qubit.index}]" + + def visit_int(self, i: SupportsInt) -> str: + i = Int(i) + return f"{i.value}" + + def visit_float(self, f: Float) -> str: + return f"{f.value:.{self.FLOAT_PRECISION}}" + + def visit_measure(self, measure: Measure) -> None: + if measure.is_abstract: + self.output += f"{measure.name}\n" + return + bit_argument = measure.arguments[1].accept(self) # type: ignore[index] + qubit_argument = measure.arguments[0].accept(self) # type: ignore[index] + self.output += f"{bit_argument} = {measure.name} {qubit_argument}\n" + + def visit_reset(self, reset: Reset) -> None: + if reset.is_abstract: + self.output += f"{reset.name}\n" + return + qubit_argument = reset.arguments[0].accept(self) # type: ignore[index] + self.output += f"{reset.name} {qubit_argument}\n" + + def visit_gate(self, gate: Gate) -> None: + gate_name = gate.name + gate_generator = [] + if gate.generator is not None: + gate_generator = list(inspect.signature(gate.generator).parameters.keys()) + qubit_function_keys = ["target", "control", "q"] + if gate.is_anonymous: + if "MatrixGate" in gate_name: + # In the case of a MatrixGate the newlines should be removed from the array + # such that the array is printed on a single line. + gate_name = gate_name.replace("\n", "") + self.output += f"{gate_name}\n" + return + + params = [] + qubit_args = [] + if gate.arguments is not None: + for arg in gate.arguments: + pos = gate.arguments.index(arg) + if gate_generator[pos] not in qubit_function_keys: + params.append(arg.accept(self)) + gate_name += f"({', '.join(params)})" + elif gate_generator[pos] in qubit_function_keys and isinstance(arg, QubitLike.__args__): # type: ignore + qubit_args.append(Qubit(arg).accept(self)) + + self.output += f"{gate_name} {', '.join(qubit_args)}\n" + + def visit_comment(self, comment: Comment) -> None: + self.output += f"\n/* {comment.str} */\n\n" + + +def circuit_to_string(circuit: Circuit) -> str: + writer_impl = _WriterImpl(circuit.register_manager) + + circuit.ir.accept(writer_impl) + + return writer_impl.output.rstrip() + "\n" # remove all trailing lines and leave only one diff --git a/parsing/GeneratedParsingCode/CQasm3.interp b/parsing/GeneratedParsingCode/CQasm3.interp deleted file mode 100644 index 04b2cfdd..00000000 --- a/parsing/GeneratedParsingCode/CQasm3.interp +++ /dev/null @@ -1,50 +0,0 @@ -token literal names: -null -';' -'\r\n' -'\n' -'3.0' -'qubit[' -']' -',' -'[' -':' -'-' -'version' -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -VERSION -ID -FLOAT -INT -WS -COMMENT -MULTILINE_COMMENT - -rule names: -stateSep -prog -qubitRegisterDeclaration -gateApplication -expr - - -atn: -[4, 1, 17, 79, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 1, 0, 4, 0, 12, 8, 0, 11, 0, 12, 0, 13, 1, 1, 3, 1, 17, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 26, 8, 1, 10, 1, 12, 1, 29, 9, 1, 1, 1, 3, 1, 32, 8, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 45, 8, 3, 10, 3, 12, 3, 48, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 59, 8, 4, 10, 4, 12, 4, 62, 9, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 77, 8, 4, 1, 4, 0, 0, 5, 0, 2, 4, 6, 8, 0, 1, 1, 0, 1, 3, 85, 0, 11, 1, 0, 0, 0, 2, 16, 1, 0, 0, 0, 4, 35, 1, 0, 0, 0, 6, 40, 1, 0, 0, 0, 8, 76, 1, 0, 0, 0, 10, 12, 7, 0, 0, 0, 11, 10, 1, 0, 0, 0, 12, 13, 1, 0, 0, 0, 13, 11, 1, 0, 0, 0, 13, 14, 1, 0, 0, 0, 14, 1, 1, 0, 0, 0, 15, 17, 3, 0, 0, 0, 16, 15, 1, 0, 0, 0, 16, 17, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 19, 5, 11, 0, 0, 19, 20, 5, 4, 0, 0, 20, 21, 3, 0, 0, 0, 21, 27, 3, 4, 2, 0, 22, 23, 3, 0, 0, 0, 23, 24, 3, 6, 3, 0, 24, 26, 1, 0, 0, 0, 25, 22, 1, 0, 0, 0, 26, 29, 1, 0, 0, 0, 27, 25, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 31, 1, 0, 0, 0, 29, 27, 1, 0, 0, 0, 30, 32, 3, 0, 0, 0, 31, 30, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 34, 5, 0, 0, 1, 34, 3, 1, 0, 0, 0, 35, 36, 5, 5, 0, 0, 36, 37, 5, 14, 0, 0, 37, 38, 5, 6, 0, 0, 38, 39, 5, 12, 0, 0, 39, 5, 1, 0, 0, 0, 40, 41, 5, 12, 0, 0, 41, 46, 3, 8, 4, 0, 42, 43, 5, 7, 0, 0, 43, 45, 3, 8, 4, 0, 44, 42, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 7, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 50, 5, 12, 0, 0, 50, 51, 5, 8, 0, 0, 51, 52, 5, 14, 0, 0, 52, 77, 5, 6, 0, 0, 53, 54, 5, 12, 0, 0, 54, 55, 5, 8, 0, 0, 55, 60, 5, 14, 0, 0, 56, 57, 5, 7, 0, 0, 57, 59, 5, 14, 0, 0, 58, 56, 1, 0, 0, 0, 59, 62, 1, 0, 0, 0, 60, 58, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 63, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 63, 77, 5, 6, 0, 0, 64, 65, 5, 12, 0, 0, 65, 66, 5, 8, 0, 0, 66, 67, 5, 14, 0, 0, 67, 68, 5, 9, 0, 0, 68, 69, 5, 14, 0, 0, 69, 77, 5, 6, 0, 0, 70, 77, 5, 14, 0, 0, 71, 72, 5, 10, 0, 0, 72, 77, 5, 14, 0, 0, 73, 77, 5, 13, 0, 0, 74, 75, 5, 10, 0, 0, 75, 77, 5, 13, 0, 0, 76, 49, 1, 0, 0, 0, 76, 53, 1, 0, 0, 0, 76, 64, 1, 0, 0, 0, 76, 70, 1, 0, 0, 0, 76, 71, 1, 0, 0, 0, 76, 73, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 9, 1, 0, 0, 0, 7, 13, 16, 27, 31, 46, 60, 76] \ No newline at end of file diff --git a/parsing/GeneratedParsingCode/CQasm3.tokens b/parsing/GeneratedParsingCode/CQasm3.tokens deleted file mode 100644 index 2da931a7..00000000 --- a/parsing/GeneratedParsingCode/CQasm3.tokens +++ /dev/null @@ -1,28 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -VERSION=11 -ID=12 -FLOAT=13 -INT=14 -WS=15 -COMMENT=16 -MULTILINE_COMMENT=17 -';'=1 -'\r\n'=2 -'\n'=3 -'3.0'=4 -'qubit['=5 -']'=6 -','=7 -'['=8 -':'=9 -'-'=10 -'version'=11 diff --git a/parsing/GeneratedParsingCode/CQasm3Lexer.interp b/parsing/GeneratedParsingCode/CQasm3Lexer.interp deleted file mode 100644 index 452c55b8..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Lexer.interp +++ /dev/null @@ -1,68 +0,0 @@ -token literal names: -null -';' -'\r\n' -'\n' -'3.0' -'qubit[' -']' -',' -'[' -':' -'-' -'version' -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -VERSION -ID -FLOAT -INT -WS -COMMENT -MULTILINE_COMMENT - -rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -T__6 -T__7 -T__8 -T__9 -VERSION -ID -FLOAT -INT -WS -COMMENT -MULTILINE_COMMENT - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[4, 0, 17, 127, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 74, 8, 11, 10, 11, 12, 11, 77, 9, 11, 1, 12, 4, 12, 80, 8, 12, 11, 12, 12, 12, 81, 1, 12, 1, 12, 5, 12, 86, 8, 12, 10, 12, 12, 12, 89, 9, 12, 1, 13, 4, 13, 92, 8, 13, 11, 13, 12, 13, 93, 1, 14, 4, 14, 97, 8, 14, 11, 14, 12, 14, 98, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 107, 8, 15, 10, 15, 12, 15, 110, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 118, 8, 16, 10, 16, 12, 16, 121, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 119, 0, 17, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 1, 0, 6, 2, 0, 65, 90, 97, 122, 3, 0, 48, 57, 65, 90, 97, 122, 1, 0, 48, 57, 1, 0, 46, 46, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 133, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 1, 35, 1, 0, 0, 0, 3, 37, 1, 0, 0, 0, 5, 40, 1, 0, 0, 0, 7, 42, 1, 0, 0, 0, 9, 46, 1, 0, 0, 0, 11, 53, 1, 0, 0, 0, 13, 55, 1, 0, 0, 0, 15, 57, 1, 0, 0, 0, 17, 59, 1, 0, 0, 0, 19, 61, 1, 0, 0, 0, 21, 63, 1, 0, 0, 0, 23, 71, 1, 0, 0, 0, 25, 79, 1, 0, 0, 0, 27, 91, 1, 0, 0, 0, 29, 96, 1, 0, 0, 0, 31, 102, 1, 0, 0, 0, 33, 113, 1, 0, 0, 0, 35, 36, 5, 59, 0, 0, 36, 2, 1, 0, 0, 0, 37, 38, 5, 13, 0, 0, 38, 39, 5, 10, 0, 0, 39, 4, 1, 0, 0, 0, 40, 41, 5, 10, 0, 0, 41, 6, 1, 0, 0, 0, 42, 43, 5, 51, 0, 0, 43, 44, 5, 46, 0, 0, 44, 45, 5, 48, 0, 0, 45, 8, 1, 0, 0, 0, 46, 47, 5, 113, 0, 0, 47, 48, 5, 117, 0, 0, 48, 49, 5, 98, 0, 0, 49, 50, 5, 105, 0, 0, 50, 51, 5, 116, 0, 0, 51, 52, 5, 91, 0, 0, 52, 10, 1, 0, 0, 0, 53, 54, 5, 93, 0, 0, 54, 12, 1, 0, 0, 0, 55, 56, 5, 44, 0, 0, 56, 14, 1, 0, 0, 0, 57, 58, 5, 91, 0, 0, 58, 16, 1, 0, 0, 0, 59, 60, 5, 58, 0, 0, 60, 18, 1, 0, 0, 0, 61, 62, 5, 45, 0, 0, 62, 20, 1, 0, 0, 0, 63, 64, 5, 118, 0, 0, 64, 65, 5, 101, 0, 0, 65, 66, 5, 114, 0, 0, 66, 67, 5, 115, 0, 0, 67, 68, 5, 105, 0, 0, 68, 69, 5, 111, 0, 0, 69, 70, 5, 110, 0, 0, 70, 22, 1, 0, 0, 0, 71, 75, 7, 0, 0, 0, 72, 74, 7, 1, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 24, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 7, 2, 0, 0, 79, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 87, 7, 3, 0, 0, 84, 86, 7, 2, 0, 0, 85, 84, 1, 0, 0, 0, 86, 89, 1, 0, 0, 0, 87, 85, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 26, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 90, 92, 7, 2, 0, 0, 91, 90, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 28, 1, 0, 0, 0, 95, 97, 7, 4, 0, 0, 96, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 101, 6, 14, 0, 0, 101, 30, 1, 0, 0, 0, 102, 103, 5, 47, 0, 0, 103, 104, 5, 47, 0, 0, 104, 108, 1, 0, 0, 0, 105, 107, 8, 5, 0, 0, 106, 105, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 6, 15, 0, 0, 112, 32, 1, 0, 0, 0, 113, 114, 5, 47, 0, 0, 114, 115, 5, 42, 0, 0, 115, 119, 1, 0, 0, 0, 116, 118, 9, 0, 0, 0, 117, 116, 1, 0, 0, 0, 118, 121, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 120, 122, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 122, 123, 5, 42, 0, 0, 123, 124, 5, 47, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 6, 16, 0, 0, 126, 34, 1, 0, 0, 0, 8, 0, 75, 81, 87, 93, 98, 108, 119, 1, 6, 0, 0] \ No newline at end of file diff --git a/parsing/GeneratedParsingCode/CQasm3Lexer.py b/parsing/GeneratedParsingCode/CQasm3Lexer.py deleted file mode 100644 index 8daa3e54..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Lexer.py +++ /dev/null @@ -1,1248 +0,0 @@ -# Generated from CQasm3.g4 by ANTLR 4.13.1 -import sys -from io import StringIO - -from antlr4 import * - -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO - - -def serializedATN(): - return [ - 4, - 0, - 17, - 127, - 6, - -1, - 2, - 0, - 7, - 0, - 2, - 1, - 7, - 1, - 2, - 2, - 7, - 2, - 2, - 3, - 7, - 3, - 2, - 4, - 7, - 4, - 2, - 5, - 7, - 5, - 2, - 6, - 7, - 6, - 2, - 7, - 7, - 7, - 2, - 8, - 7, - 8, - 2, - 9, - 7, - 9, - 2, - 10, - 7, - 10, - 2, - 11, - 7, - 11, - 2, - 12, - 7, - 12, - 2, - 13, - 7, - 13, - 2, - 14, - 7, - 14, - 2, - 15, - 7, - 15, - 2, - 16, - 7, - 16, - 1, - 0, - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 5, - 1, - 5, - 1, - 6, - 1, - 6, - 1, - 7, - 1, - 7, - 1, - 8, - 1, - 8, - 1, - 9, - 1, - 9, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 11, - 1, - 11, - 5, - 11, - 74, - 8, - 11, - 10, - 11, - 12, - 11, - 77, - 9, - 11, - 1, - 12, - 4, - 12, - 80, - 8, - 12, - 11, - 12, - 12, - 12, - 81, - 1, - 12, - 1, - 12, - 5, - 12, - 86, - 8, - 12, - 10, - 12, - 12, - 12, - 89, - 9, - 12, - 1, - 13, - 4, - 13, - 92, - 8, - 13, - 11, - 13, - 12, - 13, - 93, - 1, - 14, - 4, - 14, - 97, - 8, - 14, - 11, - 14, - 12, - 14, - 98, - 1, - 14, - 1, - 14, - 1, - 15, - 1, - 15, - 1, - 15, - 1, - 15, - 5, - 15, - 107, - 8, - 15, - 10, - 15, - 12, - 15, - 110, - 9, - 15, - 1, - 15, - 1, - 15, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 5, - 16, - 118, - 8, - 16, - 10, - 16, - 12, - 16, - 121, - 9, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 119, - 0, - 17, - 1, - 1, - 3, - 2, - 5, - 3, - 7, - 4, - 9, - 5, - 11, - 6, - 13, - 7, - 15, - 8, - 17, - 9, - 19, - 10, - 21, - 11, - 23, - 12, - 25, - 13, - 27, - 14, - 29, - 15, - 31, - 16, - 33, - 17, - 1, - 0, - 6, - 2, - 0, - 65, - 90, - 97, - 122, - 3, - 0, - 48, - 57, - 65, - 90, - 97, - 122, - 1, - 0, - 48, - 57, - 1, - 0, - 46, - 46, - 2, - 0, - 9, - 9, - 32, - 32, - 2, - 0, - 10, - 10, - 13, - 13, - 133, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 3, - 1, - 0, - 0, - 0, - 0, - 5, - 1, - 0, - 0, - 0, - 0, - 7, - 1, - 0, - 0, - 0, - 0, - 9, - 1, - 0, - 0, - 0, - 0, - 11, - 1, - 0, - 0, - 0, - 0, - 13, - 1, - 0, - 0, - 0, - 0, - 15, - 1, - 0, - 0, - 0, - 0, - 17, - 1, - 0, - 0, - 0, - 0, - 19, - 1, - 0, - 0, - 0, - 0, - 21, - 1, - 0, - 0, - 0, - 0, - 23, - 1, - 0, - 0, - 0, - 0, - 25, - 1, - 0, - 0, - 0, - 0, - 27, - 1, - 0, - 0, - 0, - 0, - 29, - 1, - 0, - 0, - 0, - 0, - 31, - 1, - 0, - 0, - 0, - 0, - 33, - 1, - 0, - 0, - 0, - 1, - 35, - 1, - 0, - 0, - 0, - 3, - 37, - 1, - 0, - 0, - 0, - 5, - 40, - 1, - 0, - 0, - 0, - 7, - 42, - 1, - 0, - 0, - 0, - 9, - 46, - 1, - 0, - 0, - 0, - 11, - 53, - 1, - 0, - 0, - 0, - 13, - 55, - 1, - 0, - 0, - 0, - 15, - 57, - 1, - 0, - 0, - 0, - 17, - 59, - 1, - 0, - 0, - 0, - 19, - 61, - 1, - 0, - 0, - 0, - 21, - 63, - 1, - 0, - 0, - 0, - 23, - 71, - 1, - 0, - 0, - 0, - 25, - 79, - 1, - 0, - 0, - 0, - 27, - 91, - 1, - 0, - 0, - 0, - 29, - 96, - 1, - 0, - 0, - 0, - 31, - 102, - 1, - 0, - 0, - 0, - 33, - 113, - 1, - 0, - 0, - 0, - 35, - 36, - 5, - 59, - 0, - 0, - 36, - 2, - 1, - 0, - 0, - 0, - 37, - 38, - 5, - 13, - 0, - 0, - 38, - 39, - 5, - 10, - 0, - 0, - 39, - 4, - 1, - 0, - 0, - 0, - 40, - 41, - 5, - 10, - 0, - 0, - 41, - 6, - 1, - 0, - 0, - 0, - 42, - 43, - 5, - 51, - 0, - 0, - 43, - 44, - 5, - 46, - 0, - 0, - 44, - 45, - 5, - 48, - 0, - 0, - 45, - 8, - 1, - 0, - 0, - 0, - 46, - 47, - 5, - 113, - 0, - 0, - 47, - 48, - 5, - 117, - 0, - 0, - 48, - 49, - 5, - 98, - 0, - 0, - 49, - 50, - 5, - 105, - 0, - 0, - 50, - 51, - 5, - 116, - 0, - 0, - 51, - 52, - 5, - 91, - 0, - 0, - 52, - 10, - 1, - 0, - 0, - 0, - 53, - 54, - 5, - 93, - 0, - 0, - 54, - 12, - 1, - 0, - 0, - 0, - 55, - 56, - 5, - 44, - 0, - 0, - 56, - 14, - 1, - 0, - 0, - 0, - 57, - 58, - 5, - 91, - 0, - 0, - 58, - 16, - 1, - 0, - 0, - 0, - 59, - 60, - 5, - 58, - 0, - 0, - 60, - 18, - 1, - 0, - 0, - 0, - 61, - 62, - 5, - 45, - 0, - 0, - 62, - 20, - 1, - 0, - 0, - 0, - 63, - 64, - 5, - 118, - 0, - 0, - 64, - 65, - 5, - 101, - 0, - 0, - 65, - 66, - 5, - 114, - 0, - 0, - 66, - 67, - 5, - 115, - 0, - 0, - 67, - 68, - 5, - 105, - 0, - 0, - 68, - 69, - 5, - 111, - 0, - 0, - 69, - 70, - 5, - 110, - 0, - 0, - 70, - 22, - 1, - 0, - 0, - 0, - 71, - 75, - 7, - 0, - 0, - 0, - 72, - 74, - 7, - 1, - 0, - 0, - 73, - 72, - 1, - 0, - 0, - 0, - 74, - 77, - 1, - 0, - 0, - 0, - 75, - 73, - 1, - 0, - 0, - 0, - 75, - 76, - 1, - 0, - 0, - 0, - 76, - 24, - 1, - 0, - 0, - 0, - 77, - 75, - 1, - 0, - 0, - 0, - 78, - 80, - 7, - 2, - 0, - 0, - 79, - 78, - 1, - 0, - 0, - 0, - 80, - 81, - 1, - 0, - 0, - 0, - 81, - 79, - 1, - 0, - 0, - 0, - 81, - 82, - 1, - 0, - 0, - 0, - 82, - 83, - 1, - 0, - 0, - 0, - 83, - 87, - 7, - 3, - 0, - 0, - 84, - 86, - 7, - 2, - 0, - 0, - 85, - 84, - 1, - 0, - 0, - 0, - 86, - 89, - 1, - 0, - 0, - 0, - 87, - 85, - 1, - 0, - 0, - 0, - 87, - 88, - 1, - 0, - 0, - 0, - 88, - 26, - 1, - 0, - 0, - 0, - 89, - 87, - 1, - 0, - 0, - 0, - 90, - 92, - 7, - 2, - 0, - 0, - 91, - 90, - 1, - 0, - 0, - 0, - 92, - 93, - 1, - 0, - 0, - 0, - 93, - 91, - 1, - 0, - 0, - 0, - 93, - 94, - 1, - 0, - 0, - 0, - 94, - 28, - 1, - 0, - 0, - 0, - 95, - 97, - 7, - 4, - 0, - 0, - 96, - 95, - 1, - 0, - 0, - 0, - 97, - 98, - 1, - 0, - 0, - 0, - 98, - 96, - 1, - 0, - 0, - 0, - 98, - 99, - 1, - 0, - 0, - 0, - 99, - 100, - 1, - 0, - 0, - 0, - 100, - 101, - 6, - 14, - 0, - 0, - 101, - 30, - 1, - 0, - 0, - 0, - 102, - 103, - 5, - 47, - 0, - 0, - 103, - 104, - 5, - 47, - 0, - 0, - 104, - 108, - 1, - 0, - 0, - 0, - 105, - 107, - 8, - 5, - 0, - 0, - 106, - 105, - 1, - 0, - 0, - 0, - 107, - 110, - 1, - 0, - 0, - 0, - 108, - 106, - 1, - 0, - 0, - 0, - 108, - 109, - 1, - 0, - 0, - 0, - 109, - 111, - 1, - 0, - 0, - 0, - 110, - 108, - 1, - 0, - 0, - 0, - 111, - 112, - 6, - 15, - 0, - 0, - 112, - 32, - 1, - 0, - 0, - 0, - 113, - 114, - 5, - 47, - 0, - 0, - 114, - 115, - 5, - 42, - 0, - 0, - 115, - 119, - 1, - 0, - 0, - 0, - 116, - 118, - 9, - 0, - 0, - 0, - 117, - 116, - 1, - 0, - 0, - 0, - 118, - 121, - 1, - 0, - 0, - 0, - 119, - 120, - 1, - 0, - 0, - 0, - 119, - 117, - 1, - 0, - 0, - 0, - 120, - 122, - 1, - 0, - 0, - 0, - 121, - 119, - 1, - 0, - 0, - 0, - 122, - 123, - 5, - 42, - 0, - 0, - 123, - 124, - 5, - 47, - 0, - 0, - 124, - 125, - 1, - 0, - 0, - 0, - 125, - 126, - 6, - 16, - 0, - 0, - 126, - 34, - 1, - 0, - 0, - 0, - 8, - 0, - 75, - 81, - 87, - 93, - 98, - 108, - 119, - 1, - 6, - 0, - 0, - ] - - -class CQasm3Lexer(Lexer): - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] - - T__0 = 1 - T__1 = 2 - T__2 = 3 - T__3 = 4 - T__4 = 5 - T__5 = 6 - T__6 = 7 - T__7 = 8 - T__8 = 9 - T__9 = 10 - VERSION = 11 - ID = 12 - FLOAT = 13 - INT = 14 - WS = 15 - COMMENT = 16 - MULTILINE_COMMENT = 17 - - channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] - - modeNames = ["DEFAULT_MODE"] - - literalNames = [ - "", - "';'", - "'\\r\\n'", - "'\\n'", - "'3.0'", - "'qubit['", - "']'", - "','", - "'['", - "':'", - "'-'", - "'version'", - ] - - symbolicNames = ["", "VERSION", "ID", "FLOAT", "INT", "WS", "COMMENT", "MULTILINE_COMMENT"] - - ruleNames = [ - "T__0", - "T__1", - "T__2", - "T__3", - "T__4", - "T__5", - "T__6", - "T__7", - "T__8", - "T__9", - "VERSION", - "ID", - "FLOAT", - "INT", - "WS", - "COMMENT", - "MULTILINE_COMMENT", - ] - - grammarFileName = "CQasm3.g4" - - def __init__(self, input=None, output: TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.13.1") - self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) - self._actions = None - self._predicates = None diff --git a/parsing/GeneratedParsingCode/CQasm3Lexer.tokens b/parsing/GeneratedParsingCode/CQasm3Lexer.tokens deleted file mode 100644 index 2da931a7..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Lexer.tokens +++ /dev/null @@ -1,28 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -VERSION=11 -ID=12 -FLOAT=13 -INT=14 -WS=15 -COMMENT=16 -MULTILINE_COMMENT=17 -';'=1 -'\r\n'=2 -'\n'=3 -'3.0'=4 -'qubit['=5 -']'=6 -','=7 -'['=8 -':'=9 -'-'=10 -'version'=11 diff --git a/parsing/GeneratedParsingCode/CQasm3Listener.py b/parsing/GeneratedParsingCode/CQasm3Listener.py deleted file mode 100644 index 83feefbd..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Listener.py +++ /dev/null @@ -1,101 +0,0 @@ -# Generated from CQasm3.g4 by ANTLR 4.13.1 -from antlr4 import * - -if "." in __name__: - from .CQasm3Parser import CQasm3Parser -else: - from CQasm3Parser import CQasm3Parser - - -# This class defines a complete listener for a parse tree produced by CQasm3Parser. -class CQasm3Listener(ParseTreeListener): - # Enter a parse tree produced by CQasm3Parser#stateSep. - def enterStateSep(self, ctx: CQasm3Parser.StateSepContext): - pass - - # Exit a parse tree produced by CQasm3Parser#stateSep. - def exitStateSep(self, ctx: CQasm3Parser.StateSepContext): - pass - - # Enter a parse tree produced by CQasm3Parser#prog. - def enterProg(self, ctx: CQasm3Parser.ProgContext): - pass - - # Exit a parse tree produced by CQasm3Parser#prog. - def exitProg(self, ctx: CQasm3Parser.ProgContext): - pass - - # Enter a parse tree produced by CQasm3Parser#qubitRegisterDeclaration. - def enterQubitRegisterDeclaration(self, ctx: CQasm3Parser.QubitRegisterDeclarationContext): - pass - - # Exit a parse tree produced by CQasm3Parser#qubitRegisterDeclaration. - def exitQubitRegisterDeclaration(self, ctx: CQasm3Parser.QubitRegisterDeclarationContext): - pass - - # Enter a parse tree produced by CQasm3Parser#gateApplication. - def enterGateApplication(self, ctx: CQasm3Parser.GateApplicationContext): - pass - - # Exit a parse tree produced by CQasm3Parser#gateApplication. - def exitGateApplication(self, ctx: CQasm3Parser.GateApplicationContext): - pass - - # Enter a parse tree produced by CQasm3Parser#Qubit. - def enterQubit(self, ctx: CQasm3Parser.QubitContext): - pass - - # Exit a parse tree produced by CQasm3Parser#Qubit. - def exitQubit(self, ctx: CQasm3Parser.QubitContext): - pass - - # Enter a parse tree produced by CQasm3Parser#Qubits. - def enterQubits(self, ctx: CQasm3Parser.QubitsContext): - pass - - # Exit a parse tree produced by CQasm3Parser#Qubits. - def exitQubits(self, ctx: CQasm3Parser.QubitsContext): - pass - - # Enter a parse tree produced by CQasm3Parser#QubitRange. - def enterQubitRange(self, ctx: CQasm3Parser.QubitRangeContext): - pass - - # Exit a parse tree produced by CQasm3Parser#QubitRange. - def exitQubitRange(self, ctx: CQasm3Parser.QubitRangeContext): - pass - - # Enter a parse tree produced by CQasm3Parser#IntLiteral. - def enterIntLiteral(self, ctx: CQasm3Parser.IntLiteralContext): - pass - - # Exit a parse tree produced by CQasm3Parser#IntLiteral. - def exitIntLiteral(self, ctx: CQasm3Parser.IntLiteralContext): - pass - - # Enter a parse tree produced by CQasm3Parser#NegatedIntLiteral. - def enterNegatedIntLiteral(self, ctx: CQasm3Parser.NegatedIntLiteralContext): - pass - - # Exit a parse tree produced by CQasm3Parser#NegatedIntLiteral. - def exitNegatedIntLiteral(self, ctx: CQasm3Parser.NegatedIntLiteralContext): - pass - - # Enter a parse tree produced by CQasm3Parser#FloatLiteral. - def enterFloatLiteral(self, ctx: CQasm3Parser.FloatLiteralContext): - pass - - # Exit a parse tree produced by CQasm3Parser#FloatLiteral. - def exitFloatLiteral(self, ctx: CQasm3Parser.FloatLiteralContext): - pass - - # Enter a parse tree produced by CQasm3Parser#NegatedFloatLiteral. - def enterNegatedFloatLiteral(self, ctx: CQasm3Parser.NegatedFloatLiteralContext): - pass - - # Exit a parse tree produced by CQasm3Parser#NegatedFloatLiteral. - def exitNegatedFloatLiteral(self, ctx: CQasm3Parser.NegatedFloatLiteralContext): - pass - - -del CQasm3Parser diff --git a/parsing/GeneratedParsingCode/CQasm3Parser.py b/parsing/GeneratedParsingCode/CQasm3Parser.py deleted file mode 100644 index 508de799..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Parser.py +++ /dev/null @@ -1,1351 +0,0 @@ -# Generated from CQasm3.g4 by ANTLR 4.13.1 -# encoding: utf-8 -import sys -from io import StringIO - -from antlr4 import * - -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO - - -def serializedATN(): - return [ - 4, - 1, - 17, - 79, - 2, - 0, - 7, - 0, - 2, - 1, - 7, - 1, - 2, - 2, - 7, - 2, - 2, - 3, - 7, - 3, - 2, - 4, - 7, - 4, - 1, - 0, - 4, - 0, - 12, - 8, - 0, - 11, - 0, - 12, - 0, - 13, - 1, - 1, - 3, - 1, - 17, - 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 5, - 1, - 26, - 8, - 1, - 10, - 1, - 12, - 1, - 29, - 9, - 1, - 1, - 1, - 3, - 1, - 32, - 8, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 5, - 3, - 45, - 8, - 3, - 10, - 3, - 12, - 3, - 48, - 9, - 3, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 5, - 4, - 59, - 8, - 4, - 10, - 4, - 12, - 4, - 62, - 9, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 3, - 4, - 77, - 8, - 4, - 1, - 4, - 0, - 0, - 5, - 0, - 2, - 4, - 6, - 8, - 0, - 1, - 1, - 0, - 1, - 3, - 85, - 0, - 11, - 1, - 0, - 0, - 0, - 2, - 16, - 1, - 0, - 0, - 0, - 4, - 35, - 1, - 0, - 0, - 0, - 6, - 40, - 1, - 0, - 0, - 0, - 8, - 76, - 1, - 0, - 0, - 0, - 10, - 12, - 7, - 0, - 0, - 0, - 11, - 10, - 1, - 0, - 0, - 0, - 12, - 13, - 1, - 0, - 0, - 0, - 13, - 11, - 1, - 0, - 0, - 0, - 13, - 14, - 1, - 0, - 0, - 0, - 14, - 1, - 1, - 0, - 0, - 0, - 15, - 17, - 3, - 0, - 0, - 0, - 16, - 15, - 1, - 0, - 0, - 0, - 16, - 17, - 1, - 0, - 0, - 0, - 17, - 18, - 1, - 0, - 0, - 0, - 18, - 19, - 5, - 11, - 0, - 0, - 19, - 20, - 5, - 4, - 0, - 0, - 20, - 21, - 3, - 0, - 0, - 0, - 21, - 27, - 3, - 4, - 2, - 0, - 22, - 23, - 3, - 0, - 0, - 0, - 23, - 24, - 3, - 6, - 3, - 0, - 24, - 26, - 1, - 0, - 0, - 0, - 25, - 22, - 1, - 0, - 0, - 0, - 26, - 29, - 1, - 0, - 0, - 0, - 27, - 25, - 1, - 0, - 0, - 0, - 27, - 28, - 1, - 0, - 0, - 0, - 28, - 31, - 1, - 0, - 0, - 0, - 29, - 27, - 1, - 0, - 0, - 0, - 30, - 32, - 3, - 0, - 0, - 0, - 31, - 30, - 1, - 0, - 0, - 0, - 31, - 32, - 1, - 0, - 0, - 0, - 32, - 33, - 1, - 0, - 0, - 0, - 33, - 34, - 5, - 0, - 0, - 1, - 34, - 3, - 1, - 0, - 0, - 0, - 35, - 36, - 5, - 5, - 0, - 0, - 36, - 37, - 5, - 14, - 0, - 0, - 37, - 38, - 5, - 6, - 0, - 0, - 38, - 39, - 5, - 12, - 0, - 0, - 39, - 5, - 1, - 0, - 0, - 0, - 40, - 41, - 5, - 12, - 0, - 0, - 41, - 46, - 3, - 8, - 4, - 0, - 42, - 43, - 5, - 7, - 0, - 0, - 43, - 45, - 3, - 8, - 4, - 0, - 44, - 42, - 1, - 0, - 0, - 0, - 45, - 48, - 1, - 0, - 0, - 0, - 46, - 44, - 1, - 0, - 0, - 0, - 46, - 47, - 1, - 0, - 0, - 0, - 47, - 7, - 1, - 0, - 0, - 0, - 48, - 46, - 1, - 0, - 0, - 0, - 49, - 50, - 5, - 12, - 0, - 0, - 50, - 51, - 5, - 8, - 0, - 0, - 51, - 52, - 5, - 14, - 0, - 0, - 52, - 77, - 5, - 6, - 0, - 0, - 53, - 54, - 5, - 12, - 0, - 0, - 54, - 55, - 5, - 8, - 0, - 0, - 55, - 60, - 5, - 14, - 0, - 0, - 56, - 57, - 5, - 7, - 0, - 0, - 57, - 59, - 5, - 14, - 0, - 0, - 58, - 56, - 1, - 0, - 0, - 0, - 59, - 62, - 1, - 0, - 0, - 0, - 60, - 58, - 1, - 0, - 0, - 0, - 60, - 61, - 1, - 0, - 0, - 0, - 61, - 63, - 1, - 0, - 0, - 0, - 62, - 60, - 1, - 0, - 0, - 0, - 63, - 77, - 5, - 6, - 0, - 0, - 64, - 65, - 5, - 12, - 0, - 0, - 65, - 66, - 5, - 8, - 0, - 0, - 66, - 67, - 5, - 14, - 0, - 0, - 67, - 68, - 5, - 9, - 0, - 0, - 68, - 69, - 5, - 14, - 0, - 0, - 69, - 77, - 5, - 6, - 0, - 0, - 70, - 77, - 5, - 14, - 0, - 0, - 71, - 72, - 5, - 10, - 0, - 0, - 72, - 77, - 5, - 14, - 0, - 0, - 73, - 77, - 5, - 13, - 0, - 0, - 74, - 75, - 5, - 10, - 0, - 0, - 75, - 77, - 5, - 13, - 0, - 0, - 76, - 49, - 1, - 0, - 0, - 0, - 76, - 53, - 1, - 0, - 0, - 0, - 76, - 64, - 1, - 0, - 0, - 0, - 76, - 70, - 1, - 0, - 0, - 0, - 76, - 71, - 1, - 0, - 0, - 0, - 76, - 73, - 1, - 0, - 0, - 0, - 76, - 74, - 1, - 0, - 0, - 0, - 77, - 9, - 1, - 0, - 0, - 0, - 7, - 13, - 16, - 27, - 31, - 46, - 60, - 76, - ] - - -class CQasm3Parser(Parser): - grammarFileName = "CQasm3.g4" - - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] - - sharedContextCache = PredictionContextCache() - - literalNames = [ - "", - "';'", - "'\\r\\n'", - "'\\n'", - "'3.0'", - "'qubit['", - "']'", - "','", - "'['", - "':'", - "'-'", - "'version'", - ] - - symbolicNames = [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "VERSION", - "ID", - "FLOAT", - "INT", - "WS", - "COMMENT", - "MULTILINE_COMMENT", - ] - - RULE_stateSep = 0 - RULE_prog = 1 - RULE_qubitRegisterDeclaration = 2 - RULE_gateApplication = 3 - RULE_expr = 4 - - ruleNames = ["stateSep", "prog", "qubitRegisterDeclaration", "gateApplication", "expr"] - - EOF = Token.EOF - T__0 = 1 - T__1 = 2 - T__2 = 3 - T__3 = 4 - T__4 = 5 - T__5 = 6 - T__6 = 7 - T__7 = 8 - T__8 = 9 - T__9 = 10 - VERSION = 11 - ID = 12 - FLOAT = 13 - INT = 14 - WS = 15 - COMMENT = 16 - MULTILINE_COMMENT = 17 - - def __init__(self, input: TokenStream, output: TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.13.1") - self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) - self._predicates = None - - class StateSepContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return CQasm3Parser.RULE_stateSep - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterStateSep"): - listener.enterStateSep(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitStateSep"): - listener.exitStateSep(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitStateSep"): - return visitor.visitStateSep(self) - else: - return visitor.visitChildren(self) - - def stateSep(self): - localctx = CQasm3Parser.StateSepContext(self, self._ctx, self.state) - self.enterRule(localctx, 0, self.RULE_stateSep) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 11 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 10 - _la = self._input.LA(1) - if not ((((_la) & ~0x3F) == 0 and ((1 << _la) & 14) != 0)): - self._errHandler.recoverInline(self) - else: - self._errHandler.reportMatch(self) - self.consume() - self.state = 13 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not ((((_la) & ~0x3F) == 0 and ((1 << _la) & 14) != 0)): - break - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ProgContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def VERSION(self): - return self.getToken(CQasm3Parser.VERSION, 0) - - def stateSep(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(CQasm3Parser.StateSepContext) - else: - return self.getTypedRuleContext(CQasm3Parser.StateSepContext, i) - - def qubitRegisterDeclaration(self): - return self.getTypedRuleContext(CQasm3Parser.QubitRegisterDeclarationContext, 0) - - def EOF(self): - return self.getToken(CQasm3Parser.EOF, 0) - - def gateApplication(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(CQasm3Parser.GateApplicationContext) - else: - return self.getTypedRuleContext(CQasm3Parser.GateApplicationContext, i) - - def getRuleIndex(self): - return CQasm3Parser.RULE_prog - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterProg"): - listener.enterProg(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitProg"): - listener.exitProg(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitProg"): - return visitor.visitProg(self) - else: - return visitor.visitChildren(self) - - def prog(self): - localctx = CQasm3Parser.ProgContext(self, self._ctx, self.state) - self.enterRule(localctx, 2, self.RULE_prog) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 16 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((_la) & ~0x3F) == 0 and ((1 << _la) & 14) != 0: - self.state = 15 - self.stateSep() - - self.state = 18 - self.match(CQasm3Parser.VERSION) - self.state = 19 - self.match(CQasm3Parser.T__3) - self.state = 20 - self.stateSep() - self.state = 21 - self.qubitRegisterDeclaration() - self.state = 27 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 2, self._ctx) - while _alt != 2 and _alt != ATN.INVALID_ALT_NUMBER: - if _alt == 1: - self.state = 22 - self.stateSep() - self.state = 23 - self.gateApplication() - self.state = 29 - self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input, 2, self._ctx) - - self.state = 31 - self._errHandler.sync(self) - _la = self._input.LA(1) - if ((_la) & ~0x3F) == 0 and ((1 << _la) & 14) != 0: - self.state = 30 - self.stateSep() - - self.state = 33 - self.match(CQasm3Parser.EOF) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class QubitRegisterDeclarationContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def INT(self): - return self.getToken(CQasm3Parser.INT, 0) - - def ID(self): - return self.getToken(CQasm3Parser.ID, 0) - - def getRuleIndex(self): - return CQasm3Parser.RULE_qubitRegisterDeclaration - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterQubitRegisterDeclaration"): - listener.enterQubitRegisterDeclaration(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitQubitRegisterDeclaration"): - listener.exitQubitRegisterDeclaration(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitQubitRegisterDeclaration"): - return visitor.visitQubitRegisterDeclaration(self) - else: - return visitor.visitChildren(self) - - def qubitRegisterDeclaration(self): - localctx = CQasm3Parser.QubitRegisterDeclarationContext(self, self._ctx, self.state) - self.enterRule(localctx, 4, self.RULE_qubitRegisterDeclaration) - try: - self.enterOuterAlt(localctx, 1) - self.state = 35 - self.match(CQasm3Parser.T__4) - self.state = 36 - self.match(CQasm3Parser.INT) - self.state = 37 - self.match(CQasm3Parser.T__5) - self.state = 38 - self.match(CQasm3Parser.ID) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class GateApplicationContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def ID(self): - return self.getToken(CQasm3Parser.ID, 0) - - def expr(self, i: int = None): - if i is None: - return self.getTypedRuleContexts(CQasm3Parser.ExprContext) - else: - return self.getTypedRuleContext(CQasm3Parser.ExprContext, i) - - def getRuleIndex(self): - return CQasm3Parser.RULE_gateApplication - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterGateApplication"): - listener.enterGateApplication(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitGateApplication"): - listener.exitGateApplication(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitGateApplication"): - return visitor.visitGateApplication(self) - else: - return visitor.visitChildren(self) - - def gateApplication(self): - localctx = CQasm3Parser.GateApplicationContext(self, self._ctx, self.state) - self.enterRule(localctx, 6, self.RULE_gateApplication) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 40 - self.match(CQasm3Parser.ID) - self.state = 41 - self.expr() - self.state = 46 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == 7: - self.state = 42 - self.match(CQasm3Parser.T__6) - self.state = 43 - self.expr() - self.state = 48 - self._errHandler.sync(self) - _la = self._input.LA(1) - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - class ExprContext(ParserRuleContext): - __slots__ = "parser" - - def __init__(self, parser, parent: ParserRuleContext = None, invokingState: int = -1): - super().__init__(parent, invokingState) - self.parser = parser - - def getRuleIndex(self): - return CQasm3Parser.RULE_expr - - def copyFrom(self, ctx: ParserRuleContext): - super().copyFrom(ctx) - - class NegatedFloatLiteralContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def FLOAT(self): - return self.getToken(CQasm3Parser.FLOAT, 0) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterNegatedFloatLiteral"): - listener.enterNegatedFloatLiteral(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitNegatedFloatLiteral"): - listener.exitNegatedFloatLiteral(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNegatedFloatLiteral"): - return visitor.visitNegatedFloatLiteral(self) - else: - return visitor.visitChildren(self) - - class QubitContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def ID(self): - return self.getToken(CQasm3Parser.ID, 0) - - def INT(self): - return self.getToken(CQasm3Parser.INT, 0) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterQubit"): - listener.enterQubit(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitQubit"): - listener.exitQubit(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitQubit"): - return visitor.visitQubit(self) - else: - return visitor.visitChildren(self) - - class NegatedIntLiteralContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def INT(self): - return self.getToken(CQasm3Parser.INT, 0) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterNegatedIntLiteral"): - listener.enterNegatedIntLiteral(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitNegatedIntLiteral"): - listener.exitNegatedIntLiteral(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitNegatedIntLiteral"): - return visitor.visitNegatedIntLiteral(self) - else: - return visitor.visitChildren(self) - - class FloatLiteralContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def FLOAT(self): - return self.getToken(CQasm3Parser.FLOAT, 0) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterFloatLiteral"): - listener.enterFloatLiteral(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitFloatLiteral"): - listener.exitFloatLiteral(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitFloatLiteral"): - return visitor.visitFloatLiteral(self) - else: - return visitor.visitChildren(self) - - class IntLiteralContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def INT(self): - return self.getToken(CQasm3Parser.INT, 0) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterIntLiteral"): - listener.enterIntLiteral(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitIntLiteral"): - listener.exitIntLiteral(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitIntLiteral"): - return visitor.visitIntLiteral(self) - else: - return visitor.visitChildren(self) - - class QubitRangeContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def ID(self): - return self.getToken(CQasm3Parser.ID, 0) - - def INT(self, i: int = None): - if i is None: - return self.getTokens(CQasm3Parser.INT) - else: - return self.getToken(CQasm3Parser.INT, i) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterQubitRange"): - listener.enterQubitRange(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitQubitRange"): - listener.exitQubitRange(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitQubitRange"): - return visitor.visitQubitRange(self) - else: - return visitor.visitChildren(self) - - class QubitsContext(ExprContext): - def __init__(self, parser, ctx: ParserRuleContext): # actually a CQasm3Parser.ExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def ID(self): - return self.getToken(CQasm3Parser.ID, 0) - - def INT(self, i: int = None): - if i is None: - return self.getTokens(CQasm3Parser.INT) - else: - return self.getToken(CQasm3Parser.INT, i) - - def enterRule(self, listener: ParseTreeListener): - if hasattr(listener, "enterQubits"): - listener.enterQubits(self) - - def exitRule(self, listener: ParseTreeListener): - if hasattr(listener, "exitQubits"): - listener.exitQubits(self) - - def accept(self, visitor: ParseTreeVisitor): - if hasattr(visitor, "visitQubits"): - return visitor.visitQubits(self) - else: - return visitor.visitChildren(self) - - def expr(self): - localctx = CQasm3Parser.ExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 8, self.RULE_expr) - self._la = 0 # Token type - try: - self.state = 76 - self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input, 6, self._ctx) - if la_ == 1: - localctx = CQasm3Parser.QubitContext(self, localctx) - self.enterOuterAlt(localctx, 1) - self.state = 49 - self.match(CQasm3Parser.ID) - self.state = 50 - self.match(CQasm3Parser.T__7) - self.state = 51 - self.match(CQasm3Parser.INT) - self.state = 52 - self.match(CQasm3Parser.T__5) - pass - - elif la_ == 2: - localctx = CQasm3Parser.QubitsContext(self, localctx) - self.enterOuterAlt(localctx, 2) - self.state = 53 - self.match(CQasm3Parser.ID) - self.state = 54 - self.match(CQasm3Parser.T__7) - self.state = 55 - self.match(CQasm3Parser.INT) - self.state = 60 - self._errHandler.sync(self) - _la = self._input.LA(1) - while _la == 7: - self.state = 56 - self.match(CQasm3Parser.T__6) - self.state = 57 - self.match(CQasm3Parser.INT) - self.state = 62 - self._errHandler.sync(self) - _la = self._input.LA(1) - - self.state = 63 - self.match(CQasm3Parser.T__5) - pass - - elif la_ == 3: - localctx = CQasm3Parser.QubitRangeContext(self, localctx) - self.enterOuterAlt(localctx, 3) - self.state = 64 - self.match(CQasm3Parser.ID) - self.state = 65 - self.match(CQasm3Parser.T__7) - self.state = 66 - self.match(CQasm3Parser.INT) - self.state = 67 - self.match(CQasm3Parser.T__8) - self.state = 68 - self.match(CQasm3Parser.INT) - self.state = 69 - self.match(CQasm3Parser.T__5) - pass - - elif la_ == 4: - localctx = CQasm3Parser.IntLiteralContext(self, localctx) - self.enterOuterAlt(localctx, 4) - self.state = 70 - self.match(CQasm3Parser.INT) - pass - - elif la_ == 5: - localctx = CQasm3Parser.NegatedIntLiteralContext(self, localctx) - self.enterOuterAlt(localctx, 5) - self.state = 71 - self.match(CQasm3Parser.T__9) - self.state = 72 - self.match(CQasm3Parser.INT) - pass - - elif la_ == 6: - localctx = CQasm3Parser.FloatLiteralContext(self, localctx) - self.enterOuterAlt(localctx, 6) - self.state = 73 - self.match(CQasm3Parser.FLOAT) - pass - - elif la_ == 7: - localctx = CQasm3Parser.NegatedFloatLiteralContext(self, localctx) - self.enterOuterAlt(localctx, 7) - self.state = 74 - self.match(CQasm3Parser.T__9) - self.state = 75 - self.match(CQasm3Parser.FLOAT) - pass - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx diff --git a/parsing/GeneratedParsingCode/CQasm3Visitor.py b/parsing/GeneratedParsingCode/CQasm3Visitor.py deleted file mode 100644 index e4e93d2e..00000000 --- a/parsing/GeneratedParsingCode/CQasm3Visitor.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated from CQasm3.g4 by ANTLR 4.13.1 -from antlr4 import * - -if "." in __name__: - from .CQasm3Parser import CQasm3Parser -else: - from CQasm3Parser import CQasm3Parser - -# This class defines a complete generic visitor for a parse tree produced by CQasm3Parser. - - -class CQasm3Visitor(ParseTreeVisitor): - # Visit a parse tree produced by CQasm3Parser#stateSep. - def visitStateSep(self, ctx: CQasm3Parser.StateSepContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#prog. - def visitProg(self, ctx: CQasm3Parser.ProgContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#qubitRegisterDeclaration. - def visitQubitRegisterDeclaration(self, ctx: CQasm3Parser.QubitRegisterDeclarationContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#gateApplication. - def visitGateApplication(self, ctx: CQasm3Parser.GateApplicationContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#Qubit. - def visitQubit(self, ctx: CQasm3Parser.QubitContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#Qubits. - def visitQubits(self, ctx: CQasm3Parser.QubitsContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#QubitRange. - def visitQubitRange(self, ctx: CQasm3Parser.QubitRangeContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#IntLiteral. - def visitIntLiteral(self, ctx: CQasm3Parser.IntLiteralContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#NegatedIntLiteral. - def visitNegatedIntLiteral(self, ctx: CQasm3Parser.NegatedIntLiteralContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#FloatLiteral. - def visitFloatLiteral(self, ctx: CQasm3Parser.FloatLiteralContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by CQasm3Parser#NegatedFloatLiteral. - def visitNegatedFloatLiteral(self, ctx: CQasm3Parser.NegatedFloatLiteralContext): - return self.visitChildren(ctx) - - -del CQasm3Parser diff --git a/parsing/GeneratedParsingCode/CQasmLexer.interp b/parsing/GeneratedParsingCode/CQasmLexer.interp deleted file mode 100644 index 452c55b8..00000000 --- a/parsing/GeneratedParsingCode/CQasmLexer.interp +++ /dev/null @@ -1,68 +0,0 @@ -token literal names: -null -';' -'\r\n' -'\n' -'3.0' -'qubit[' -']' -',' -'[' -':' -'-' -'version' -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -VERSION -ID -FLOAT -INT -WS -COMMENT -MULTILINE_COMMENT - -rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -T__6 -T__7 -T__8 -T__9 -VERSION -ID -FLOAT -INT -WS -COMMENT -MULTILINE_COMMENT - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[4, 0, 17, 127, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 74, 8, 11, 10, 11, 12, 11, 77, 9, 11, 1, 12, 4, 12, 80, 8, 12, 11, 12, 12, 12, 81, 1, 12, 1, 12, 5, 12, 86, 8, 12, 10, 12, 12, 12, 89, 9, 12, 1, 13, 4, 13, 92, 8, 13, 11, 13, 12, 13, 93, 1, 14, 4, 14, 97, 8, 14, 11, 14, 12, 14, 98, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 107, 8, 15, 10, 15, 12, 15, 110, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 118, 8, 16, 10, 16, 12, 16, 121, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 119, 0, 17, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 1, 0, 6, 2, 0, 65, 90, 97, 122, 3, 0, 48, 57, 65, 90, 97, 122, 1, 0, 48, 57, 1, 0, 46, 46, 2, 0, 9, 9, 32, 32, 2, 0, 10, 10, 13, 13, 133, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 1, 35, 1, 0, 0, 0, 3, 37, 1, 0, 0, 0, 5, 40, 1, 0, 0, 0, 7, 42, 1, 0, 0, 0, 9, 46, 1, 0, 0, 0, 11, 53, 1, 0, 0, 0, 13, 55, 1, 0, 0, 0, 15, 57, 1, 0, 0, 0, 17, 59, 1, 0, 0, 0, 19, 61, 1, 0, 0, 0, 21, 63, 1, 0, 0, 0, 23, 71, 1, 0, 0, 0, 25, 79, 1, 0, 0, 0, 27, 91, 1, 0, 0, 0, 29, 96, 1, 0, 0, 0, 31, 102, 1, 0, 0, 0, 33, 113, 1, 0, 0, 0, 35, 36, 5, 59, 0, 0, 36, 2, 1, 0, 0, 0, 37, 38, 5, 13, 0, 0, 38, 39, 5, 10, 0, 0, 39, 4, 1, 0, 0, 0, 40, 41, 5, 10, 0, 0, 41, 6, 1, 0, 0, 0, 42, 43, 5, 51, 0, 0, 43, 44, 5, 46, 0, 0, 44, 45, 5, 48, 0, 0, 45, 8, 1, 0, 0, 0, 46, 47, 5, 113, 0, 0, 47, 48, 5, 117, 0, 0, 48, 49, 5, 98, 0, 0, 49, 50, 5, 105, 0, 0, 50, 51, 5, 116, 0, 0, 51, 52, 5, 91, 0, 0, 52, 10, 1, 0, 0, 0, 53, 54, 5, 93, 0, 0, 54, 12, 1, 0, 0, 0, 55, 56, 5, 44, 0, 0, 56, 14, 1, 0, 0, 0, 57, 58, 5, 91, 0, 0, 58, 16, 1, 0, 0, 0, 59, 60, 5, 58, 0, 0, 60, 18, 1, 0, 0, 0, 61, 62, 5, 45, 0, 0, 62, 20, 1, 0, 0, 0, 63, 64, 5, 118, 0, 0, 64, 65, 5, 101, 0, 0, 65, 66, 5, 114, 0, 0, 66, 67, 5, 115, 0, 0, 67, 68, 5, 105, 0, 0, 68, 69, 5, 111, 0, 0, 69, 70, 5, 110, 0, 0, 70, 22, 1, 0, 0, 0, 71, 75, 7, 0, 0, 0, 72, 74, 7, 1, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 24, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 7, 2, 0, 0, 79, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 83, 1, 0, 0, 0, 83, 87, 7, 3, 0, 0, 84, 86, 7, 2, 0, 0, 85, 84, 1, 0, 0, 0, 86, 89, 1, 0, 0, 0, 87, 85, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 26, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 90, 92, 7, 2, 0, 0, 91, 90, 1, 0, 0, 0, 92, 93, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 28, 1, 0, 0, 0, 95, 97, 7, 4, 0, 0, 96, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 101, 6, 14, 0, 0, 101, 30, 1, 0, 0, 0, 102, 103, 5, 47, 0, 0, 103, 104, 5, 47, 0, 0, 104, 108, 1, 0, 0, 0, 105, 107, 8, 5, 0, 0, 106, 105, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 6, 15, 0, 0, 112, 32, 1, 0, 0, 0, 113, 114, 5, 47, 0, 0, 114, 115, 5, 42, 0, 0, 115, 119, 1, 0, 0, 0, 116, 118, 9, 0, 0, 0, 117, 116, 1, 0, 0, 0, 118, 121, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 120, 122, 1, 0, 0, 0, 121, 119, 1, 0, 0, 0, 122, 123, 5, 42, 0, 0, 123, 124, 5, 47, 0, 0, 124, 125, 1, 0, 0, 0, 125, 126, 6, 16, 0, 0, 126, 34, 1, 0, 0, 0, 8, 0, 75, 81, 87, 93, 98, 108, 119, 1, 6, 0, 0] \ No newline at end of file diff --git a/parsing/GeneratedParsingCode/CQasmLexer.py b/parsing/GeneratedParsingCode/CQasmLexer.py deleted file mode 100644 index 3f6b37cb..00000000 --- a/parsing/GeneratedParsingCode/CQasmLexer.py +++ /dev/null @@ -1,1248 +0,0 @@ -# Generated from CQasm3.g4 by ANTLR 4.13.1 -import sys -from io import StringIO - -from antlr4 import * - -if sys.version_info[1] > 5: - from typing import TextIO -else: - from typing.io import TextIO - - -def serializedATN(): - return [ - 4, - 0, - 17, - 127, - 6, - -1, - 2, - 0, - 7, - 0, - 2, - 1, - 7, - 1, - 2, - 2, - 7, - 2, - 2, - 3, - 7, - 3, - 2, - 4, - 7, - 4, - 2, - 5, - 7, - 5, - 2, - 6, - 7, - 6, - 2, - 7, - 7, - 7, - 2, - 8, - 7, - 8, - 2, - 9, - 7, - 9, - 2, - 10, - 7, - 10, - 2, - 11, - 7, - 11, - 2, - 12, - 7, - 12, - 2, - 13, - 7, - 13, - 2, - 14, - 7, - 14, - 2, - 15, - 7, - 15, - 2, - 16, - 7, - 16, - 1, - 0, - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 5, - 1, - 5, - 1, - 6, - 1, - 6, - 1, - 7, - 1, - 7, - 1, - 8, - 1, - 8, - 1, - 9, - 1, - 9, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 10, - 1, - 11, - 1, - 11, - 5, - 11, - 74, - 8, - 11, - 10, - 11, - 12, - 11, - 77, - 9, - 11, - 1, - 12, - 4, - 12, - 80, - 8, - 12, - 11, - 12, - 12, - 12, - 81, - 1, - 12, - 1, - 12, - 5, - 12, - 86, - 8, - 12, - 10, - 12, - 12, - 12, - 89, - 9, - 12, - 1, - 13, - 4, - 13, - 92, - 8, - 13, - 11, - 13, - 12, - 13, - 93, - 1, - 14, - 4, - 14, - 97, - 8, - 14, - 11, - 14, - 12, - 14, - 98, - 1, - 14, - 1, - 14, - 1, - 15, - 1, - 15, - 1, - 15, - 1, - 15, - 5, - 15, - 107, - 8, - 15, - 10, - 15, - 12, - 15, - 110, - 9, - 15, - 1, - 15, - 1, - 15, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 5, - 16, - 118, - 8, - 16, - 10, - 16, - 12, - 16, - 121, - 9, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 16, - 1, - 119, - 0, - 17, - 1, - 1, - 3, - 2, - 5, - 3, - 7, - 4, - 9, - 5, - 11, - 6, - 13, - 7, - 15, - 8, - 17, - 9, - 19, - 10, - 21, - 11, - 23, - 12, - 25, - 13, - 27, - 14, - 29, - 15, - 31, - 16, - 33, - 17, - 1, - 0, - 6, - 2, - 0, - 65, - 90, - 97, - 122, - 3, - 0, - 48, - 57, - 65, - 90, - 97, - 122, - 1, - 0, - 48, - 57, - 1, - 0, - 46, - 46, - 2, - 0, - 9, - 9, - 32, - 32, - 2, - 0, - 10, - 10, - 13, - 13, - 133, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 3, - 1, - 0, - 0, - 0, - 0, - 5, - 1, - 0, - 0, - 0, - 0, - 7, - 1, - 0, - 0, - 0, - 0, - 9, - 1, - 0, - 0, - 0, - 0, - 11, - 1, - 0, - 0, - 0, - 0, - 13, - 1, - 0, - 0, - 0, - 0, - 15, - 1, - 0, - 0, - 0, - 0, - 17, - 1, - 0, - 0, - 0, - 0, - 19, - 1, - 0, - 0, - 0, - 0, - 21, - 1, - 0, - 0, - 0, - 0, - 23, - 1, - 0, - 0, - 0, - 0, - 25, - 1, - 0, - 0, - 0, - 0, - 27, - 1, - 0, - 0, - 0, - 0, - 29, - 1, - 0, - 0, - 0, - 0, - 31, - 1, - 0, - 0, - 0, - 0, - 33, - 1, - 0, - 0, - 0, - 1, - 35, - 1, - 0, - 0, - 0, - 3, - 37, - 1, - 0, - 0, - 0, - 5, - 40, - 1, - 0, - 0, - 0, - 7, - 42, - 1, - 0, - 0, - 0, - 9, - 46, - 1, - 0, - 0, - 0, - 11, - 53, - 1, - 0, - 0, - 0, - 13, - 55, - 1, - 0, - 0, - 0, - 15, - 57, - 1, - 0, - 0, - 0, - 17, - 59, - 1, - 0, - 0, - 0, - 19, - 61, - 1, - 0, - 0, - 0, - 21, - 63, - 1, - 0, - 0, - 0, - 23, - 71, - 1, - 0, - 0, - 0, - 25, - 79, - 1, - 0, - 0, - 0, - 27, - 91, - 1, - 0, - 0, - 0, - 29, - 96, - 1, - 0, - 0, - 0, - 31, - 102, - 1, - 0, - 0, - 0, - 33, - 113, - 1, - 0, - 0, - 0, - 35, - 36, - 5, - 59, - 0, - 0, - 36, - 2, - 1, - 0, - 0, - 0, - 37, - 38, - 5, - 13, - 0, - 0, - 38, - 39, - 5, - 10, - 0, - 0, - 39, - 4, - 1, - 0, - 0, - 0, - 40, - 41, - 5, - 10, - 0, - 0, - 41, - 6, - 1, - 0, - 0, - 0, - 42, - 43, - 5, - 51, - 0, - 0, - 43, - 44, - 5, - 46, - 0, - 0, - 44, - 45, - 5, - 48, - 0, - 0, - 45, - 8, - 1, - 0, - 0, - 0, - 46, - 47, - 5, - 113, - 0, - 0, - 47, - 48, - 5, - 117, - 0, - 0, - 48, - 49, - 5, - 98, - 0, - 0, - 49, - 50, - 5, - 105, - 0, - 0, - 50, - 51, - 5, - 116, - 0, - 0, - 51, - 52, - 5, - 91, - 0, - 0, - 52, - 10, - 1, - 0, - 0, - 0, - 53, - 54, - 5, - 93, - 0, - 0, - 54, - 12, - 1, - 0, - 0, - 0, - 55, - 56, - 5, - 44, - 0, - 0, - 56, - 14, - 1, - 0, - 0, - 0, - 57, - 58, - 5, - 91, - 0, - 0, - 58, - 16, - 1, - 0, - 0, - 0, - 59, - 60, - 5, - 58, - 0, - 0, - 60, - 18, - 1, - 0, - 0, - 0, - 61, - 62, - 5, - 45, - 0, - 0, - 62, - 20, - 1, - 0, - 0, - 0, - 63, - 64, - 5, - 118, - 0, - 0, - 64, - 65, - 5, - 101, - 0, - 0, - 65, - 66, - 5, - 114, - 0, - 0, - 66, - 67, - 5, - 115, - 0, - 0, - 67, - 68, - 5, - 105, - 0, - 0, - 68, - 69, - 5, - 111, - 0, - 0, - 69, - 70, - 5, - 110, - 0, - 0, - 70, - 22, - 1, - 0, - 0, - 0, - 71, - 75, - 7, - 0, - 0, - 0, - 72, - 74, - 7, - 1, - 0, - 0, - 73, - 72, - 1, - 0, - 0, - 0, - 74, - 77, - 1, - 0, - 0, - 0, - 75, - 73, - 1, - 0, - 0, - 0, - 75, - 76, - 1, - 0, - 0, - 0, - 76, - 24, - 1, - 0, - 0, - 0, - 77, - 75, - 1, - 0, - 0, - 0, - 78, - 80, - 7, - 2, - 0, - 0, - 79, - 78, - 1, - 0, - 0, - 0, - 80, - 81, - 1, - 0, - 0, - 0, - 81, - 79, - 1, - 0, - 0, - 0, - 81, - 82, - 1, - 0, - 0, - 0, - 82, - 83, - 1, - 0, - 0, - 0, - 83, - 87, - 7, - 3, - 0, - 0, - 84, - 86, - 7, - 2, - 0, - 0, - 85, - 84, - 1, - 0, - 0, - 0, - 86, - 89, - 1, - 0, - 0, - 0, - 87, - 85, - 1, - 0, - 0, - 0, - 87, - 88, - 1, - 0, - 0, - 0, - 88, - 26, - 1, - 0, - 0, - 0, - 89, - 87, - 1, - 0, - 0, - 0, - 90, - 92, - 7, - 2, - 0, - 0, - 91, - 90, - 1, - 0, - 0, - 0, - 92, - 93, - 1, - 0, - 0, - 0, - 93, - 91, - 1, - 0, - 0, - 0, - 93, - 94, - 1, - 0, - 0, - 0, - 94, - 28, - 1, - 0, - 0, - 0, - 95, - 97, - 7, - 4, - 0, - 0, - 96, - 95, - 1, - 0, - 0, - 0, - 97, - 98, - 1, - 0, - 0, - 0, - 98, - 96, - 1, - 0, - 0, - 0, - 98, - 99, - 1, - 0, - 0, - 0, - 99, - 100, - 1, - 0, - 0, - 0, - 100, - 101, - 6, - 14, - 0, - 0, - 101, - 30, - 1, - 0, - 0, - 0, - 102, - 103, - 5, - 47, - 0, - 0, - 103, - 104, - 5, - 47, - 0, - 0, - 104, - 108, - 1, - 0, - 0, - 0, - 105, - 107, - 8, - 5, - 0, - 0, - 106, - 105, - 1, - 0, - 0, - 0, - 107, - 110, - 1, - 0, - 0, - 0, - 108, - 106, - 1, - 0, - 0, - 0, - 108, - 109, - 1, - 0, - 0, - 0, - 109, - 111, - 1, - 0, - 0, - 0, - 110, - 108, - 1, - 0, - 0, - 0, - 111, - 112, - 6, - 15, - 0, - 0, - 112, - 32, - 1, - 0, - 0, - 0, - 113, - 114, - 5, - 47, - 0, - 0, - 114, - 115, - 5, - 42, - 0, - 0, - 115, - 119, - 1, - 0, - 0, - 0, - 116, - 118, - 9, - 0, - 0, - 0, - 117, - 116, - 1, - 0, - 0, - 0, - 118, - 121, - 1, - 0, - 0, - 0, - 119, - 120, - 1, - 0, - 0, - 0, - 119, - 117, - 1, - 0, - 0, - 0, - 120, - 122, - 1, - 0, - 0, - 0, - 121, - 119, - 1, - 0, - 0, - 0, - 122, - 123, - 5, - 42, - 0, - 0, - 123, - 124, - 5, - 47, - 0, - 0, - 124, - 125, - 1, - 0, - 0, - 0, - 125, - 126, - 6, - 16, - 0, - 0, - 126, - 34, - 1, - 0, - 0, - 0, - 8, - 0, - 75, - 81, - 87, - 93, - 98, - 108, - 119, - 1, - 6, - 0, - 0, - ] - - -class CQasmLexer(Lexer): - atn = ATNDeserializer().deserialize(serializedATN()) - - decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)] - - T__0 = 1 - T__1 = 2 - T__2 = 3 - T__3 = 4 - T__4 = 5 - T__5 = 6 - T__6 = 7 - T__7 = 8 - T__8 = 9 - T__9 = 10 - VERSION = 11 - ID = 12 - FLOAT = 13 - INT = 14 - WS = 15 - COMMENT = 16 - MULTILINE_COMMENT = 17 - - channelNames = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN"] - - modeNames = ["DEFAULT_MODE"] - - literalNames = [ - "", - "';'", - "'\\r\\n'", - "'\\n'", - "'3.0'", - "'qubit['", - "']'", - "','", - "'['", - "':'", - "'-'", - "'version'", - ] - - symbolicNames = ["", "VERSION", "ID", "FLOAT", "INT", "WS", "COMMENT", "MULTILINE_COMMENT"] - - ruleNames = [ - "T__0", - "T__1", - "T__2", - "T__3", - "T__4", - "T__5", - "T__6", - "T__7", - "T__8", - "T__9", - "VERSION", - "ID", - "FLOAT", - "INT", - "WS", - "COMMENT", - "MULTILINE_COMMENT", - ] - - grammarFileName = "CQasm3.g4" - - def __init__(self, input=None, output: TextIO = sys.stdout): - super().__init__(input, output) - self.checkVersion("4.13.1") - self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) - self._actions = None - self._predicates = None diff --git a/parsing/GeneratedParsingCode/CQasmLexer.tokens b/parsing/GeneratedParsingCode/CQasmLexer.tokens deleted file mode 100644 index 2da931a7..00000000 --- a/parsing/GeneratedParsingCode/CQasmLexer.tokens +++ /dev/null @@ -1,28 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -VERSION=11 -ID=12 -FLOAT=13 -INT=14 -WS=15 -COMMENT=16 -MULTILINE_COMMENT=17 -';'=1 -'\r\n'=2 -'\n'=3 -'3.0'=4 -'qubit['=5 -']'=6 -','=7 -'['=8 -':'=9 -'-'=10 -'version'=11 diff --git a/parsing/grammar/CQasm3.g4 b/parsing/grammar/CQasm3.g4 deleted file mode 100644 index 0e5f78b9..00000000 --- a/parsing/grammar/CQasm3.g4 +++ /dev/null @@ -1,26 +0,0 @@ -grammar CQasm3; - -stateSep: ( ';' | '\r\n' | '\n' )+ ; - -prog: stateSep? VERSION '3.0' stateSep qubitRegisterDeclaration (stateSep gateApplication)* stateSep? EOF ; - -qubitRegisterDeclaration: 'qubit[' INT ']' ID ; - -gateApplication: ID expr (',' expr)* ; - -expr: ID '[' INT ']' # Qubit - | ID '[' INT (',' INT )* ']' # Qubits - | ID '[' INT ':' INT ']' # QubitRange - | INT # IntLiteral - | '-' INT # NegatedIntLiteral - | FLOAT # FloatLiteral - | '-' FLOAT # NegatedFloatLiteral - ; - -VERSION: 'version' ; -ID : [a-zA-Z][a-zA-Z0-9]* ; -FLOAT : [0-9]+[.][0-9]* ; -INT : [0-9]+ ; -WS : [ \t]+ -> skip ; -COMMENT : '//' ~[\r\n]* -> skip ; -MULTILINE_COMMENT : '/*' .*? '*/' -> skip ; \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index e17854bc..3f3abd7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,447 +1,5533 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] -name = "antlr4-python3-runtime" -version = "4.13.1" -description = "ANTLR 4.13.1 runtime for Python 3" +name = "adaptive" +version = "1.3.0" +description = "Parallel active learning of mathematical functions" optional = false -python-versions = "*" +python-versions = ">=3.9" +files = [ + {file = "adaptive-1.3.0-py3-none-any.whl", hash = "sha256:e18684f5dcf111bf1af0d2df66976918971b9b881a6bb72b7ff0924c0662f2dd"}, + {file = "adaptive-1.3.0.tar.gz", hash = "sha256:7790862b663bf8587f1bbb1ee7a851085765da2967a7d29babe197da401829fd"}, +] + +[package.dependencies] +cloudpickle = "*" +loky = ">=2.9" +scipy = "*" +sortedcollections = ">=1.1" +sortedcontainers = ">=2.0" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} +versioningit = "*" + +[package.extras] +notebook = ["bokeh", "holoviews (>=1.9.1)", "ipykernel (>=4.8.0)", "ipython", "ipywidgets", "jupyter-client (>=5.2.2)", "matplotlib", "pandas", "plotly"] +other = ["dill", "distributed", "ipyparallel (>=6.2.5)", "pexpect", "wexpect"] +testing = ["flaky", "pre-commit", "pytest", "pytest-cov", "pytest-randomly", "pytest-timeout", "typeguard"] + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" files = [ - {file = "antlr4-python3-runtime-4.13.1.tar.gz", hash = "sha256:3cd282f5ea7cfb841537fe01f143350fdb1c0b1ce7981443a2fa8513fddb6d1a"}, - {file = "antlr4_python3_runtime-4.13.1-py3-none-any.whl", hash = "sha256:78ec57aad12c97ac039ca27403ad61cb98aaec8a3f9bb8144f889aa0fa28b943"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] -name = "black" -version = "23.11.0" -description = "The uncompromising code formatter." +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, - {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, - {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, - {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, - {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, - {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, - {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, - {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, - {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, - {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, - {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, - {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, - {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, - {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, - {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, - {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, - {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, - {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = ">=3.6" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, ] +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + [[package]] -name = "coverage" -version = "7.3.2" -description = "Code coverage measurement for Python" +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" [package.extras] -toml = ["tomli"] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] -name = "exceptiongroup" -version = "1.2.0" -description = "Backport of PEP 654 (exception groups)" +name = "asteval" +version = "1.0.2" +description = "Safe, minimalistic evaluator of python expression using ast module" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "asteval-1.0.2-py3-none-any.whl", hash = "sha256:2ece3179809185598d054289e089b8e7706c1a5afa5f7e7c236b3cdae0cf8290"}, + {file = "asteval-1.0.2.tar.gz", hash = "sha256:00e27d9dc565858056d04ebf741f9db4dc4ba319ac3517d094b1608e7f73fa6a"}, ] [package.extras] -test = ["pytest (>=6)"] +all = ["asteval[dev,doc,test]"] +dev = ["build", "twine"] +doc = ["Sphinx"] +test = ["coverage", "pytest", "pytest-cov"] [[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "attrs" +version = "24.2.0" +description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] +[package.extras] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] + [[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." +name = "azure-core" +version = "1.30.2" +description = "Microsoft Azure Core Library for Python" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.8" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "azure-core-1.30.2.tar.gz", hash = "sha256:a14dc210efcd608821aa472d9fb8e8d035d29b68993819147bc290a8ac224472"}, + {file = "azure_core-1.30.2-py3-none-any.whl", hash = "sha256:cf019c1ca832e96274ae85abd3d9f752397194d9fea3b41487290562ac8abe4a"}, ] +[package.dependencies] +requests = ">=2.21.0" +six = ">=1.11.0" +typing-extensions = ">=4.6.0" + [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +aio = ["aiohttp (>=3.0)"] [[package]] -name = "mypy" -version = "1.7.0" -description = "Optional static typing for Python" +name = "azure-identity" +version = "1.17.1" +description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, - {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, - {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, - {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, - {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, - {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, - {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, - {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, - {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, - {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, - {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:185cff9b9a7fec1f9f7d8352dff8a4c713b2e3eea9c6c4b5ff7f0edf46b91e41"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7b1e399c47b18feb6f8ad4a3eef3813e28c1e871ea7d4ea5d444b2ac03c418"}, - {file = "mypy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9fe455ad58a20ec68599139ed1113b21f977b536a91b42bef3ffed5cce7391"}, - {file = "mypy-1.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d0fa29919d2e720c8dbaf07d5578f93d7b313c3e9954c8ec05b6d83da592e5d9"}, - {file = "mypy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b53655a295c1ed1af9e96b462a736bf083adba7b314ae775563e3fb4e6795f5"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, - {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, - {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, - {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, - {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, - {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, + {file = "azure-identity-1.17.1.tar.gz", hash = "sha256:32ecc67cc73f4bd0595e4f64b1ca65cd05186f4fe6f98ed2ae9f1aa32646efea"}, + {file = "azure_identity-1.17.1-py3-none-any.whl", hash = "sha256:db8d59c183b680e763722bfe8ebc45930e6c57df510620985939f7f3191e0382"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +azure-core = ">=1.23.0" +cryptography = ">=2.5" +msal = ">=1.24.0" +msal-extensions = ">=0.3.0" +typing-extensions = ">=4.0.0" + +[[package]] +name = "babel" +version = "2.16.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, +] [package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" optional = false -python-versions = ">=3.5" +python-versions = "*" files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] [[package]] -name = "numpy" -version = "1.24.0" -description = "Fundamental package for array computing in Python" +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.8" files = [ - {file = "numpy-1.24.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6e73a1f4f5b74a42abb55bc2b3d869f1b38cbc8776da5f8b66bf110284f7a437"}, - {file = "numpy-1.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9387c7d6d50e8f8c31e7bfc034241e9c6f4b3eb5db8d118d6487047b922f82af"}, - {file = "numpy-1.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ad6a024a32ee61d18f5b402cd02e9c0e22c0fb9dc23751991b3a16d209d972e"}, - {file = "numpy-1.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73cf2c5b5a07450f20a0c8e04d9955491970177dce8df8d6903bf253e53268e0"}, - {file = "numpy-1.24.0-cp310-cp310-win32.whl", hash = "sha256:cec79ff3984b2d1d103183fc4a3361f5b55bbb66cb395cbf5a920a4bb1fd588d"}, - {file = "numpy-1.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:4f5e78b8b710cd7cd1a8145994cfffc6ddd5911669a437777d8cedfce6c83a98"}, - {file = "numpy-1.24.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4445f472b246cad6514cc09fbb5ecb7aab09ca2acc3c16f29f8dca6c468af501"}, - {file = "numpy-1.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec3e5e8172a0a6a4f3c2e7423d4a8434c41349141b04744b11a90e017a95bad5"}, - {file = "numpy-1.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9168790149f917ad8e3cf5047b353fefef753bd50b07c547da0bdf30bc15d91"}, - {file = "numpy-1.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada6c1e9608ceadaf7020e1deea508b73ace85560a16f51bef26aecb93626a72"}, - {file = "numpy-1.24.0-cp311-cp311-win32.whl", hash = "sha256:f3c4a9a9f92734a4728ddbd331e0124eabbc968a0359a506e8e74a9b0d2d419b"}, - {file = "numpy-1.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:90075ef2c6ac6397d0035bcd8b298b26e481a7035f7a3f382c047eb9c3414db0"}, - {file = "numpy-1.24.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0885d9a7666cafe5f9876c57bfee34226e2b2847bfb94c9505e18d81011e5401"}, - {file = "numpy-1.24.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d2157f9fc98cc178870db83b0e0c85acdadd598b134b00ebec9e0db57a01f"}, - {file = "numpy-1.24.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8960f72997e56781eb1c2ea256a70124f92a543b384f89e5fb3503a308b1d3"}, - {file = "numpy-1.24.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f8e0df2ecc1928ef7256f18e309c9d6229b08b5be859163f5caa59c93d53646"}, - {file = "numpy-1.24.0-cp38-cp38-win32.whl", hash = "sha256:fe44e925c68fb5e8db1334bf30ac1a1b6b963b932a19cf41d2e899cf02f36aab"}, - {file = "numpy-1.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:d7f223554aba7280e6057727333ed357b71b7da7422d02ff5e91b857888c25d1"}, - {file = "numpy-1.24.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab11f6a7602cf8ea4c093e091938207de3068c5693a0520168ecf4395750f7ea"}, - {file = "numpy-1.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12bba5561d8118981f2f1ff069ecae200c05d7b6c78a5cdac0911f74bc71cbd1"}, - {file = "numpy-1.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9af91f794d2d3007d91d749ebc955302889261db514eb24caef30e03e8ec1e41"}, - {file = "numpy-1.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b1ddfac6a82d4f3c8e99436c90b9c2c68c0bb14658d1684cdd00f05fab241f5"}, - {file = "numpy-1.24.0-cp39-cp39-win32.whl", hash = "sha256:ac4fe68f1a5a18136acebd4eff91aab8bed00d1ef2fdb34b5d9192297ffbbdfc"}, - {file = "numpy-1.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:667b5b1f6a352419e340f6475ef9930348ae5cb7fca15f2cc3afcb530823715e"}, - {file = "numpy-1.24.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4d01f7832fa319a36fd75ba10ea4027c9338ede875792f7bf617f4b45056fc3a"}, - {file = "numpy-1.24.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb0490f0a880700a6cc4d000384baf19c1f4df59fff158d9482d4dbbca2b239"}, - {file = "numpy-1.24.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0104d8adaa3a4cc60c2777cab5196593bf8a7f416eda133be1f3803dd0838886"}, - {file = "numpy-1.24.0.tar.gz", hash = "sha256:c4ab7c9711fe6b235e86487ca74c1b092a6dd59a3cb45b63241ea0a148501853"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + [[package]] -name = "numpy" -version = "1.26.2" -description = "Fundamental package for array computing in Python" +name = "broadbean" +version = "0.14.0" +description = "Package for easily generating and manipulating signal pulses." optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, + {file = "broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7"}, + {file = "broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c"}, ] +[package.dependencies] +matplotlib = "*" +numpy = ">=1.12.1" +schema = "*" +versioningit = ">=2.0.1" + +[package.extras] +docs = ["nbsphinx", "sphinx", "sphinx-jsonschema", "sphinx-rtd-theme"] +test = ["black (>=22.3.0)", "coverage[toml] (>=6.2)", "hypothesis (>=5.49.0)", "jupyter (>=1.0.0)", "mypy (>=0.960)", "pytest (>=6.2.2)", "pytest-cov (>=3.0.0)", "types-pytz (>=2021.3.0)"] + [[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" +name = "cachetools" +version = "5.5.0" +description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, + {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, ] [[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." +name = "certifi" +version = "2024.7.4" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, +] + +[[package]] +name = "cffi" +version = "1.17.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, ] [[package]] -name = "platformdirs" -version = "4.0.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "cloudpickle" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "columnar" +version = "1.4.1" +description = "A tool for printing data in a columnar format." +optional = false +python-versions = "*" +files = [ + {file = "Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798"}, + {file = "Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72"}, +] + +[package.dependencies] +toolz = "*" +wcwidth = "*" + +[[package]] +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] +[package.dependencies] +traitlets = ">=4" + [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +test = ["pytest"] [[package]] -name = "pluggy" +name = "contourpy" version = "1.3.0" -description = "plugin and hook calling mechanisms for python" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.6.1" +description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, ] +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + [package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +toml = ["tomli"] [[package]] -name = "pytest" -version = "7.4.3" -description = "pytest: simple powerful testing with Python" +name = "cryptography" +version = "43.0.0" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dataclasses-json" +version = "0.6.7" +description = "Easily serialize dataclasses to and from JSON." +optional = false +python-versions = "<4.0,>=3.7" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, + {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, ] [package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + +[[package]] +name = "debugpy" +version = "1.8.5" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, + {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, + {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, + {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, + {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, + {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, + {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, + {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, + {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, + {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, + {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, + {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, + {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, + {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, + {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, + {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, + {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, + {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, + {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, + {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, + {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, + {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "deepdiff" +version = "8.0.1" +description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." +optional = false +python-versions = ">=3.8" +files = [ + {file = "deepdiff-8.0.1-py3-none-any.whl", hash = "sha256:42e99004ce603f9a53934c634a57b04ad5900e0d8ed0abb15e635767489cbc05"}, + {file = "deepdiff-8.0.1.tar.gz", hash = "sha256:245599a4586ab59bb599ca3517a9c42f3318ff600ded5e80a3432693c8ec3c4b"}, +] + +[package.dependencies] +orderly-set = "5.2.2" [package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +cli = ["click (==8.1.7)", "pyyaml (==6.0.1)"] +optimize = ["orjson"] [[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" optional = false -python-versions = ">=3.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] [[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" +name = "dill" +version = "0.3.8" +description = "serialize all of Python" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastjsonschema" +version = "2.20.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.15.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "fonttools" +version = "4.53.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, + {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, + {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, + {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, + {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, + {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, + {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, + {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, + {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, + {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, + {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, + {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, + {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, + {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, + {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, + {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, + {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, + {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, + {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, + {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, + {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, + {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, + {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, + {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, + {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, + {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, + {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, + {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "google-api-core" +version = "2.19.2" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google_api_core-2.19.2-py3-none-any.whl", hash = "sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4"}, + {file = "google_api_core-2.19.2.tar.gz", hash = "sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-auth" +version = "2.34.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google_auth-2.34.0-py2.py3-none-any.whl", hash = "sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65"}, + {file = "google_auth-2.34.0.tar.gz", hash = "sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.65.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, + {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, +] + +[package.dependencies] +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "griffe" +version = "1.2.0" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.8" +files = [ + {file = "griffe-1.2.0-py3-none-any.whl", hash = "sha256:a8b2fcb1ecdc5a412e646b0b4375eb20a5d2eac3a11dd8c10c56967a4097663c"}, + {file = "griffe-1.2.0.tar.gz", hash = "sha256:1c9f6ef7455930f3f9b0c4145a961c90385d1e2cbc496f7796fbff560ec60d31"}, +] + +[package.dependencies] +colorama = ">=0.4" + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h5netcdf" +version = "1.3.0" +description = "netCDF4 via h5py" +optional = false +python-versions = ">=3.9" +files = [ + {file = "h5netcdf-1.3.0-py3-none-any.whl", hash = "sha256:f2df69dcd3665dc9c4d43eb6529dedd113b2508090d12ac973573305a8406465"}, + {file = "h5netcdf-1.3.0.tar.gz", hash = "sha256:a171c027daeb34b24c24a3b6304195b8eabbb6f10c748256ed3cfe19806383cf"}, +] + +[package.dependencies] +h5py = "*" +packaging = "*" + +[package.extras] +test = ["netCDF4", "pytest"] + +[[package]] +name = "h5py" +version = "3.11.0" +description = "Read and write HDF5 files from Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, + {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, + {file = "h5py-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77b19a40788e3e362b54af4dcf9e6fde59ca016db2c61360aa30b47c7b7cef00"}, + {file = "h5py-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef4e2f338fc763f50a8113890f455e1a70acd42a4d083370ceb80c463d803972"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbd732a08187a9e2a6ecf9e8af713f1d68256ee0f7c8b652a32795670fb481ba"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75bd7b3d93fbeee40860fd70cdc88df4464e06b70a5ad9ce1446f5f32eb84007"}, + {file = "h5py-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c416f8eb0daae39dabe71415cb531f95dce2d81e1f61a74537a50c63b28ab3"}, + {file = "h5py-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:083e0329ae534a264940d6513f47f5ada617da536d8dccbafc3026aefc33c90e"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a76cae64080210389a571c7d13c94a1a6cf8cb75153044fd1f822a962c97aeab"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3736fe21da2b7d8a13fe8fe415f1272d2a1ccdeff4849c1421d2fb30fd533bc"}, + {file = "h5py-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6ae84a14103e8dc19266ef4c3e5d7c00b68f21d07f2966f0ca7bdb6c2761fb"}, + {file = "h5py-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:21dbdc5343f53b2e25404673c4f00a3335aef25521bd5fa8c707ec3833934892"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:754c0c2e373d13d6309f408325343b642eb0f40f1a6ad21779cfa9502209e150"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:731839240c59ba219d4cb3bc5880d438248533366f102402cfa0621b71796b62"}, + {file = "h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ec9df3dd2018904c4cc06331951e274f3f3fd091e6d6cc350aaa90fa9b42a76"}, + {file = "h5py-3.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:55106b04e2c83dfb73dc8732e9abad69d83a436b5b82b773481d95d17b9685e1"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f4e025e852754ca833401777c25888acb96889ee2c27e7e629a19aee288833f0"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c4b760082626120031d7902cd983d8c1f424cdba2809f1067511ef283629d4b"}, + {file = "h5py-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67462d0669f8f5459529de179f7771bd697389fcb3faab54d63bf788599a48ea"}, + {file = "h5py-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:d9c944d364688f827dc889cf83f1fca311caf4fa50b19f009d1f2b525edd33a3"}, + {file = "h5py-3.11.0.tar.gz", hash = "sha256:7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9"}, +] + +[package.dependencies] +numpy = ">=1.17.3" + +[[package]] +name = "hickle" +version = "5.0.3" +description = "Hickle - an HDF5 based version of pickle" +optional = false +python-versions = ">=3.7" +files = [ + {file = "hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad"}, + {file = "hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e"}, +] + +[package.dependencies] +h5py = ">=2.10.0" +numpy = ">=1.8,<1.20 || >1.20" + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "idna" +version = "3.8" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, + {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, +] + +[[package]] +name = "ifaddr" +version = "0.2.0" +description = "Cross-platform network interface and IP address enumeration library" +optional = false +python-versions = "*" +files = [ + {file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"}, + {file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"}, +] + +[[package]] +name = "importlib-metadata" +version = "8.4.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "importlib-resources" +version = "6.4.4" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"}, + {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=24" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "ipywidgets" +version = "8.1.5" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, + {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.12,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.12,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.25" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8" +files = [ + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.12.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter" +version = "1.1.1" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, + {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +jupyterlab = "*" +nbconvert = "*" +notebook = "*" + +[[package]] +name = "jupyter-client" +version = "8.6.2" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, + {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.2" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.2.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, + {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=40.1.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, + {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "lazy-loader" +version = "0.4" +description = "Makes it easy to load subpackages and functions on demand." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"}, + {file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +dev = ["changelist (==0.5)"] +lint = ["pre-commit (==3.7.0)"] +test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] + +[[package]] +name = "libqasm" +version = "0.6.7" +description = "libqasm Python Package" +optional = false +python-versions = "*" +files = [ + {file = "libqasm-0.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85012c73625ceb44c112a4cab9bd81664118a2b000dd47a47925d6d5711c31b4"}, + {file = "libqasm-0.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4369f7e4f036a1dd77bafcda638dfa2e2b66eda3ef3577ce8a0f650b68103c76"}, + {file = "libqasm-0.6.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc5efadc23d948b2065b405021a85e1aac9186c223bff0e8e96c96815ecf31f4"}, + {file = "libqasm-0.6.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b4e94ca70cc20a0efdc0fd7cf4322948c44c9b5c867174824d625462289a47"}, + {file = "libqasm-0.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:a39edf23f224912a14925134025209aebc60c56ac0819ed03d032760977e7516"}, + {file = "libqasm-0.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad6f4fce0cfd8bd276e8b7ce2ed91da6f34d634c3a4322e257f374e7386b6fb3"}, + {file = "libqasm-0.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a187d7b7121e8b1a51885a7b56470b94be52f9eb201a0d62afb4766f515eda0a"}, + {file = "libqasm-0.6.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecd02d4391cc539fd78459496b92580aa171f0a1660d943c61d162ae58be0d81"}, + {file = "libqasm-0.6.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1650be6510a9a6ce002f33aaa66b34ac5d1e269794c8c4683dc77459f3e61b9e"}, + {file = "libqasm-0.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:947863a5715184a59022cbba05b4518c359c49087cbfa0b27eb5eef19ea69559"}, + {file = "libqasm-0.6.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a04b16c604d5c7212bcd1d43d8ce6a6ef08057a8a5e4e793499c2988424bde5a"}, + {file = "libqasm-0.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed64ba178e33c6a48c04ce50642e751ce289c57703ede0f71304befbbc66fb42"}, + {file = "libqasm-0.6.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c04f44925416f9472af5603cf9b52e1aff4ba2d9509327c8af374c7bc22e27"}, + {file = "libqasm-0.6.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b8a15e27d79007c18e812d5ec42c62053131100cb38a36f1295476ba3407361"}, + {file = "libqasm-0.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:c74c33d4449355be9f909620e734cce0c7e7026ea56688234968e5ec3a0c12eb"}, + {file = "libqasm-0.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3573a244d5b939b3a51c17557ef56fd7bcafd550ba37a11de8e7f38933629565"}, + {file = "libqasm-0.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94228b90493625381fd23a0473c02b135dc6c9727bf26b0c7f7bfec13a822c66"}, + {file = "libqasm-0.6.7-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:161e67e58f7b78f9f53d97dc5d15c529a29c06c5dc554c92e76e70f71001aaca"}, + {file = "libqasm-0.6.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b201ddd0a608b2256f7a2364d3195012bf2e13dd655abb3f078f682676f94b9"}, + {file = "libqasm-0.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:9e7b5064921d1a7e232f5bbf5151fce532972a69135d359c10e5c12bcf7ce9e5"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "lmfit" +version = "1.3.2" +description = "Least-Squares Minimization with Bounds and Constraints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lmfit-1.3.2-py3-none-any.whl", hash = "sha256:2b834f054cd7a5172f3b431345b292e5d95ea387d6f96d60ad35a11b8efee6ac"}, + {file = "lmfit-1.3.2.tar.gz", hash = "sha256:31beeae1f027c1b8c14dcd7f2e8488a80b75fb389e77fca677549bdc2fe597bb"}, +] + +[package.dependencies] +asteval = ">=1.0" +dill = ">=0.3.4" +numpy = ">=1.19" +scipy = ">=1.6" +uncertainties = ">=3.2.2" + +[package.extras] +all = ["lmfit[dev,doc,test]"] +dev = ["build", "check-wheel-contents", "flake8-pyproject", "pre-commit", "twine"] +doc = ["Pillow", "Sphinx", "cairosvg", "corner", "emcee (>=3.0.0)", "ipykernel", "jupyter-sphinx (>=0.2.4)", "matplotlib", "numdifftools", "numexpr", "pandas", "pycairo", "sphinx-gallery (>=0.10)", "sphinxcontrib-svg2pdfconverter", "sympy"] +test = ["coverage", "flaky", "pytest", "pytest-cov"] + +[[package]] +name = "loky" +version = "3.4.1" +description = "A robust implementation of concurrent.futures.ProcessPoolExecutor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "loky-3.4.1-py3-none-any.whl", hash = "sha256:7132da80d1a057b5917ff32c7867b65ed164aae84c259a1dbc44375791280c87"}, + {file = "loky-3.4.1.tar.gz", hash = "sha256:66db350de68c301299c882ace3b8f06ba5c4cb2c45f8fcffd498160ce8280753"}, +] + +[package.dependencies] +cloudpickle = "*" + +[[package]] +name = "markdown" +version = "3.7" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, + {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marshmallow" +version = "3.22.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.22.0-py3-none-any.whl", hash = "sha256:71a2dce49ef901c3f97ed296ae5051135fd3febd2bf43afe0ae9a82143a494d9"}, + {file = "marshmallow-3.22.0.tar.gz", hash = "sha256:4972f529104a220bb8637d595aa4c9762afbe7f7a77d82dc58c1615d70c5823e"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.0.2)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "matplotlib" +version = "3.9.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "methodtools" +version = "0.4.7" +description = "Expand standard functools to methods" +optional = false +python-versions = "*" +files = [ + {file = "methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11"}, + {file = "methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba"}, +] + +[package.dependencies] +wirerope = ">=0.4.7" + +[package.extras] +doc = ["sphinx"] +test = ["functools32 (>=3.2.3-2)", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] + +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" +packaging = ">=20.5" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "1.2.0" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_autorefs-1.2.0-py3-none-any.whl", hash = "sha256:d588754ae89bd0ced0c70c06f58566a4ee43471eeeee5202427da7de9ef85a2f"}, + {file = "mkdocs_autorefs-1.2.0.tar.gz", hash = "sha256:a86b93abff653521bda71cf3fc5596342b7a23982093915cb74273f67522190f"}, +] + +[package.dependencies] +Markdown = ">=3.3" +markupsafe = ">=2.0.1" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, + {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.6.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, + {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-material" +version = "9.5.36" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"}, + {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"}, +] + +[package.dependencies] +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.6,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "mkdocstrings" +version = "0.26.1" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings-0.26.1-py3-none-any.whl", hash = "sha256:29738bfb72b4608e8e55cc50fb8a54f325dc7ebd2014e4e3881a49892d5983cf"}, + {file = "mkdocstrings-0.26.1.tar.gz", hash = "sha256:bb8b8854d6713d5348ad05b069a09f3b79edbc6a0f33a34c6821141adb03fe33"}, +] + +[package.dependencies] +click = ">=7.0" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.11.1" +Markdown = ">=3.6" +MarkupSafe = ">=1.1" +mkdocs = ">=1.4" +mkdocs-autorefs = ">=1.2" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +platformdirs = ">=2.2" +pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.10.8" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings_python-1.10.8-py3-none-any.whl", hash = "sha256:bb12e76c8b071686617f824029cb1dfe0e9afe89f27fb3ad9a27f95f054dcd89"}, + {file = "mkdocstrings_python-1.10.8.tar.gz", hash = "sha256:5856a59cbebbb8deb133224a540de1ff60bded25e54d8beacc375bb133d39016"}, +] + +[package.dependencies] +griffe = ">=0.49" +mkdocstrings = ">=0.25" + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "msal" +version = "1.30.0" +description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." +optional = false +python-versions = ">=3.7" +files = [ + {file = "msal-1.30.0-py3-none-any.whl", hash = "sha256:423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de"}, + {file = "msal-1.30.0.tar.gz", hash = "sha256:b4bf00850092e465157d814efa24a18f788284c9a479491024d62903085ea2fb"}, +] + +[package.dependencies] +cryptography = ">=2.5,<45" +PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} +requests = ">=2.0.0,<3" + +[package.extras] +broker = ["pymsalruntime (>=0.13.2,<0.17)"] + +[[package]] +name = "msal-extensions" +version = "1.2.0" +description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." +optional = false +python-versions = ">=3.7" +files = [ + {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, + {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, +] + +[package.dependencies] +msal = ">=1.29,<2" +portalocker = ">=1.4,<3" + +[[package]] +name = "mypy" +version = "1.11.2" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclient" +version = "0.10.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "notebook" +version = "7.2.2" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.2.2-py3-none-any.whl", hash = "sha256:c89264081f671bc02eec0ed470a627ed791b9156cad9285226b31611d3e9fe1c"}, + {file = "notebook-7.2.2.tar.gz", hash = "sha256:2ef07d4220421623ad3fe88118d687bc0450055570cdd160814a59cf3a1c516e"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.2.0,<4.3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "2.0.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +] + +[[package]] +name = "opencensus" +version = "0.11.4" +description = "A stats collection and distributed tracing framework" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864"}, + {file = "opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.0.0,<3.0.0", markers = "python_version >= \"3.6\""} +opencensus-context = ">=0.1.3" +six = ">=1.16,<2.0" + +[[package]] +name = "opencensus-context" +version = "0.1.3" +description = "OpenCensus Runtime Context" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-context-0.1.3.tar.gz", hash = "sha256:a03108c3c10d8c80bb5ddf5c8a1f033161fa61972a9917f9b9b3a18517f0088c"}, + {file = "opencensus_context-0.1.3-py2.py3-none-any.whl", hash = "sha256:073bb0590007af276853009fac7e4bab1d523c3f03baf4cb4511ca38967c6039"}, +] + +[[package]] +name = "opencensus-ext-azure" +version = "1.1.13" +description = "OpenCensus Azure Monitor Exporter" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-ext-azure-1.1.13.tar.gz", hash = "sha256:aec30472177005379ba56a702a097d618c5f57558e1bb6676ec75f948130692a"}, + {file = "opencensus_ext_azure-1.1.13-py2.py3-none-any.whl", hash = "sha256:06001fac6f8588ba00726a3a7c6c7f2fc88bc8ad12a65afdca657923085393dd"}, +] + +[package.dependencies] +azure-core = ">=1.12.0,<2.0.0" +azure-identity = ">=1.5.0,<2.0.0" +opencensus = ">=0.11.4,<1.0.0" +psutil = ">=5.6.3" +requests = ">=2.19.0" + +[[package]] +name = "orderly-set" +version = "5.2.2" +description = "Orderly set" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orderly_set-5.2.2-py3-none-any.whl", hash = "sha256:f7a37c95a38c01cdfe41c3ffb62925a318a2286ea0a41790c057fc802aec54da"}, + {file = "orderly_set-5.2.2.tar.gz", hash = "sha256:52a18b86aaf3f5d5a498bbdb27bf3253a4e5c57ab38e5b7a56fa00115cd28448"}, +] + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "paginate" +version = "0.5.7" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, + {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, +] + +[package.extras] +dev = ["pytest", "tox"] +lint = ["black"] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +jinja2 = {version = ">=3.1.2", optional = true, markers = "extra == \"output-formatting\""} +numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tabulate = {version = ">=0.9.0", optional = true, markers = "extra == \"output-formatting\""} +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pathvalidate" +version = "3.2.1" +description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathvalidate-3.2.1-py3-none-any.whl", hash = "sha256:9a6255eb8f63c9e2135b9be97a5ce08f10230128c4ae7b3e935378b82b22c4c9"}, + {file = "pathvalidate-3.2.1.tar.gz", hash = "sha256:f5d07b1e2374187040612a1fcd2bcb2919f8db180df254c9581bb90bf903377d"}, +] + +[package.extras] +docs = ["Sphinx (>=2.4)", "sphinx-rtd-theme (>=1.2.2)", "urllib3 (<2)"] +readme = ["path (>=13,<17)", "readmemaker (>=1.1.0)"] +test = ["Faker (>=1.0.8)", "allpairspy (>=2)", "click (>=6.2)", "pytest (>=6.0.1)", "pytest-md-report (>=0.6.2)"] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "plotly" +version = "5.23.0" +description = "An open-source, interactive data visualization library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "plotly-5.23.0-py3-none-any.whl", hash = "sha256:76cbe78f75eddc10c56f5a4ee3e7ccaade7c0a57465546f02098c0caed6c2d1a"}, + {file = "plotly-5.23.0.tar.gz", hash = "sha256:89e57d003a116303a34de6700862391367dd564222ab71f8531df70279fc0193"}, +] + +[package.dependencies] +packaging = "*" +tenacity = ">=6.2.0" + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "portalocker" +version = "2.10.1" +description = "Wraps the portalocker recipe for easy usage" +optional = false +python-versions = ">=3.8" +files = [ + {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, + {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + +[[package]] +name = "prometheus-client" +version = "0.20.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, + {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.47" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "proto-plus" +version = "1.24.0" +description = "Beautiful, Pythonic protocol buffers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, + {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<6.0.0dev" + +[package.extras] +testing = ["google-api-core (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "5.28.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0"}, + {file = "protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6"}, + {file = "protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd"}, + {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd"}, + {file = "protobuf-5.28.0-cp38-cp38-win32.whl", hash = "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8"}, + {file = "protobuf-5.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5"}, + {file = "protobuf-5.28.0-cp39-cp39-win32.whl", hash = "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b"}, + {file = "protobuf-5.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de"}, + {file = "protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0"}, + {file = "protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add"}, +] + +[[package]] +name = "psutil" +version = "6.0.0" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, + {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, + {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, + {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, + {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, + {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, + {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, + {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, + {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, + {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, + {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, + {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, + {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pyasn1" +version = "0.6.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, + {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.7.0" + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pydantic" +version = "2.8.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, + {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.20.1" +typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.20.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, + {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, + {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, + {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, + {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, + {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, + {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, + {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, + {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, + {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, + {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, + {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, + {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, + {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, + {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, + {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, + {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, + {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, + {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, + {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, + {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, + {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, + {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, + {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, + {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, + {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, + {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, + {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, + {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, + {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, + {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, + {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, + {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.9.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, + {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pymdown-extensions" +version = "10.10.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.10.1-py3-none-any.whl", hash = "sha256:6c74ea6c2e2285186a241417480fc2d3cc52941b3ec2dced4014c84dc78c5493"}, + {file = "pymdown_extensions-10.10.1.tar.gz", hash = "sha256:ad277ee4739ced051c3b6328d22ce782358a3bec39bc6ca52815ccbf44f7acdc"}, +] + +[package.dependencies] +markdown = ">=3.6" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + +[[package]] +name = "pyparsing" +version = "3.1.4" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyproject-api" +version = "1.7.1" +description = "API to interact with the python pyproject.toml based projects" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyproject_api-1.7.1-py3-none-any.whl", hash = "sha256:2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb"}, + {file = "pyproject_api-1.7.1.tar.gz", hash = "sha256:7ebc6cd10710f89f4cf2a2731710a98abce37ebff19427116ff2174c9236a827"}, +] + +[package.dependencies] +packaging = ">=24.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=70.1)"] + +[[package]] +name = "pyqt5" +version = "5.15.11" +description = "Python bindings for the Qt cross platform application toolkit" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2"}, + {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6"}, + {file = "PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1"}, + {file = "PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd"}, + {file = "PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517"}, + {file = "PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52"}, +] + +[package.dependencies] +PyQt5-Qt5 = ">=5.15.2,<5.16.0" +PyQt5-sip = ">=12.15,<13" + +[[package]] +name = "pyqt5-qt5" +version = "5.15.2" +description = "The subset of a Qt installation needed by PyQt5." +optional = false +python-versions = "*" +files = [ + {file = "PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327"}, + {file = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"}, +] + +[[package]] +name = "pyqt5-sip" +version = "12.15.0" +description = "The sip module support for PyQt5" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyQt5_sip-12.15.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:749f7a3ffd6e3d2d5db65ed92c95cbd14490631595c61f0c0672c9238bfb17de"}, + {file = "PyQt5_sip-12.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b4adc529fa4ec05728e14ea55194d907cc51f18d6f2ac5cc9f6eb52ac038aa0f"}, + {file = "PyQt5_sip-12.15.0-cp310-cp310-win32.whl", hash = "sha256:83d247cdc43ef224410b14c97413067ea26356dfa39e9ed0fe702a31e25710b0"}, + {file = "PyQt5_sip-12.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:13f0c6a78e781255863e3e160304648efaf62276b7102741af637b63a6e96930"}, + {file = "PyQt5_sip-12.15.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:855563d4d3b59ce7438bbf2dd32fed2707787defa40f3efe94f204a19ef92b25"}, + {file = "PyQt5_sip-12.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b718a362f4392430903bbb2a4b9bbff9841a16a52f0cfdd5b5bbd9d11457980"}, + {file = "PyQt5_sip-12.15.0-cp311-cp311-win32.whl", hash = "sha256:2575f428de584a12009fd29d00c89df16ed101a3b38beba818dfdcbc4a10709c"}, + {file = "PyQt5_sip-12.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c85be433fbafcb3d417581c0e1b67c8198d23858166e4f938e971c2262c13cdb"}, + {file = "PyQt5_sip-12.15.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:852b75cf208825602480e95ab63314108f872d0da251e9ad3deaaff5a183a6f5"}, + {file = "PyQt5_sip-12.15.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0cd21c3215e3c47fdd5fa7a2dc3dd1e07a7230b0626e905a7217925068c788b9"}, + {file = "PyQt5_sip-12.15.0-cp312-cp312-win32.whl", hash = "sha256:b58eeedc9b2a3037b136bf96915196c391a33be470ed1c0723d7163ef0b727a2"}, + {file = "PyQt5_sip-12.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:24a1d4937332bf0a38dd95bb2ce4d89723df449f6e912b52ef0e107e11fefac1"}, + {file = "PyQt5_sip-12.15.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:91b9538458a3a23e033c213bc879ce64f3d0a33d5a49cbd03e1e584efe307a35"}, + {file = "PyQt5_sip-12.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0c1c727ede7fdc464a1fe2e46109ba836509b2d7187a46fdeae443148ce51d1c"}, + {file = "PyQt5_sip-12.15.0-cp38-cp38-win32.whl", hash = "sha256:dd241de9c569c07bbba62bff1049996e5b52478164f61f430073a87bf6d26d33"}, + {file = "PyQt5_sip-12.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:f600ae6f03e4bff91153c0dc7ebe52f90bd2b6afda58fd580e6990b3b951adc0"}, + {file = "PyQt5_sip-12.15.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c0c543d604116af26694a8a5ba90f510551ff9124d503ae5ee14bb73a61363a3"}, + {file = "PyQt5_sip-12.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:97f2d6e8d9b7b3d3e795d576d7f56e6257f524221f6383b33ded7287763e9f06"}, + {file = "PyQt5_sip-12.15.0-cp39-cp39-win32.whl", hash = "sha256:ed5221c6241981bd98d39504823efb9cbe36841bf8917288f8fe8fc1d5569a41"}, + {file = "PyQt5_sip-12.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:7f88c85702dce80ac2e1a162054f688ed394811d6dd03a5574b3fa8111b0a6db"}, + {file = "PyQt5_sip-12.15.0.tar.gz", hash = "sha256:d23fdfcf363b5cedd9d39f8a9c5710e7d52804f5b08a58e91c638b36eafcb702"}, +] + +[[package]] +name = "pyqtgraph" +version = "0.13.7" +description = "Scientific Graphics and GUI Library for Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a"}, + {file = "pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3"}, +] + +[package.dependencies] +numpy = ">=1.22.0" + +[[package]] +name = "pyserial" +version = "3.5" +description = "Python Serial Port Extension" +optional = false +python-versions = "*" +files = [ + {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, + {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, +] + +[package.extras] +cp2110 = ["hidapi"] + +[[package]] +name = "pytest" +version = "8.3.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pyvisa" +version = "1.13.0" +description = "Python VISA bindings for GPIB, RS232, TCPIP and USB instruments" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyVISA-1.13.0-py3-none-any.whl", hash = "sha256:805c55a514b1993dd1e0e2b18377f36fb3db6c2cd4953886144307d0c80795ce"}, + {file = "PyVISA-1.13.0.tar.gz", hash = "sha256:89fa008b58465c928655459508513c51e942ca7bf3e2a727da869366e0c8f9c6"}, +] + +[package.dependencies] +typing-extensions = "*" + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.13" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "pyzmq" +version = "26.2.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, + {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, + {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, + {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, + {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, + {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, + {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, + {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qblox-instruments" +version = "0.11.2" +description = "Instrument drivers for Qblox devices." +optional = false +python-versions = ">=3.7" +files = [ + {file = "qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504"}, +] + +[package.dependencies] +fastjsonschema = "*" +ifaddr = "*" +numpy = "*" +qcodes = ">=0.20.0" +spirack = "*" + +[package.extras] +dev = ["anybadge", "pylint (==2.17.5)", "pylint-exit", "pytest", "pytest-cov", "pytest-runner", "scipy", "twine"] + +[[package]] +name = "qcodes" +version = "0.37.0" +description = "Python-based data acquisition framework developed by the Copenhagen / Delft / Sydney / Microsoft quantum computing consortium" +optional = false +python-versions = ">=3.8" +files = [ + {file = "qcodes-0.37.0-py3-none-any.whl", hash = "sha256:2e6fab6c62aa51cd3afd55ebebdaaeaf6877c9b1805fa84086f484ba06ce9249"}, + {file = "qcodes-0.37.0.tar.gz", hash = "sha256:cd1aa8ef0d2abb7b03691d5d18a19e75e523cf8849cea092f1f138a1e734c873"}, +] + +[package.dependencies] +broadbean = ">=0.9.1" +h5netcdf = ">=0.10.0,<0.14.0 || >0.14.0" +h5py = ">=3.0.0" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +ipython = ">=7.31.1,<8.0.0 || >8.0.0" +ipywidgets = ">=7.5.0,<9.0.0" +jsonschema = ">=3.0.0" +lazy-loader = ">=0.1" +matplotlib = ">=3.3.0" +numpy = ">=1.21.0" +opencensus = ">=0.7.10" +opencensus-ext-azure = ">=1.0.4,<2.0.0" +packaging = ">=20.0" +pandas = ">=1.0.0" +pillow = ">=9.0.0" +pyvisa = ">=1.11.0,<1.14.0" +rsa = ">=4.7" +"ruamel.yaml" = ">=0.16.0,<0.16.6 || >0.16.6" +tabulate = ">=0.8.0" +tqdm = ">=4.32.2" +typing-extensions = ">=4.0.0" +uncertainties = ">=3.1.4" +versioningit = ">=2.0.1" +websockets = ">=9.0" +wrapt = ">=1.10.4" +xarray = ">=0.18.0" + +[package.extras] +docs = ["PyQt5 (>=5.15.0)", "PyVisa-sim (>=0.4.0)", "autodocsumm (>=0.2.9)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "scipy (>=1.7.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)", "sphinx-favicon (>=0.2)", "sphinx-issues (>=3.0.1)", "sphinx-jsonschema (>=1.19.1)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-towncrier (>=0.3.0a0)", "towncrier (>=22.8.0)"] +qtplot = ["pyqtgraph (>=0.11.0)"] +slack = ["slack-sdk (>=3.4.2)"] +test = ["PyQt5 (>=5.15.0)", "PyVisa-sim (>=0.4.0)", "coverage[toml] (>=6.0.0)", "deepdiff (>=5.0.2)", "hypothesis (>=5.49.0)", "lxml (>=4.4.1)", "lxml-stubs (>=0.4.0)", "mypy (>=0.971)", "pandas-stubs (>=1.2.0.1)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-cov (>=3.0.0)", "pytest-mock (>=3.0.0)", "pytest-rerunfailures (>=10.0)", "pytest-xdist (>=2.0.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)", "types-jsonschema (>=4.16.0)", "types-requests (>=0.1.8)", "types-setuptools (>=57.0.0)", "types-tabulate (>=0.1.0)", "types-tqdm (>=4.64.6)"] +zurichinstruments = ["zhinst-qcodes (>=0.3)"] + +[[package]] +name = "qcodes-loop" +version = "0.1.2" +description = "Features previously in QCoDeS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "qcodes_loop-0.1.2-py3-none-any.whl", hash = "sha256:0e46b0f474f518935b38374d050920de88c15c632b7ae873171d512b9b2c75c0"}, + {file = "qcodes_loop-0.1.2.tar.gz", hash = "sha256:4e2ccd482e3d9f85dcd81989373880465557610c69fcbb7098aa60a90910ddaf"}, +] + +[package.dependencies] +h5py = ">=3.0.0" +hickle = "*" +ipython = ">=7.31.1,<8.0.0 || >8.0.0" +lazy-loader = ">=0.1" +matplotlib = ">=3.3.0" +numpy = ">=1.21.0" +pandas = ">=1.0.0" +qcodes = "*" +versioningit = ">=2.0.1" +xarray = ">=0.18.0" + +[package.extras] +docs = ["PyQt5 (>=5.15.0)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)"] +qtplot = ["pyqtgraph (>=0.11.0)"] +slack = ["slack-sdk (>=3.4.2)"] +test = ["PyQt5 (>=5.15.0)", "coverage[toml] (>=6.0.0)", "hypothesis (>=5.49.0)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-mock (>=3.0.0)", "pytest-xdist (>=2.0.0)", "slack-sdk (>=3.4.2)"] + +[[package]] +name = "quantify-core" +version = "0.7.5" +description = "Quantify-core is a unified quantum computing, solid-state and pulse sequencing physical experimentation framework." +optional = false +python-versions = ">=3.8" +files = [ + {file = "quantify-core-0.7.5.tar.gz", hash = "sha256:f8743d3cc2ca7f97386653b95d61da10846177fb42048bfab15d7ab10316053d"}, + {file = "quantify_core-0.7.5-py3-none-any.whl", hash = "sha256:f116dd8375bcad2e34945a023d2f5e618f6b6d07212fbf0b14234083e638af38"}, +] + +[package.dependencies] +adaptive = "*" +appnope = "*" +dataclasses-json = "*" +deepdiff = "*" +dill = "*" +filelock = "*" +h5netcdf = "*" +jsonschema = "*" +lmfit = ">=1.0.3" +matplotlib = "!=3.5.0" +methodtools = "*" +numpy = "!=1.19.4" +pyqt5 = ">5.15.2" +pyqtgraph = "*" +qcodes = ">=0.37.0" +qcodes-loop = "*" +scipy = ">=1.5.0,<1.6.0 || >1.6.0" +uncertainties = "*" +xarray = ">=0.19.0" + +[package.extras] +dev = ["black", "nbstripout", "pre-commit", "pre-commit-hooks", "pylint", "pyright", "pytest-cov", "pytest-xdist", "quantify-core[docs,test]", "ruff", "scikit-optimize", "sphinx-autobuild"] +docs = ["jupyter-sphinx (>=0.4.0)", "myst-nb", "pydata-sphinx-theme", "rich[jupyter]", "scanpydoc", "sphinx", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema (>=1.15)", "sphinx-togglebutton", "sphinxcontrib-bibtex"] +test = ["pytest", "pytest-mock"] + +[[package]] +name = "quantify-scheduler" +version = "0.18.2" +description = "Quantify-scheduler is a Python package for writing quantum programs featuring a hybrid gate-pulse control model with explicit timing control." +optional = false +python-versions = "<3.10,>=3.8" +files = [ + {file = "quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910"}, + {file = "quantify_scheduler-0.18.2-py3-none-any.whl", hash = "sha256:761d1e85f53e3744a28a3e56382d162ada2face3b127e83ea0e40a050566a812"}, +] + +[package.dependencies] +columnar = "*" +dataclasses-json = "*" +fastjsonschema = "*" +jinja2 = ">=3.1.2" +matplotlib = "*" +networkx = "*" +numpy = "*" +pandas = {version = "*", extras = ["output-formatting"]} +pathvalidate = "*" +plotly = "*" +pydantic = ">=2.0" +qblox-instruments = ">=0.11.0,<0.12.0" +qcodes = ">=0.32.0" +quantify-core = ">=0.7.1" +rich = {version = "*", extras = ["jupyter"]} +scipy = "*" +xxhash = "*" +zhinst = "21.8.20515" +zhinst-qcodes = "0.1.4" +zhinst-toolkit = "0.1.5" + +[package.extras] +dev = ["black", "coverage", "eval-type-backport", "pre-commit", "pre-commit-hooks", "prospector", "pyright (!=1.1.309)", "pytest-cov", "pytest-xdist", "quantify-scheduler[docs,test]", "ruff", "sphinx-autobuild"] +docs = ["astroid (<3.0)", "hvplot", "jupyter-sphinx (>=0.4.0)", "jupytext", "myst-nb", "pydata-sphinx-theme", "pylint", "rich[jupyter]", "scanpydoc (<0.12)", "sphinx", "sphinx-autoapi", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema", "sphinx-togglebutton", "sphinxcontrib-bibtex", "sphinxcontrib-mermaid"] +test = ["pytest", "pytest-mock"] + +[[package]] +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2024.7.24" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, + {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, + {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, + {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, + {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, + {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, + {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, + {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, + {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, + {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, + {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, + {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, + {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, + {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, + {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, + {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, + {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, + {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, + {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, + {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, + {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, + {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, + {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, + {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, + {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, + {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, + {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rich" +version = "13.8.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, + {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, +] + +[package.dependencies] +ipywidgets = {version = ">=7.5.1,<9", optional = true, markers = "extra == \"jupyter\""} +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.20.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, +] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.8" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.6" +files = [ + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, + {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, + {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, +] + +[[package]] +name = "ruff" +version = "0.5.7" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, +] + +[[package]] +name = "schema" +version = "0.7.7" +description = "Simple data validation library" +optional = false +python-versions = "*" +files = [ + {file = "schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde"}, + {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, +] + +[[package]] +name = "scipy" +version = "1.13.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "74.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, + {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sortedcollections" +version = "2.1.0" +description = "Python Sorted Collections" +optional = false +python-versions = "*" +files = [ + {file = "sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c"}, + {file = "sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd"}, +] + +[package.dependencies] +sortedcontainers = "*" + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + +[[package]] +name = "spirack" +version = "0.2.4" +description = "Drivers for the QuTech SPI-rack" +optional = false +python-versions = "*" +files = [ + {file = "spirack-0.2.4-py3-none-any.whl", hash = "sha256:216188eadfe3daee503c7c67a0a0d7ab334e20fcd0d2226b15a31f5d1cf420e0"}, + {file = "spirack-0.2.4.tar.gz", hash = "sha256:06a84771ac783265af9cf08052394fe3e61b74ea81f6b5f6e8cb8bc898e2a610"}, +] + +[package.dependencies] +numpy = "*" +pyserial = "*" + +[[package]] +name = "sympy" +version = "1.13.3" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, + {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "9.0.0" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, + {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "tinycss2" +version = "1.3.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "toolz" +version = "0.12.1" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"}, + {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, +] + +[[package]] +name = "tornado" +version = "6.4.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, +] + +[[package]] +name = "tox" +version = "4.20.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tox-4.20.0-py3-none-any.whl", hash = "sha256:21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34"}, + {file = "tox-4.20.0.tar.gz", hash = "sha256:5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5"}, +] + +[package.dependencies] +cachetools = ">=5.5" +chardet = ">=5.2" +colorama = ">=0.4.6" +filelock = ">=3.15.4" +packaging = ">=24.1" +platformdirs = ">=4.2.2" +pluggy = ">=1.5" +pyproject-api = ">=1.7.1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +virtualenv = ">=20.26.3" + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-argparse-cli (>=1.17)", "sphinx-autodoc-typehints (>=2.4)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=24.8)"] +testing = ["build[virtualenv] (>=1.2.2)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=9.1.1)", "distlib (>=0.3.8)", "flaky (>=3.8.1)", "hatch-vcs (>=0.4)", "hatchling (>=1.25)", "psutil (>=6)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-xdist (>=3.6.1)", "re-assert (>=1.1)", "setuptools (>=74.1.2)", "time-machine (>=2.15)", "wheel (>=0.44)"] + +[[package]] +name = "tqdm" +version = "4.66.5" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20240821" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, + {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = false +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "uncertainties" +version = "3.2.2" +description = "calculations with values with uncertainties, error propagation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7"}, + {file = "uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b"}, +] + +[package.extras] +all = ["uncertainties[arrays,doc,test]"] +arrays = ["numpy"] +doc = ["python-docs-theme", "sphinx", "sphinx-copybutton"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.2.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "versioningit" +version = "3.1.2" +description = "Versioning It with your Version In Git" +optional = false +python-versions = ">=3.8" +files = [ + {file = "versioningit-3.1.2-py3-none-any.whl", hash = "sha256:33c0905aeac7877b562171387c2c98af87b391aa9195f095455f21ddc47d4636"}, + {file = "versioningit-3.1.2.tar.gz", hash = "sha256:4db83ed99f56b07d83940bee3445ca46ca120d13b6b304cdb5fb44e5aa4edec0"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +packaging = ">=17.1" +tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "virtualenv" +version = "20.26.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, + {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "watchdog" +version = "5.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.9" +files = [ + {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3216ec994eabb2212df9861f19056ca0d4cd3516d56cb95801933876519bfe"}, + {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb59ad83a1700304fc1ac7bc53ae9e5cbe9d60a52ed9bba8e2e2d782a201bb2b"}, + {file = "watchdog-5.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1228cb097e855d1798b550be8f0e9f0cfbac4384f9a3e91f66d250d03e11294e"}, + {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3c177085c3d210d1c73cb4569442bdaef706ebebc423bd7aed9e90fc12b2e553"}, + {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01ab36cddc836a0f202c66267daaef92ba5c17c7d6436deff0587bb61234c5c9"}, + {file = "watchdog-5.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0834c21efa3e767849b09e667274604c7cdfe30b49eb95d794565c53f4db3c1e"}, + {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1e26f570dd7f5178656affb24d6f0e22ce66c8daf88d4061a27bfb9ac866b40d"}, + {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d146331e6b206baa9f6dd40f72b5783ad2302c240df68e7fce196d30588ccf7b"}, + {file = "watchdog-5.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c96b1706430839872a3e33b9370ee3f7a0079f6b828129d88498ad1f96a0f45"}, + {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:663b096368ed7831ac42259919fdb9e0a1f0a8994d972675dfbcca0225e74de1"}, + {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:685931412978d00a91a193d9018fc9e394e565e8e7a0c275512a80e59c6e85f8"}, + {file = "watchdog-5.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:109daafc5b0f2a98d1fa9475ff9737eb3559d57b18129a36495e20c71de0b44f"}, + {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c2b4d90962639ae7cee371ea3a8da506831945d4418eee090c53bc38e6648dc6"}, + {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e58eafe9cc5ceebe1562cdb89bacdcd0ef470896e8b0139fe677a5abec243da"}, + {file = "watchdog-5.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8d747bf6d8fe5ce89cb1a36c3724d1599bd4cde3f90fcba518e6260c7058a52"}, + {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bc16d448a74a929b896ed9578c25756b2125400b19b3258be8d9a681c7ae8e71"}, + {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e6b0e9b8a9dc3865d65888b5f5222da4ba9c4e09eab13cff5e305e7b7e7248f"}, + {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4fe6780915000743074236b21b6c37419aea71112af62237881bc265589fe463"}, + {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0710e9502727f688a7e06d48078545c54485b3d6eb53b171810879d8223c362a"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d76efab5248aafbf8a2c2a63cd7b9545e6b346ad1397af8b862a3bb3140787d8"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:ff4e957c45c446de34c513eadce01d0b65da7eee47c01dce472dd136124552c9"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:16c1aa3377bb1f82c5e24277fcbf4e2cac3c4ce46aaaf7212d53caa9076eb7b7"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:22fcad6168fc43cf0e709bd854be5b8edbb0b260f0a6f28f1ea9baa53c6907f7"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:0120b2fa65732797ffa65fa8ee5540c288aa861d91447df298626d6385a24658"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2aa59fab7ff75281778c649557275ca3085eccbdf825a0e2a5ca3810e977afe5"}, + {file = "watchdog-5.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:78db0fe0336958fc0e1269545c980b6f33d04d184ba191b2800a8b71d3e971a9"}, + {file = "watchdog-5.0.0-py3-none-win32.whl", hash = "sha256:d1acef802916083f2ad7988efc7decf07e46e266916c0a09d8fb9d387288ea12"}, + {file = "watchdog-5.0.0-py3-none-win_amd64.whl", hash = "sha256:3c2d50fdb86aa6df3973313272f5a17eb26eab29ff5a0bf54b6d34597b4dc4e4"}, + {file = "watchdog-5.0.0-py3-none-win_ia64.whl", hash = "sha256:1d17ec7e022c34fa7ddc72aa41bf28c9d1207ffb193df18ba4f6fde453725b3c"}, + {file = "watchdog-5.0.0.tar.gz", hash = "sha256:990aedb9e2f336b45a70aed9c014450e7c4a70fd99c5f5b1834d57e1453a177e"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "webcolors" +version = "24.8.0" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.8" +files = [ + {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, + {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["coverage[toml]"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "13.0.1" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1841c9082a3ba4a05ea824cf6d99570a6a2d8849ef0db16e9c826acb28089e8f"}, + {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c5870b4a11b77e4caa3937142b650fbbc0914a3e07a0cf3131f35c0587489c1c"}, + {file = "websockets-13.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f1d3d1f2eb79fe7b0fb02e599b2bf76a7619c79300fc55f0b5e2d382881d4f7f"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15c7d62ee071fa94a2fc52c2b472fed4af258d43f9030479d9c4a2de885fd543"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6724b554b70d6195ba19650fef5759ef11346f946c07dbbe390e039bcaa7cc3d"}, + {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a952fa2ae57a42ba7951e6b2605e08a24801a4931b5644dfc68939e041bc7f"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:17118647c0ea14796364299e942c330d72acc4b248e07e639d34b75067b3cdd8"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64a11aae1de4c178fa653b07d90f2fb1a2ed31919a5ea2361a38760192e1858b"}, + {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0617fd0b1d14309c7eab6ba5deae8a7179959861846cbc5cb528a7531c249448"}, + {file = "websockets-13.0.1-cp310-cp310-win32.whl", hash = "sha256:11f9976ecbc530248cf162e359a92f37b7b282de88d1d194f2167b5e7ad80ce3"}, + {file = "websockets-13.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c3c493d0e5141ec055a7d6809a28ac2b88d5b878bb22df8c621ebe79a61123d0"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:699ba9dd6a926f82a277063603fc8d586b89f4cb128efc353b749b641fcddda7"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf2fae6d85e5dc384bf846f8243ddaa9197f3a1a70044f59399af001fd1f51d4"}, + {file = "websockets-13.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:52aed6ef21a0f1a2a5e310fb5c42d7555e9c5855476bbd7173c3aa3d8a0302f2"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb2b9a318542153674c6e377eb8cb9ca0fc011c04475110d3477862f15d29f0"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5df891c86fe68b2c38da55b7aea7095beca105933c697d719f3f45f4220a5e0e"}, + {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac2d146ff30d9dd2fcf917e5d147db037a5c573f0446c564f16f1f94cf87462"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b8ac5b46fd798bbbf2ac6620e0437c36a202b08e1f827832c4bf050da081b501"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:46af561eba6f9b0848b2c9d2427086cabadf14e0abdd9fde9d72d447df268418"}, + {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b5a06d7f60bc2fc378a333978470dfc4e1415ee52f5f0fce4f7853eb10c1e9df"}, + {file = "websockets-13.0.1-cp311-cp311-win32.whl", hash = "sha256:556e70e4f69be1082e6ef26dcb70efcd08d1850f5d6c5f4f2bcb4e397e68f01f"}, + {file = "websockets-13.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:67494e95d6565bf395476e9d040037ff69c8b3fa356a886b21d8422ad86ae075"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f9c9e258e3d5efe199ec23903f5da0eeaad58cf6fccb3547b74fd4750e5ac47a"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6b41a1b3b561f1cba8321fb32987552a024a8f67f0d05f06fcf29f0090a1b956"}, + {file = "websockets-13.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f73e676a46b0fe9426612ce8caeca54c9073191a77c3e9d5c94697aef99296af"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f613289f4a94142f914aafad6c6c87903de78eae1e140fa769a7385fb232fdf"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f52504023b1480d458adf496dc1c9e9811df4ba4752f0bc1f89ae92f4f07d0c"}, + {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:139add0f98206cb74109faf3611b7783ceafc928529c62b389917a037d4cfdf4"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47236c13be337ef36546004ce8c5580f4b1150d9538b27bf8a5ad8edf23ccfab"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c44ca9ade59b2e376612df34e837013e2b273e6c92d7ed6636d0556b6f4db93d"}, + {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9bbc525f4be3e51b89b2a700f5746c2a6907d2e2ef4513a8daafc98198b92237"}, + {file = "websockets-13.0.1-cp312-cp312-win32.whl", hash = "sha256:3624fd8664f2577cf8de996db3250662e259bfbc870dd8ebdcf5d7c6ac0b5185"}, + {file = "websockets-13.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0513c727fb8adffa6d9bf4a4463b2bade0186cbd8c3604ae5540fae18a90cb99"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1ee4cc030a4bdab482a37462dbf3ffb7e09334d01dd37d1063be1136a0d825fa"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dbb0b697cc0655719522406c059eae233abaa3243821cfdfab1215d02ac10231"}, + {file = "websockets-13.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:acbebec8cb3d4df6e2488fbf34702cbc37fc39ac7abf9449392cefb3305562e9"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63848cdb6fcc0bf09d4a155464c46c64ffdb5807ede4fb251da2c2692559ce75"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:872afa52a9f4c414d6955c365b6588bc4401272c629ff8321a55f44e3f62b553"}, + {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e70fec7c54aad4d71eae8e8cab50525e899791fc389ec6f77b95312e4e9920"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e82db3756ccb66266504f5a3de05ac6b32f287faacff72462612120074103329"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4e85f46ce287f5c52438bb3703d86162263afccf034a5ef13dbe4318e98d86e7"}, + {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3fea72e4e6edb983908f0db373ae0732b275628901d909c382aae3b592589f2"}, + {file = "websockets-13.0.1-cp313-cp313-win32.whl", hash = "sha256:254ecf35572fca01a9f789a1d0f543898e222f7b69ecd7d5381d8d8047627bdb"}, + {file = "websockets-13.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca48914cdd9f2ccd94deab5bcb5ac98025a5ddce98881e5cce762854a5de330b"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b74593e9acf18ea5469c3edaa6b27fa7ecf97b30e9dabd5a94c4c940637ab96e"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:132511bfd42e77d152c919147078460c88a795af16b50e42a0bd14f0ad71ddd2"}, + {file = "websockets-13.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:165bedf13556f985a2aa064309baa01462aa79bf6112fbd068ae38993a0e1f1b"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e801ca2f448850685417d723ec70298feff3ce4ff687c6f20922c7474b4746ae"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30d3a1f041360f029765d8704eae606781e673e8918e6b2c792e0775de51352f"}, + {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67648f5e50231b5a7f6d83b32f9c525e319f0ddc841be0de64f24928cd75a603"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4f0426d51c8f0926a4879390f53c7f5a855e42d68df95fff6032c82c888b5f36"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ef48e4137e8799998a343706531e656fdec6797b80efd029117edacb74b0a10a"}, + {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:249aab278810bee585cd0d4de2f08cfd67eed4fc75bde623be163798ed4db2eb"}, + {file = "websockets-13.0.1-cp38-cp38-win32.whl", hash = "sha256:06c0a667e466fcb56a0886d924b5f29a7f0886199102f0a0e1c60a02a3751cb4"}, + {file = "websockets-13.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1f3cf6d6ec1142412d4535adabc6bd72a63f5f148c43fe559f06298bc21953c9"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1fa082ea38d5de51dd409434edc27c0dcbd5fed2b09b9be982deb6f0508d25bc"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a365bcb7be554e6e1f9f3ed64016e67e2fa03d7b027a33e436aecf194febb63"}, + {file = "websockets-13.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10a0dc7242215d794fb1918f69c6bb235f1f627aaf19e77f05336d147fce7c37"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59197afd478545b1f73367620407b0083303569c5f2d043afe5363676f2697c9"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d20516990d8ad557b5abeb48127b8b779b0b7e6771a265fa3e91767596d7d97"}, + {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1a2e272d067030048e1fe41aa1ec8cfbbaabce733b3d634304fa2b19e5c897f"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ad327ac80ba7ee61da85383ca8822ff808ab5ada0e4a030d66703cc025b021c4"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:518f90e6dd089d34eaade01101fd8a990921c3ba18ebbe9b0165b46ebff947f0"}, + {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:68264802399aed6fe9652e89761031acc734fc4c653137a5911c2bfa995d6d6d"}, + {file = "websockets-13.0.1-cp39-cp39-win32.whl", hash = "sha256:a5dc0c42ded1557cc7c3f0240b24129aefbad88af4f09346164349391dea8e58"}, + {file = "websockets-13.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b448a0690ef43db5ef31b3a0d9aea79043882b4632cfc3eaab20105edecf6097"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:faef9ec6354fe4f9a2c0bbb52fb1ff852effc897e2a4501e25eb3a47cb0a4f89"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:03d3f9ba172e0a53e37fa4e636b86cc60c3ab2cfee4935e66ed1d7acaa4625ad"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d450f5a7a35662a9b91a64aefa852f0c0308ee256122f5218a42f1d13577d71e"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f55b36d17ac50aa8a171b771e15fbe1561217510c8768af3d546f56c7576cdc"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14b9c006cac63772b31abbcd3e3abb6228233eec966bf062e89e7fa7ae0b7333"}, + {file = "websockets-13.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b79915a1179a91f6c5f04ece1e592e2e8a6bd245a0e45d12fd56b2b59e559a32"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f40de079779acbcdbb6ed4c65af9f018f8b77c5ec4e17a4b737c05c2db554491"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80e4ba642fc87fa532bac07e5ed7e19d56940b6af6a8c61d4429be48718a380f"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a02b0161c43cc9e0232711eff846569fad6ec836a7acab16b3cf97b2344c060"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6aa74a45d4cdc028561a7d6ab3272c8b3018e23723100b12e58be9dfa5a24491"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00fd961943b6c10ee6f0b1130753e50ac5dcd906130dcd77b0003c3ab797d026"}, + {file = "websockets-13.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d93572720d781331fb10d3da9ca1067817d84ad1e7c31466e9f5e59965618096"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:71e6e5a3a3728886caee9ab8752e8113670936a193284be9d6ad2176a137f376"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c4a6343e3b0714e80da0b0893543bf9a5b5fa71b846ae640e56e9abc6fbc4c83"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a678532018e435396e37422a95e3ab87f75028ac79570ad11f5bf23cd2a7d8c"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6716c087e4aa0b9260c4e579bb82e068f84faddb9bfba9906cb87726fa2e870"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33505534f3f673270dd67f81e73550b11de5b538c56fe04435d63c02c3f26b5"}, + {file = "websockets-13.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acab3539a027a85d568c2573291e864333ec9d912675107d6efceb7e2be5d980"}, + {file = "websockets-13.0.1-py3-none-any.whl", hash = "sha256:b80f0c51681c517604152eb6a572f5a9378f877763231fddb883ba2f968e8817"}, + {file = "websockets-13.0.1.tar.gz", hash = "sha256:4d6ece65099411cfd9a48d13701d7438d9c34f479046b34c50ff60bb8834e43e"}, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, + {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, +] + +[[package]] +name = "wirerope" +version = "0.4.7" +description = "'Turn functions and methods into fully controllable objects'" +optional = false +python-versions = "*" +files = [ + {file = "wirerope-0.4.7-py2.py3-none-any.whl", hash = "sha256:332973a3be6898f02fd0e73b2e20414c5102cc6c811d75856a938206677495c8"}, + {file = "wirerope-0.4.7.tar.gz", hash = "sha256:f3961039218276283c5037da0fa164619def0327595f10892d562a61a8603990"}, +] + +[package.dependencies] +six = ">=1.11.0" + +[package.extras] +doc = ["sphinx"] +test = ["pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + +[[package]] +name = "xarray" +version = "2024.7.0" +description = "N-D labeled arrays and datasets in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64"}, + {file = "xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638"}, +] + +[package.dependencies] +numpy = ">=1.23" +packaging = ">=23.1" +pandas = ">=2.0" + +[package.extras] +accel = ["bottleneck", "flox", "numbagg", "opt-einsum", "scipy"] +complete = ["xarray[accel,dev,io,parallel,viz]"] +dev = ["hypothesis", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff", "xarray[complete]"] +io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "scipy", "zarr"] +parallel = ["dask[complete]"] +viz = ["matplotlib", "nc-time-axis", "seaborn"] + +[[package]] +name = "xxhash" +version = "3.5.0" +description = "Python binding for xxHash" +optional = false +python-versions = ">=3.7" +files = [ + {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, + {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, + {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, + {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, + {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, + {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, + {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, + {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, + {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, + {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, + {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, + {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, + {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, + {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, + {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, + {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, + {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, + {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, + {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, + {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, + {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, + {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, + {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, +] + +[[package]] +name = "zhinst" +version = "21.8.20515" +description = "Python API for Zurich Instruments Devices" +optional = false +python-versions = "*" +files = [ + {file = "zhinst-21.8.20515-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:97f404b0f81209a8271f34dc56b95db5ba62f77c51c03fef39958fa39c1902c3"}, + {file = "zhinst-21.8.20515-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2abc92ea573233c7402314cf2f952ed909e074ea8f2b0ac87ded84aa9ba39ad3"}, + {file = "zhinst-21.8.20515-cp35-cp35m-win_amd64.whl", hash = "sha256:c6267d2f57ee28bb82455e7aea055a3e40b182f0752bc62a830768c8993216db"}, + {file = "zhinst-21.8.20515-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:85eb950c6ffa487785cc554ed56632f8a2d5c3f9e51b1cb06763cef53230a68d"}, + {file = "zhinst-21.8.20515-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:562866bf7a8f8e29f372cdf52b0dd31a9d50779e4b6e56269df21108225bf5ce"}, + {file = "zhinst-21.8.20515-cp36-cp36m-win_amd64.whl", hash = "sha256:9a07bd0eb29c4d03d02199ace0200f5b722246afd81a8a814d3631f11f2b343b"}, + {file = "zhinst-21.8.20515-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:6c253637075dad0a68add95780eca98eedab1a38fd8e2a23cc119f862368530c"}, + {file = "zhinst-21.8.20515-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b6ed4b6f81dc39a08e9ba901afda141be926359a4e33eda9c1f4b03b362c3703"}, + {file = "zhinst-21.8.20515-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:eb8dced7a41d177f2215693771170b8d1ff39afcbc883f81f9ed02e3c7881884"}, + {file = "zhinst-21.8.20515-cp37-cp37m-win_amd64.whl", hash = "sha256:9df0094eecadf7c5926a4d716b47a204c9d7417f1bd71ddb746de5109161830e"}, + {file = "zhinst-21.8.20515-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:dc9d1f7e48a00cb6f34272ded469e7806de62728874ee2139323f92ad2ed0eaa"}, + {file = "zhinst-21.8.20515-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d1c933219e6b9a3eaa9f0bb5554472c13e8b627fb67f7629b963cd2d97b213d2"}, + {file = "zhinst-21.8.20515-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ce11c44c7deea1a8659227cfbc3dd9080daa8b360250bf5cd9b2aa6d2a293a21"}, + {file = "zhinst-21.8.20515-cp38-cp38-win_amd64.whl", hash = "sha256:fcdb7863267630160bb46bf51790277760027f7c51af95bbbc852f833c56508e"}, + {file = "zhinst-21.8.20515-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:f7d7317d76b208cad0b537b230b864784a9911a7847becc991eccd2359c6cc63"}, + {file = "zhinst-21.8.20515-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c32c15604dc8d70dbcc51f6fea2f25413d6f82fe515b71c9ff815c1b2e472494"}, + {file = "zhinst-21.8.20515-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df5e562f4e928e168be8816e20b5c138e7c70306eb402ad7fc9e8a5eec893613"}, + {file = "zhinst-21.8.20515-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:db35ebcc5bb5b195de20bbfb71487159adbfc89e35b71412e06dc30c089a59b9"}, + {file = "zhinst-21.8.20515-cp39-cp39-win_amd64.whl", hash = "sha256:423966ca97d78dfdb13c4e6bd9eaba6521f84bd7fb812b973dfdb50aeb51c5aa"}, +] + +[package.dependencies] +numpy = ">=1.14" + +[[package]] +name = "zhinst-qcodes" +version = "0.1.4" +description = "Zurich Instruents drivers for QCoDeS" +optional = false +python-versions = ">=3.6" +files = [ + {file = "zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae"}, +] + +[package.dependencies] +attrs = "*" +numpy = ">=1.13" +qcodes = ">=0.14.0" +setuptools = ">=40.1.0" +zhinst = ">=20.01" +zhinst-toolkit = ">=0.1.5" + +[[package]] +name = "zhinst-toolkit" +version = "0.1.5" +description = "Zurich Instruments tools for high level device control" +optional = false +python-versions = ">=3.6" +files = [ + {file = "zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9"}, +] + +[package.dependencies] +attrs = "*" +numpy = ">=1.13" +setuptools = ">=40.1.0" +zhinst = ">=20.01" + +[[package]] +name = "zipp" +version = "3.20.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, + {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "3dde6f23e501a13b414407604f899de00be1148f358d19255977608b02ee4166" +python-versions = "^3.9" +content-hash = "de0d26bb8808d4ad0848d4b743e7ab1a3796d703fa8455f918ba247a5bd797b4" diff --git a/pyproject.toml b/pyproject.toml index cd7f98fb..d4d4c478 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,9 +3,7 @@ name = "opensquirrel" version = "0.0.5" description = "A quantum circuit transformation and manipulation tool" authors = [ - "Pablo Le Henaff ", - "Roberto Turrado Camblor ", - "Chris Elenbaas " + "Quantum Inspire " ] license = "Apache-2.0" readme = "README.md" @@ -19,7 +17,6 @@ keywords = [ classifiers = [ 'Development Status :: 3 - Alpha', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', @@ -28,28 +25,64 @@ classifiers = [ ] packages = [ { include = "opensquirrel" }, - { include = "parsing"}, ] [tool.poetry.dependencies] -python = "^3.8" -antlr4-python3-runtime = "^4.13.1" +python = "^3.9" numpy = [ { version = "1.24", python = "<3.9" }, - { version = "^1.26", python = "^3.9" }, + { version = ">=1.26", python = "^3.9" }, ] +libqasm = "0.6.7" +networkx = "^3.0.0" [tool.poetry.group.dev.dependencies] -black = "^23.11.0" coverage = {extras = ["toml"], version = "^7.3.2"} -isort = "^5.11.4" -pytest = {extras = ["toml"], version = "^7.4.3"} -pytest-cov = "^4.1.0" +pytest = {extras = ["toml"], version = ">=7.4.3,<9.0.0"} +pytest-cov = ">=4.1,<6.0" mypy = "^1.7.0" +ruff = "^0.5.0" +tox = "^4.16.0" +sympy = "^1.13.1" +IPython = "^7.12.0" + +[tool.poetry.group.docs] +optional = true + +[tool.poetry.group.docs.dependencies] +mkdocs = {extras = ["python"], version = "^1.5.3"} +mkdocstrings = {extras = ["python"], version = ">=0.24,<0.27"} +mkdocs_gen_files = {extras = ["python"], version = "^0.5.0"} +mkdocs-material = "^9.4.12" +mkdocs-literate-nav = "^0.6.1" +pymdown-extensions = "^10.7.1" + +[tool.poetry.group.examples] +optional = true + +[tool.poetry.group.examples.dependencies] +jupyter = "^1.0.0" +sympy = "^1.13.1" + +[tool.poetry.group.export] +optional = true + +[tool.poetry.group.export.dependencies] +pyqt5-qt5=[ + # This package is a transitive dependency of quantify-scheduler. + # The latest version is not portable, therefore it is necessary to pin an older version + # otherwise Poetry will try to install the latest version and fail on e.g. Windows. + { version = "5.15.2", python = "<3.10" }, +] +quantify-scheduler=[ + # quantify-scheduler is not released for newer Python versions, i.e. > 3.9. + # Its is only required for exporting OpenSquirrel circuits to the + # Schedule format and testing this functionality. + { version = "^0.18.0", python = "<3.10" }, +] [tool.pytest.ini_options] addopts = "-v --cov --cov-report term-missing:skip-covered --cov-report xml" -asyncio_mode = "auto" [tool.coverage.run] branch = true @@ -64,19 +97,88 @@ exclude_lines = [ "raise NotImplementedError", "if __name__ == .__main__.:" ] +exclude_also = ["if TYPE_CHECKING:"] -[tool.isort] -profile = "black" -multi_line_output = 3 -include_trailing_comma = true -force_grid_wrap = 0 -line_length = 120 - -[tool.black] +[tool.ruff] line-length = 120 +target-version = "py39" + +[tool.ruff.lint] +select = [ + "A", # flake8-builtins + "ANN", # flake8-annotations + "ASYNC", # flake8-async + "B", # flake8-bugbear + "BLE", # flake8-blind-except + "COM", #flake8-commas + "C4", #flake8-comprehensions + "C90", # mccabe + #"D", # pydocstyle + "DTZ", # flake8-datetimez + "E", # pycodestyle (error) + "ERA", # eradicate + "EM", # flake8-errmsg + "EXE", # flake8-executable + "F", # Pyflakes + "FA", # flake8-future-annotations + "FBT", # flake8-boolean-trap + "FIX", # flake8-fixme + "FLY", # flynt + "G", # flake8-logging-format + "I", # isort + "ISC", # flake8-implicit-str-concat + "ICN", # flake8-import-conventions + "LOG", # flake8-logging + #"N", # pep8-naming + "NPY", # NumPy-specific rules + "PD", # pandas-vet + "PERF", # Perflint + "PIE", # flake8-pie + "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib + "FURB", # refurb + "RET", # flake8-return + "RUF", # Ruff-specific rules + "S", # flake8-bandit + "SIM", # flake8-simplify + "SLF", # flake8-self + "SLOT", # flake8-slots + "TCH", # flake8-type-checking + "TRY", # tryceratops + "T20", # flake8-print + "T100", # flake8-debugger + "UP", # pyupgrade + "W", # pycodestyle (warning) + "Q", # flake8-quotes + "YTT", # flake8-2020 +] +ignore = [ + "ANN101", # self should not be typed + "ANN102", # cls should not be typed + "ANN401", # typing.Any is can be usefull (for example in __eq__) + "COM812", # Conflicts with ruff format + "ISC001", # Possible conflicts with ruff format + "W605", # deprecated in Python 3.6 +] +isort.combine-as-imports = true +pydocstyle.convention = "google" +flake8-type-checking.exempt-modules = ["typing", "typing_extensions", "numpy", "networkx", "collections"] + +[tool.ruff.lint.extend-per-file-ignores] +"test/**/*.py" = [ + "S101", # asserts allowed in tests + "FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize() + "D", # No doc requirements in tests + "SLF001", # Testing private functions is ok +] +"check_*.py" = [ + "S101", # asserts allowed in check functions + "SLF001", # Checking private functions is ok +] [tool.mypy] ignore_missing_imports = true +strict = true [build-system] requires = ["poetry-core"] diff --git a/scripts/gen_reference_page.py b/scripts/gen_reference_page.py new file mode 100644 index 00000000..fc3431a7 --- /dev/null +++ b/scripts/gen_reference_page.py @@ -0,0 +1,33 @@ +""" +Automatically add all OpenSquirrel Python modules to docs/reference.md whenever the mkdocs documentation is built. +""" + +from pathlib import Path + +import mkdocs_gen_files + +nav = mkdocs_gen_files.Nav() + +root = Path(__file__).parent.parent +src = root / "opensquirrel" + +for path in sorted(src.rglob("*.py")): + module_path = path.relative_to(root).with_suffix("") + doc_path = path.relative_to(src).with_suffix(".md") + full_doc_path = Path("reference", doc_path) + + parts = tuple(module_path.parts) + + if parts[-1] in ("__init__", "__main__"): + continue + + nav[parts] = doc_path.as_posix() + + with mkdocs_gen_files.open(full_doc_path, "w") as fd: + ident = ".".join(parts) + fd.write(f"::: {ident}") + + mkdocs_gen_files.set_edit_path(full_doc_path, path.relative_to(root)) + +with mkdocs_gen_files.open("reference/reference.md", "w") as nav_file: + nav_file.writelines(nav.build_literate_nav()) diff --git a/test/decomposer/__init__.py b/test/decomposer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/decomposer/test_cnot_decomposer.py b/test/decomposer/test_cnot_decomposer.py new file mode 100644 index 00000000..1046263d --- /dev/null +++ b/test/decomposer/test_cnot_decomposer.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CZ, SWAP, H, Ry, Rz, X +from opensquirrel.ir import ControlledGate, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> CNOTDecomposer: + return CNOTDecomposer() + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [(H(0), [H(0)]), (Rz(0, Float(2.345)), [Rz(0, Float(2.345))])], +) +def test_ignores_1q_gates(decomposer: CNOTDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +def test_ignores_matrix_gate(decomposer: CNOTDecomposer) -> None: + gate = SWAP(4, 3) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [gate] + + +def test_ignores_double_controlled(decomposer: CNOTDecomposer) -> None: + gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [gate] + + +def test_preserves_CNOT(decomposer: CNOTDecomposer) -> None: + gate = CNOT(0, 1) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [CNOT(0, 1)] + + +def test_CZ(decomposer: CNOTDecomposer) -> None: + gate = CZ(0, 1) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [ + Rz(1, Float(math.pi)), + Ry(1, Float(math.pi / 2)), + CNOT(0, 1), + Ry(1, Float(-math.pi / 2)), + Rz(1, Float(math.pi)), + ] diff --git a/test/decomposer/test_mckay_decomposer.py b/test/decomposer/test_mckay_decomposer.py new file mode 100644 index 00000000..ef7f22e5 --- /dev/null +++ b/test/decomposer/test_mckay_decomposer.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.default_gates import CNOT, CR, X90, H, I, Rz, X, Y, Z +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> McKayDecomposer: + return McKayDecomposer() + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [(CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))])], +) +def test_ignores_2q_gates(decomposer: McKayDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +def test_identity_empty_decomposition(decomposer: McKayDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +def test_x(decomposer: McKayDecomposer) -> None: + gate = X(0) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + expected_result = [X90(0), X90(0)] + assert decomposed_gate == expected_result + + +def test_y(decomposer: McKayDecomposer) -> None: + gate = Y(0) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [Rz(0, Float(math.pi)), X90(0), X90(0)] + + +def test_z(decomposer: McKayDecomposer) -> None: + gate = Z(0) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [Rz(0, Float(math.pi))] + + +def test_rz(decomposer: McKayDecomposer) -> None: + gate = Rz(0, Float(math.pi / 2)) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [Rz(0, Float(math.pi / 2))] + + +def test_hadamard(decomposer: McKayDecomposer) -> None: + gate = H(0) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [Rz(0, Float(math.pi / 2)), X90(0), Rz(0, Float(math.pi / 2))] + + +def test_arbitrary(decomposer: McKayDecomposer) -> None: + arbitrary_operation = BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324) + decomposed_arbitrary_operation = decomposer.decompose(arbitrary_operation) + check_gate_replacement(arbitrary_operation, decomposed_arbitrary_operation) + assert decomposed_arbitrary_operation == [ + Rz(0, Float(0.018644578210707863)), + X90(0), + Rz(0, Float(2.520651583905213)), + X90(0), + Rz(0, Float(2.2329420137988887)), + ] diff --git a/test/decomposer/test_xyx_decomposer.py b/test/decomposer/test_xyx_decomposer.py new file mode 100644 index 00000000..4fe8481f --- /dev/null +++ b/test/decomposer/test_xyx_decomposer.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import XYXDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> XYXDecomposer: + return XYXDecomposer() + + +def test_identity(decomposer: XYXDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (S(0), [Rx(0, Float(-math.pi / 2)), Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2))]), + (Y(0), [Ry(0, Float(math.pi))]), + (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), + (X(0), [Rx(0, Float(math.pi))]), + (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), + (H(0), [Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Rx(0, Float(-1.140443520488592)), Ry(0, Float(-1.030183660156084)), Rx(0, Float(0.8251439260060653))], + ), + ], + ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], +) +def test_xyx_decomposer(decomposer: XYXDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + xyx_decomp = XYXDecomposer() + missing_index = xyx_decomp._find_unused_index() + + assert missing_index == 2 diff --git a/test/decomposer/test_xzx_decomposer.py b/test/decomposer/test_xzx_decomposer.py new file mode 100644 index 00000000..69b68581 --- /dev/null +++ b/test/decomposer/test_xzx_decomposer.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import XZXDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Rz, S, X, Z +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> XZXDecomposer: + return XZXDecomposer() + + +def test_identity(decomposer: XZXDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (S(0), [Rz(0, Float(math.pi / 2))]), + (Z(0), [Rz(0, Float(math.pi))]), + (Rz(0, Float(0.9)), [Rz(0, Float(0.9))]), + (X(0), [Rx(0, Float(math.pi))]), + (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), + (H(0), [Rx(0, Float(math.pi / 2)), Rz(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Rx(0, Float(0.43035280630630446)), Rz(0, Float(-1.030183660156084)), Rx(0, Float(-0.7456524007888308))], + ), + ], + ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], +) +def test_xzx_decomposer(decomposer: XZXDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + xzx_decomp = XZXDecomposer() + missing_index = xzx_decomp._find_unused_index() + + assert missing_index == 1 diff --git a/test/decomposer/test_yxy_decomposer.py b/test/decomposer/test_yxy_decomposer.py new file mode 100644 index 00000000..aa982e78 --- /dev/null +++ b/test/decomposer/test_yxy_decomposer.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import YXYDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> YXYDecomposer: + return YXYDecomposer() + + +def test_identity(decomposer: YXYDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (S(0), [Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2)), Ry(0, Float(-math.pi / 2))]), + (Y(0), [Ry(0, Float(math.pi))]), + (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), + (X(0), [Rx(0, Float(math.pi))]), + (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), + (H(0), [Ry(0, Float(math.pi / 4)), Rx(0, Float(math.pi)), Ry(0, Float(-math.pi / 4))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Ry(0, Float(0.9412144817800217)), Rx(0, Float(-0.893533136099803)), Ry(0, Float(-1.5568770630164868))], + ), + ], + ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], +) +def test_yxy_decomposer(decomposer: YXYDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + yxy_decomp = YXYDecomposer() + missing_index = yxy_decomp._find_unused_index() + + assert missing_index == 2 diff --git a/test/decomposer/test_yzy_decomposer.py b/test/decomposer/test_yzy_decomposer.py new file mode 100644 index 00000000..53dbfc07 --- /dev/null +++ b/test/decomposer/test_yzy_decomposer.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import YZYDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> YZYDecomposer: + return YZYDecomposer() + + +def test_identity(decomposer: YZYDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (S(0), [Rz(0, Float(math.pi / 2))]), + (Y(0), [Ry(0, Float(math.pi))]), + (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), + (X(0), [Ry(0, Float(-math.pi / 2)), Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))]), + ( + Rx(0, Float(0.123)), + [Ry(0, Float(-math.pi / 2)), Rz(0, Float(0.12300000000000022)), Ry(0, Float(math.pi / 2))], + ), + (H(0), [Ry(0, Float(-math.pi / 4)), Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 4))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Ry(0, Float(-0.6295818450148737)), Rz(0, Float(-0.893533136099803)), Ry(0, Float(0.013919263778408464))], + ), + ], + ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], +) +def test_yzy_decomposer(decomposer: YZYDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + yzy_decomp = YZYDecomposer() + missing_index = yzy_decomp._find_unused_index() + + assert missing_index == 0 diff --git a/test/decomposer/test_zxz_decomposer.py b/test/decomposer/test_zxz_decomposer.py new file mode 100644 index 00000000..7beb7c7d --- /dev/null +++ b/test/decomposer/test_zxz_decomposer.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import ZXZDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> ZXZDecomposer: + return ZXZDecomposer() + + +def test_identity(decomposer: ZXZDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (X(0), [Rx(0, Float(math.pi))]), + (Rx(0, Float(0.9)), [Rx(0, Float(0.9))]), + (Y(0), [Rz(0, Float(-math.pi / 2)), Rx(0, Float(math.pi)), Rz(0, Float(math.pi / 2))]), + (Ry(0, Float(0.9)), [Rz(0, Float(-math.pi / 2)), Rx(0, Float(0.9000000000000004)), Rz(0, Float(math.pi / 2))]), + (Z(0), [Rz(0, Float(math.pi))]), + (Rz(0, Float(0.123)), [Rz(0, Float(0.123))]), + (H(0), [Rz(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2)), Rz(0, Float(math.pi / 2))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Rz(0, Float(-1.5521517485841891)), Rx(0, Float(-0.6209410696845807)), Rz(0, Float(0.662145687003993))], + ), + ], + ids=["CNOT", "CR", "X", "Rx", "Y", "Ry", "Z", "Rz", "H", "arbitrary"], +) +def test_zxz_decomposer(decomposer: ZXZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + zxz_decomp = ZXZDecomposer() + missing_index = zxz_decomp._find_unused_index() + + assert missing_index == 1 diff --git a/test/decomposer/test_zyz_decomposer.py b/test/decomposer/test_zyz_decomposer.py new file mode 100644 index 00000000..f523c2b5 --- /dev/null +++ b/test/decomposer/test_zyz_decomposer.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, S, Sdag, X, Y, Z +from opensquirrel.ir import BlochSphereRotation, Float, Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> ZYZDecomposer: + return ZYZDecomposer() + + +def test_identity(decomposer: ZYZDecomposer) -> None: + gate = I(0) + decomposed_gate = decomposer.decompose(gate) + assert decomposed_gate == [] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), + (X(0), [S(0), Ry(0, Float(math.pi)), Sdag(0)]), + (Rx(0, Float(0.9)), [S(0), Ry(0, Float(0.9)), Sdag(0)]), + (Y(0), [Ry(0, Float(math.pi))]), + (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), + (Z(0), [Rz(0, Float(math.pi))]), + (Rz(0, Float(0.123)), [Rz(0, Float(0.123))]), + (H(0), [Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))]), + ( + BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), + [Rz(0, Float(0.018644578210710527)), Ry(0, Float(-0.6209410696845807)), Rz(0, Float(-0.9086506397909061))], + ), + ], + ids=["CNOT", "CR", "X", "Rx", "Y", "Ry", "Z", "Rz", "H", "arbitrary"], +) +def test_zyz_decomposer(decomposer: ZYZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposer.decompose(gate) == expected_result + + +def test_find_unused_index() -> None: + zyz_decomp = ZYZDecomposer() + missing_index = zyz_decomp._find_unused_index() + + assert missing_index == 0 diff --git a/test/docs/__init__.py b/test/docs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/docs/test_tutorial.py b/test/docs/test_tutorial.py new file mode 100644 index 00000000..c9ce109a --- /dev/null +++ b/test/docs/test_tutorial.py @@ -0,0 +1,259 @@ +import math + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer +from opensquirrel.default_gates import CNOT, CZ, H, Ry, Rz +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, MatrixGate, QubitLike, named_gate + + +def test_circuit_from_string() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + // Initialise a circuit with two qubits and a bit + qubit[2] q + bit[2] b + + // Create a Bell pair + H q[0] + CNOT q[0], q[1] + + // Measure qubits + b = measure q + """ + ) + + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +H q[0] +CNOT q[0], q[1] +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) + + +def test_circuit_builder() -> None: + builder = CircuitBuilder(qubit_register_size=2) + builder.Ry(0, Float(0.23)).CNOT(0, 1) + qc = builder.to_circuit() + + assert ( + str(qc) + == """version 3.0 + +qubit[2] q + +Ry(0.23) q[0] +CNOT q[0], q[1] +""" + ) + + +def test_circuit_builder_loop() -> None: + builder = CircuitBuilder(qubit_register_size=10) + for i in range(0, 10, 2): + builder.H(i) + qc = builder.to_circuit() + + assert ( + str(qc) + == """version 3.0 + +qubit[10] q + +H q[0] +H q[2] +H q[4] +H q[6] +H q[8] +""" + ) + + +def test_circuit_builder_qft() -> None: + qubit_register_size = 5 + builder = CircuitBuilder(qubit_register_size) + for i in range(qubit_register_size): + builder.H(i) + for c in range(i + 1, qubit_register_size): + builder.CRk(c, i, c - i + 1) + qft = builder.to_circuit() + assert ( + str(qft) + == """version 3.0 + +qubit[5] q + +H q[0] +CRk(2) q[1], q[0] +CRk(3) q[2], q[0] +CRk(4) q[3], q[0] +CRk(5) q[4], q[0] +H q[1] +CRk(2) q[2], q[1] +CRk(3) q[3], q[1] +CRk(4) q[4], q[1] +H q[2] +CRk(2) q[3], q[2] +CRk(3) q[4], q[2] +H q[3] +CRk(2) q[4], q[3] +H q[4] +""" + ) + + +def test_CNOT_strong_type_error_string() -> None: + with pytest.raises(OSError, match=r".* with argument pack .*") as e_info: + Circuit.from_string( + """ + version 3.0 + qubit[2] q + + CNOT q[0], 3 // The CNOT expects a qubit as second argument. + """ + ) + + assert "failed to resolve instruction 'CNOT' with argument pack (qubit, int)" in str(e_info.value) + + +def test_anonymous_gate() -> None: + builder = CircuitBuilder(1) + for _ in range(4): + builder.Rx(0, Float(math.pi / 4)) + qc = builder.to_circuit() + + qc.merge_single_qubit_gates() + + assert ( + str(qc) + == """version 3.0 + +qubit[1] q + +Anonymous gate: BlochSphereRotation(Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) +""" + ) + + +def test_create_custom_gates() -> None: + @named_gate + def x(q: QubitLike) -> BlochSphereRotation: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) + + @named_gate + def cnot(control: QubitLike, target: QubitLike) -> ControlledGate: + return ControlledGate(control, x(target)) + + @named_gate + def swap(q1: QubitLike, q2: QubitLike) -> MatrixGate: + return MatrixGate( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + [q1, q2], + ) + + assert x(0) == BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) + assert cnot(0, 1) == ControlledGate(0, x(1)) + assert swap(0, 1) == MatrixGate( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + [0, 1], + ) + + +def test_predefined_decomposition() -> None: + qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] // Note that this notation is expanded in OpenSquirrel. + CNOT q[0], q[1] + Ry q[2], 6.78 + """ + ) + qc.replace( + CNOT, + lambda control, target: [ + H(target), + CZ(control, target), + H(target), + ], + ) + + assert ( + str(qc) + == """version 3.0 + +qubit[3] q + +X q[0] +X q[1] +X q[2] +H q[1] +CZ q[0], q[1] +H q[1] +Ry(6.78) q[2] +""" + ) + + +def test_error_predefined_decomposition() -> None: + qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] + CNOT q[0], q[1] + Ry q[2], 6.78 + """ + ) + with pytest.raises(ValueError, match=r"replacement for gate .*") as e_info: + qc.replace(CNOT, lambda control, target: [H(target), CZ(control, target)]) + + assert str(e_info.value) == "replacement for gate CNOT does not preserve the quantum state" + + +def test_zyz_decomposer() -> None: + builder = CircuitBuilder(qubit_register_size=1) + builder.H(0).Z(0).Y(0).Rx(0, Float(math.pi / 3)) + qc = builder.to_circuit() + + qc.decompose(decomposer=ZYZDecomposer()) + + assert ( + str(qc) + == """version 3.0 + +qubit[1] q + +Rz(3.1415927) q[0] +Ry(1.5707963) q[0] +Rz(3.1415927) q[0] +Ry(3.1415927) q[0] +Rz(1.5707963) q[0] +Ry(1.0471976) q[0] +Rz(-1.5707963) q[0] +""" + ) + + assert ZYZDecomposer().decompose(H(0)) == [Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))] diff --git a/test/example/tutorials/test_decompositions.py b/test/example/tutorials/test_decompositions.py new file mode 100644 index 00000000..fdc99dbc --- /dev/null +++ b/test/example/tutorials/test_decompositions.py @@ -0,0 +1,198 @@ +import math + +import sympy as sp +from IPython.display import display + +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.decomposer.aba_decomposer import XZXDecomposer, ZYZDecomposer +from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.default_gates import H, Rx, Rz +from opensquirrel.ir import Float + + +class TestDecomposition: + def test_sympy_display(self) -> None: + theta1, theta2, theta3 = sp.symbols("theta_1 theta_2 theta_3") + + z1 = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta1) + y = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta2) + z2 = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta3) + + rhs = sp.trigsimp(sp.expand(z1 * y * z2)) + + p, m = sp.symbols("p m") + + rhs_simplified = rhs.subs({theta1 + theta3: p, theta1 - theta3: m}) + + alpha, nx, ny, nz = sp.symbols("alpha n_x n_y n_z") + + q = sp.algebras.Quaternion.from_axis_angle((nx, ny, nz), alpha).subs( + {nx**2 + ny**2 + nz**2: 1} # We assume the axis is normalized. + ) + + display( + sp.Eq(rhs_simplified.a, q.a), + sp.Eq(rhs_simplified.b, q.b), + sp.Eq(rhs_simplified.c, q.c), + sp.Eq(rhs_simplified.d, q.d), + ) + + sp.trigsimp(sp.Eq(rhs_simplified.a, q.a).subs(sp.cos(theta2 / 2), nz * sp.sin(alpha / 2) / sp.sin(p / 2))) + + theta1, theta2, theta3 = sp.symbols("theta_1 theta_2 theta_3") + + y1 = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta1) + z = sp.algebras.Quaternion.from_axis_angle((0, 0, 1), theta2) + y2 = sp.algebras.Quaternion.from_axis_angle((0, 1, 0), theta3) + + rhs = sp.trigsimp(sp.expand(y1 * z * y2)) + rhs_string = ( + "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + sin(theta_2/2)*sin((theta_1 - theta_3)/2)*i " + "+ sin((theta_1 + theta_3)/2)*cos(theta_2/2)*j + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*k" + ) + assert str(rhs) == rhs_string + + def test_aba_decomposer_input_circuit_creation(self) -> None: + """This test uses the `CircuitBuilder` to build a circuit that serves as input to the ABA decomposer.""" + + builder = CircuitBuilder(qubit_register_size=1) + builder.H(0) + builder.Z(0) + builder.Y(0) + builder.Rx(0, Float(math.pi / 3)) + + # Convert the builder object into a circuit + circuit = builder.to_circuit() + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +H q[0] +Z q[0] +Y q[0] +Rx(1.0471976) q[0] +""" + ) + + def test_zyz_decomposer(self) -> None: + builder = CircuitBuilder(qubit_register_size=1) + builder.H(0) + builder.Z(0) + builder.Y(0) + builder.Rx(0, Float(math.pi / 3)) + + # Convert the builder object into a circuit + circuit = builder.to_circuit() + circuit.decompose(decomposer=ZYZDecomposer()) + + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +Rz(3.1415927) q[0] +Ry(1.5707963) q[0] +Rz(3.1415927) q[0] +Ry(3.1415927) q[0] +Rz(1.5707963) q[0] +Ry(1.0471976) q[0] +Rz(-1.5707963) q[0] +""" + ) + assert XZXDecomposer().decompose(H(0)) == [ + Rx(0, Float(math.pi / 2)), + Rz(0, Float(math.pi / 2)), + Rx(0, Float(math.pi / 2)), + ] + + def test_mckay_decomposer(self) -> None: + builder = CircuitBuilder(qubit_register_size=1) + builder.H(0) + builder.Z(0) + builder.X(0) + builder.Rx(0, Float(math.pi / 3)) + + # Convert the builder object into a circuit + circuit = builder.to_circuit() + + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +H q[0] +Z q[0] +X q[0] +Rx(1.0471976) q[0] +""" + ) + circuit.decompose(decomposer=McKayDecomposer()) + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +Rz(1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(3.1415927) q[0] +X90 q[0] +X90 q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(2.0943951) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +""" + ) + + def test_cnot_decomposer(self) -> None: + builder = CircuitBuilder(qubit_register_size=2) + builder.CZ(0, 1) + builder.CR(0, 1, Float(math.pi / 3)) + builder.CR(1, 0, Float(math.pi / 2)) + + # Convert the builder object into a circuit + circuit = builder.to_circuit() + + assert ( + str(circuit) + == """version 3.0 + +qubit[2] q + +CZ q[0], q[1] +CR(1.0471976) q[0], q[1] +CR(1.5707963) q[1], q[0] +""" + ) + circuit.decompose(decomposer=CNOTDecomposer()) + assert ( + str(circuit) + == """version 3.0 + +qubit[2] q + +Rz(-3.1415927) q[1] +Ry(1.5707963) q[1] +CNOT q[0], q[1] +Ry(-1.5707963) q[1] +Rz(3.1415927) q[1] +Rz(0.52359878) q[1] +CNOT q[0], q[1] +Rz(-0.52359878) q[1] +CNOT q[0], q[1] +Rz(0.52359878) q[0] +Rz(0.78539816) q[0] +CNOT q[1], q[0] +Rz(-0.78539816) q[0] +CNOT q[1], q[0] +Rz(0.78539816) q[1] +""" + ) diff --git a/test/exporter/__init__.py b/test/exporter/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/exporter/test_quantify_scheduler_exporter.py b/test/exporter/test_quantify_scheduler_exporter.py new file mode 100644 index 00000000..6d321562 --- /dev/null +++ b/test/exporter/test_quantify_scheduler_exporter.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +import contextlib +import importlib.util +import math +import unittest.mock +from math import isclose +from typing import Any + +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.common import ATOL +from opensquirrel.default_gates import CCZ, SWAP, H +from opensquirrel.exceptions import ExporterError +from opensquirrel.exporter import quantify_scheduler_exporter +from opensquirrel.exporter.quantify_scheduler_exporter import FIXED_POINT_DEG_PRECISION +from opensquirrel.ir import Bit, BlochSphereRotation, Float, Gate + + +class FloatEq(float): + def __eq__(self, other: Any) -> bool: + return isclose(self, other, abs_tol=ATOL) + + +class MockedQuantifyScheduler: + def __enter__(self) -> tuple[Any, Any]: + self.patch_qs = unittest.mock.patch( + "opensquirrel.exporter.quantify_scheduler_exporter.quantify_scheduler", + create=True, + ) + + self.patch_qs_gates = unittest.mock.patch( + "opensquirrel.exporter.quantify_scheduler_exporter.quantify_scheduler_gates", + create=True, + ) + + with contextlib.ExitStack() as stack: + self.mock_quantify_scheduler = stack.enter_context(self.patch_qs) + self.mock_quantify_scheduler_gates = stack.enter_context(self.patch_qs_gates) + self._stack = stack.pop_all() + + return self.mock_quantify_scheduler, self.mock_quantify_scheduler_gates + + def __exit__(self, exc_type: Any, exc_value: Any, exc_traceback: Any) -> None: + self._stack.__exit__(exc_type, exc_value, exc_traceback) + + +class TestQuantifySchedulerExporter: + def test_export(self) -> None: + builder = CircuitBuilder(3, 3) + builder.X(0) + builder.CZ(0, 1) + builder.reset(0) + builder.Rz(1, Float(2.34)) + builder.Ry(2, Float(1.23)) + builder.measure(0, Bit(0)) + builder.measure(1, Bit(1)) + builder.measure(2, Bit(2)) + circuit = builder.to_circuit() + + with MockedQuantifyScheduler() as (mock_quantify_scheduler, mock_quantify_scheduler_gates): + mock_schedule = unittest.mock.MagicMock() + mock_quantify_scheduler.Schedule.return_value = mock_schedule + + quantify_scheduler_exporter.export(circuit) + + mock_quantify_scheduler.Schedule.assert_called_with("Exported OpenSquirrel circuit") + + mock_quantify_scheduler_gates.Rxy.assert_has_calls( + [ + unittest.mock.call(theta=FloatEq(math.degrees(math.pi)), phi=FloatEq(0), qubit="q[0]"), + unittest.mock.call( + theta=FloatEq(round(math.degrees(1.23), FIXED_POINT_DEG_PRECISION)), + phi=FloatEq(math.degrees(math.pi / 2)), + qubit="q[2]", + ), + ], + ) + mock_quantify_scheduler_gates.Reset.assert_called_once_with(qubit="q[0]") + mock_quantify_scheduler_gates.CZ.assert_called_once_with(qC="q[0]", qT="q[1]") + mock_quantify_scheduler_gates.Rz.assert_called_once_with( + theta=FloatEq(round(math.degrees(2.34), FIXED_POINT_DEG_PRECISION)), + qubit="q[1]", + ) + assert mock_schedule.add.call_count == 8 + + @pytest.mark.parametrize( + "gate", + [H(0), SWAP(0, 1), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34), CCZ(0, 1, 2)], + ids=["H", "SWAP", "BSR", "CCZ"], + ) + def test_gates_not_supported(self, gate: Gate) -> None: + builder = CircuitBuilder(3) + builder.ir.add_gate(gate) + circuit = builder.to_circuit() + + with MockedQuantifyScheduler(), pytest.raises(ExporterError, match="cannot export circuit: "): + quantify_scheduler_exporter.export(circuit) + + +@pytest.mark.skipif( + importlib.util.find_spec("quantify_scheduler") is not None, + reason="quantify_scheduler is installed", +) +def test_quantify_scheduler_not_installed() -> None: + empty_circuit = CircuitBuilder(1).to_circuit() + with pytest.raises( + ModuleNotFoundError, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + quantify_scheduler_exporter.export(empty_circuit) diff --git a/test/ir_equality_test_base.py b/test/ir_equality_test_base.py new file mode 100644 index 00000000..f8eb10de --- /dev/null +++ b/test/ir_equality_test_base.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +import numpy as np +from numpy.typing import NDArray + +from opensquirrel import Circuit, circuit_matrix_calculator +from opensquirrel.common import are_matrices_equivalent_up_to_global_phase + + +def check_equivalence_up_to_global_phase(matrix_a: NDArray[np.complex128], matrix_b: NDArray[np.complex128]) -> None: + assert are_matrices_equivalent_up_to_global_phase(matrix_a, matrix_b) + + +def modify_circuit_and_check( + circuit: Circuit, + action: Callable[[Circuit], Any], + expected_circuit: Circuit | None = None, +) -> None: + """ + Checks whether the action preserves: + - the number of qubits, + - the qubit register name(s), + - the circuit matrix up to a global phase factor. + """ + # Store matrix before decompositions. + expected_matrix = circuit_matrix_calculator.get_circuit_matrix(circuit) + + action(circuit) + + # Get matrix after decompositions. + actual_matrix = circuit_matrix_calculator.get_circuit_matrix(circuit) + + check_equivalence_up_to_global_phase(actual_matrix, expected_matrix) + + if expected_circuit is not None: + assert circuit == expected_circuit diff --git a/test/mapper/__init__.py b/test/mapper/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/mapper/test_general_mapper.py b/test/mapper/test_general_mapper.py new file mode 100644 index 00000000..901d202d --- /dev/null +++ b/test/mapper/test_general_mapper.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.ir import Bit +from opensquirrel.mapper import HardcodedMapper, Mapper +from opensquirrel.mapper.mapping import Mapping + + +class TestMapper: + def test_init(self) -> None: + with pytest.raises(TypeError): + Mapper() # type: ignore[call-arg] + + def test_implementation(self) -> None: + class Mapper2(Mapper): + pass + + with pytest.raises(TypeError): + Mapper2() # type: ignore[call-arg] + + class Mapper3(Mapper2): + def __init__(self, qubit_register_size: int) -> None: + super().__init__(qubit_register_size, Mapping([0])) + + Mapper3(qubit_register_size=1) + + +class TestMapQubits: + @pytest.fixture(name="circuit") + def circuit_fixture(self) -> Circuit: + builder = CircuitBuilder(3, 1) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.comment("Qubit[1]") + builder.measure(0, Bit(0)) + return builder.to_circuit() + + @pytest.fixture(name="remapped_circuit") + def remapped_circuit_fixture(self) -> Circuit: + builder = CircuitBuilder(3, 1) + builder.H(1) + builder.CNOT(1, 0) + builder.CNOT(0, 2) + builder.comment("Qubit[1]") + builder.measure(1, Bit(0)) + return builder.to_circuit() + + def test_circuit_map(self, circuit: Circuit, remapped_circuit: Circuit) -> None: + mapper = HardcodedMapper(circuit.qubit_register_size, Mapping([1, 0, 2])) + circuit.map(mapper) + assert circuit == remapped_circuit diff --git a/test/mapper/test_mapping.py b/test/mapper/test_mapping.py new file mode 100644 index 00000000..303489a4 --- /dev/null +++ b/test/mapper/test_mapping.py @@ -0,0 +1,15 @@ +import pytest + +from opensquirrel.mapper.mapping import Mapping + + +class TestMapping: + def test_1_physical_qubit(self) -> None: + Mapping([0]) + + def test_2_physical_qubits(self) -> None: + Mapping([0, 1]) + + def test_incorrect(self) -> None: + with pytest.raises(ValueError, match="the mapping is incorrect"): + Mapping([0, 2]) diff --git a/test/mapper/test_qubit_remapper.py b/test/mapper/test_qubit_remapper.py new file mode 100644 index 00000000..4b70452d --- /dev/null +++ b/test/mapper/test_qubit_remapper.py @@ -0,0 +1,74 @@ +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.mapper.mapping import Mapping +from opensquirrel.mapper.qubit_remapper import get_remapped_ir, remap_ir + + +class TestRemapper: + @pytest.fixture() + def circuit_3(self) -> Circuit: + builder = CircuitBuilder(3) + builder.H(0) + builder.CNOT(0, 1) + builder.H(2) + return builder.to_circuit() + + @pytest.fixture() + def circuit_3_remapped(self) -> Circuit: + builder = CircuitBuilder(3) + builder.H(2) + builder.CNOT(2, 1) + builder.H(0) + return builder.to_circuit() + + @pytest.fixture() + def circuit_4(self) -> Circuit: + builder = CircuitBuilder(4) + builder.H(0) + builder.CNOT(0, 1) + builder.X(2) + builder.Y(3) + return builder.to_circuit() + + @pytest.fixture() + def circuit_4_remapped(self) -> Circuit: + builder = CircuitBuilder(4) + builder.H(3) + builder.CNOT(3, 1) + builder.X(0) + builder.Y(2) + return builder.to_circuit() + + @pytest.fixture() + def mapping_3(self) -> Mapping: + return Mapping([2, 1, 0]) + + @pytest.fixture() + def mapping_4(self) -> Mapping: + return Mapping([3, 1, 0, 2]) + + def test_get_remapped_ir_raise_value_error(self, circuit_3: Circuit, mapping_4: Mapping) -> None: + with pytest.raises(ValueError, match="mapping is larger than the qubit register size"): + get_remapped_ir(circuit_3, mapping_4) + + def test_get_remapped_ir_3_ok(self, circuit_3: Circuit, circuit_3_remapped: Circuit, mapping_3: Mapping) -> None: + circuit_3.ir = get_remapped_ir(circuit_3, mapping_3) + assert circuit_3 == circuit_3_remapped + + def test_get_remapped_ir_4_ok(self, circuit_4: Circuit, circuit_4_remapped: Circuit, mapping_4: Mapping) -> None: + circuit_4.ir = get_remapped_ir(circuit_4, mapping_4) + assert circuit_4 == circuit_4_remapped + + def test_remap_ir_raise_value_error(self, circuit_3: Circuit, mapping_4: Mapping) -> None: + with pytest.raises(ValueError, match="mapping is larger than the qubit register size"): + remap_ir(circuit_3, mapping_4) + + def test_remap_ir_3_ok(self, circuit_3: Circuit, circuit_3_remapped: Circuit, mapping_3: Mapping) -> None: + remap_ir(circuit_3, mapping_3) + assert circuit_3 == circuit_3_remapped + + def test_remap_ir_4_ok(self, circuit_4: Circuit, circuit_4_remapped: Circuit, mapping_4: Mapping) -> None: + remap_ir(circuit_4, mapping_4) + assert circuit_4 == circuit_4_remapped diff --git a/test/mapper/test_simple_mappers.py b/test/mapper/test_simple_mappers.py new file mode 100644 index 00000000..96df46ed --- /dev/null +++ b/test/mapper/test_simple_mappers.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import pytest + +from opensquirrel.mapper import HardcodedMapper, IdentityMapper +from opensquirrel.mapper.mapping import Mapping +from opensquirrel.utils.check_passes import check_mapper + + +class TestIdentityMapper: + @pytest.fixture(name="mapper") + def mapper_fixture(self) -> IdentityMapper: + return IdentityMapper(qubit_register_size=3) + + def test_compliance(self, mapper: IdentityMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: IdentityMapper) -> None: + assert mapper.get_mapping() == Mapping([0, 1, 2]) + + +class TestHardcodedMapper: + @pytest.fixture(name="mapper") + def mapper_fixture(self) -> HardcodedMapper: + qubit_register_size = 10 + mapping = Mapping([(i + 1) % qubit_register_size for i in range(qubit_register_size)]) + return HardcodedMapper(qubit_register_size, mapping) + + def test_compliance(self, mapper: HardcodedMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: HardcodedMapper) -> None: + assert mapper.get_mapping() == Mapping([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) diff --git a/test/merger/__init__.py b/test/merger/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/merger/test_merger.py b/test/merger/test_merger.py new file mode 100644 index 00000000..72ed0cd3 --- /dev/null +++ b/test/merger/test_merger.py @@ -0,0 +1,171 @@ +import math + +from opensquirrel import CircuitBuilder +from opensquirrel.default_gates import Ry, Rz +from opensquirrel.ir import Bit, BlochSphereRotation, Float, Qubit +from opensquirrel.merger import general_merger +from opensquirrel.merger.general_merger import compose_bloch_sphere_rotations +from test.ir_equality_test_base import modify_circuit_and_check + + +def test_compose_bloch_sphere_rotations_same_axis() -> None: + a = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.4) + b = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=-0.3) + composed = compose_bloch_sphere_rotations(a, b) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.1) + + +def test_compose_bloch_sphere_rotations_different_axis() -> None: + # Visualizing this in 3D is difficult... + a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=math.pi / 2) + b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-math.pi / 2) + c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=math.pi / 2) + composed = compose_bloch_sphere_rotations(a, compose_bloch_sphere_rotations(b, c)) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=math.pi) + + +def test_single_gate() -> None: + builder1 = CircuitBuilder(1) + builder1.Ry(0, Float(1.2345)) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(1) + builder2.Ry(0, Float(1.2345)) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) + + # Check that when no fusion happens, generator and arguments of gates are preserved. + assert isinstance(circuit.ir.statements[0], BlochSphereRotation) + assert circuit.ir.statements[0].generator == Ry + assert circuit.ir.statements[0].arguments == (Qubit(0), Float(1.2345)) + + +def test_two_hadamards() -> None: + builder = CircuitBuilder(4) + builder.H(2) + builder.H(2) + circuit = builder.to_circuit() + + expected_circuit = CircuitBuilder(4).to_circuit() + + modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) + + +def test_two_hadamards_different_qubits() -> None: + builder1 = CircuitBuilder(4) + builder1.H(0) + builder1.H(2) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.H(0) + builder2.H(2) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) + + +def test_merge_different_qubits() -> None: + builder1 = CircuitBuilder(4) + builder1.Ry(0, Float(math.pi / 2)) + builder1.Rx(0, Float(math.pi)) + builder1.Rz(1, Float(1.2345)) + builder1.Ry(2, Float(1)) + builder1.Ry(2, Float(3.234)) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.Rz(1, Float(1.2345)) + builder2.Ry(2, Float(4.234)) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) + + assert isinstance(circuit.ir.statements[0], BlochSphereRotation) + assert circuit.ir.statements[0].is_anonymous # When fusion happens, the resulting gate is anonymous. + + assert isinstance(circuit.ir.statements[1], BlochSphereRotation) + assert circuit.ir.statements[1].generator == Rz # Otherwise it keeps the same generator and arguments. + assert circuit.ir.statements[1].arguments == (Qubit(1), Float(1.2345)) + + assert isinstance(circuit.ir.statements[2], BlochSphereRotation) + assert circuit.ir.statements[2].is_anonymous + + +def test_merge_and_flush() -> None: + builder1 = CircuitBuilder(4) + builder1.Ry(0, Float(math.pi / 2)) + builder1.Rz(1, Float(1.5)) + builder1.Rx(0, Float(math.pi)) + builder1.Rz(1, Float(-2.5)) + builder1.CNOT(0, 1) + builder1.Ry(0, Float(3.234)) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.Rz(1, Float(-1.0)) + builder2.CNOT(0, 1) + builder2.Ry(0, Float(3.234)) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) + + assert isinstance(circuit.ir.statements[0], BlochSphereRotation) + assert circuit.ir.statements[0].is_anonymous + + assert isinstance(circuit.ir.statements[3], BlochSphereRotation) + assert circuit.ir.statements[3].generator == Ry + assert circuit.ir.statements[3].arguments == (Qubit(0), Float(3.234)) + + +def test_merge_y90_x_to_h() -> None: + builder = CircuitBuilder(1) + builder.Y90(0) + builder.X(0) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(1) + builder2.H(0) + expected_qc = builder2.to_circuit() + modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) + + +def test_no_merge_across_measure() -> None: + builder = CircuitBuilder(2, 2) + builder.H(0) + builder.measure(0, Bit(0)) + builder.H(0) + builder.H(1) + builder.measure(0, Bit(1)) + builder.H(1) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(2, 2) + builder2.H(0) + builder2.measure(0, Bit(0)) + builder2.H(0) + builder2.measure(0, Bit(1)) + expected_qc = builder2.to_circuit() + modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) + + +def test_no_merge_across_reset() -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.reset(0) + builder.H(0) + builder.H(1) + builder.reset(0) + builder.H(1) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(2) + builder2.H(0) + builder2.reset(0) + builder2.H(0) + builder2.reset(0) + expected_qc = builder2.to_circuit() + modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) diff --git a/test/parser/__init__.py b/test/parser/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/parser/libqasm/__init__.py b/test/parser/libqasm/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/parser/libqasm/test_libqasm.py b/test/parser/libqasm/test_libqasm.py new file mode 100644 index 00000000..f2d62235 --- /dev/null +++ b/test/parser/libqasm/test_libqasm.py @@ -0,0 +1,80 @@ +import pytest + +from opensquirrel.default_gates import CNOT, CR, CRk, H, I, Ry, X, default_gate_aliases, default_gate_set +from opensquirrel.ir import Float +from opensquirrel.parser.libqasm.parser import Parser + + +@pytest.fixture(name="parser") +def parser_fixture() -> Parser: + return Parser(gate_set=default_gate_set, gate_aliases=default_gate_aliases) + + +def test_simple(parser: Parser) -> None: + circuit = parser.circuit_from_string( + """ +version 3.0 + +qubit[2] q + +H q[0] +I q[0] +Ry q[1], 1.234 +CNOT q[0], q[1] +CR q[1], q[0], 5.123 +CRk q[0], q[1], 23 +""", + ) + + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [H(0), I(0), Ry(1, Float(1.234)), CNOT(0, 1), CR(1, 0, Float(5.123)), CRk(0, 1, 23)] + + +def test_sgmq(parser: Parser) -> None: + circuit = parser.circuit_from_string( + """ +version 3.0 + +qubit[20] q + +H q[5:9] +X q[13,17] +CRk q[0, 3], q[1, 4], 23 +""", + ) + + assert circuit.qubit_register_size == 20 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [H(5), H(6), H(7), H(8), H(9), X(13), X(17), CRk(0, 1, 23), CRk(3, 4, 23)] + + +def test_error(parser: Parser) -> None: + with pytest.raises(IOError, match="Error at :1:30..31: failed to resolve variable 'q'"): + parser.circuit_from_string("version 3.0; qubit[20] qu; H q[5]") + + +@pytest.mark.parametrize( + ("error_message", "circuit_string"), + [ + ( + r"parsing error: Error at :1:26\.\.27: " + r"failed to resolve instruction 'H' with argument pack \(qubit, int\)", + "version 3.0; qubit[1] q; H q[0], 1", + ), + ( + r"parsing error: Error at :1:26\.\.30: " + r"failed to resolve instruction 'CNOT' with argument pack \(qubit, int\)", + "version 3.0; qubit[1] q; CNOT q[0], 1", + ), + ( + r"parsing error: Error at :1:26\.\.28: " + r"failed to resolve instruction 'Ry' with argument pack \(qubit, float, int\)", + "version 3.0; qubit[3] q; Ry q[0], 1.23, 1", + ), + ], + ids=["H[q,i]", "CNOT[q,i]", "Ry[q,f,i]"], +) +def test_wrong_gate_argument_number_or_types(parser: Parser, error_message: str, circuit_string: str) -> None: + with pytest.raises(IOError, match=error_message): + parser.circuit_from_string(circuit_string) diff --git a/test/reindexer/test_qubit_reindexer.py b/test/reindexer/test_qubit_reindexer.py new file mode 100644 index 00000000..226533f7 --- /dev/null +++ b/test/reindexer/test_qubit_reindexer.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.default_gates import Y90, X +from opensquirrel.ir import Bit, BlochSphereRotation, ControlledGate, Gate, MatrixGate, Measure +from opensquirrel.reindexer.qubit_reindexer import get_reindexed_circuit + + +def circuit_1_reindexed() -> Circuit: + builder = CircuitBuilder(2) + builder.Y90(1) + builder.X(0) + return builder.to_circuit() + + +def replacement_gates_1() -> list[Gate]: + return [Y90(1), X(3)] + + +def replacement_gates_2() -> list[Gate | Measure]: + return [ + Measure(1, Bit(1)), + BlochSphereRotation(3, axis=(0, 0, 1), angle=math.pi), + MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [0, 3]), + ControlledGate(1, X(2)), + ] + + +def circuit_2_reindexed() -> Circuit: + builder = CircuitBuilder(4, 4) + builder.measure(0, Bit(0)) + builder.ir.add_gate(BlochSphereRotation(2, axis=(0, 0, 1), angle=math.pi)) + builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [1, 2])) + builder.ir.add_gate(ControlledGate(0, X(3))) + return builder.to_circuit() + + +@pytest.mark.parametrize( + ("replacement_gates", "qubit_indices", "bit_register_size", "circuit_reindexed"), + [ + (replacement_gates_1(), [3, 1], 0, circuit_1_reindexed()), + (replacement_gates_2(), [1, 0, 3, 2], 4, circuit_2_reindexed()), + ], + ids=["circuit1", "circuit2"], +) +def test_get_reindexed_circuit( + replacement_gates: list[Gate], + qubit_indices: list[int], + bit_register_size: int, + circuit_reindexed: Circuit, +) -> None: + circuit = get_reindexed_circuit(replacement_gates, qubit_indices, bit_register_size) + assert circuit == circuit_reindexed diff --git a/test/test_circuit_builder.py b/test/test_circuit_builder.py new file mode 100644 index 00000000..7ef3b085 --- /dev/null +++ b/test/test_circuit_builder.py @@ -0,0 +1,100 @@ +import pytest + +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.default_gates import CNOT, H, I +from opensquirrel.ir import Bit, Comment, Measure + + +class TestCircuitBuilder: + def test_simple(self) -> None: + builder = CircuitBuilder(2) + + builder.comment("A single line comment.") + builder.H(0) + builder.CNOT(0, 1) + + circuit = builder.to_circuit() + + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [ + Comment("A single line comment."), + H(0), + CNOT(0, 1), + ] + + def test_identity(self) -> None: + builder = CircuitBuilder(1) + builder.I(0) + + circuit = builder.to_circuit() + + assert circuit.qubit_register_size == 1 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [I(0)] + + def test_single_measure(self) -> None: + builder = CircuitBuilder(1, 1) + builder.measure(0, Bit(0)) + + circuit = builder.to_circuit() + + assert circuit.qubit_register_size == 1 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [Measure(0, Bit(0))] + + def test_circuit_measure(self) -> None: + builder = CircuitBuilder(2, 2) + + builder.H(0) + builder.CNOT(0, 1) + builder.measure(0, Bit(0)) + builder.measure(1, Bit(1)) + + circuit = builder.to_circuit() + + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [H(0), CNOT(0, 1), Measure(0, Bit(0)), Measure(1, Bit(1))] + + def test_chain(self) -> None: + builder = CircuitBuilder(3) + + circuit = builder.H(0).CNOT(0, 1).to_circuit() + + assert circuit.ir.statements == [H(0), CNOT(0, 1)] + + def test_gate_index_error(self) -> None: + builder = CircuitBuilder(2) + + with pytest.raises(IndexError, match="qubit index is out of bounds"): + builder.H(0).CNOT(0, 12).to_circuit() + + def test_measure_index_error(self) -> None: + builder = CircuitBuilder(2, 1) + with pytest.raises(IndexError, match="bit index is out of bounds"): + builder.H(0).measure(0, Bit(10)).to_circuit() + + def test_unknown_instruction(self) -> None: + builder = CircuitBuilder(3) + with pytest.raises(ValueError, match="unknown instruction `unknown`"): + builder.unknown(0) + + def test_wrong_number_of_arguments(self) -> None: + builder = CircuitBuilder(3) + + with pytest.raises(TypeError, match=".* takes 1 positional argument but 2 were given"): + builder.H(0, 1) + + def test_decoupling_circuit_and_builder(self) -> None: + builder = CircuitBuilder(1) + circuit = builder.to_circuit() + assert circuit.ir is not builder.ir + assert circuit.register_manager is not builder.register_manager + + def test_int_qubit_parsing(self) -> None: + builder = CircuitBuilder(3) + + circuit = builder.H(0).CNOT(0, 1).to_circuit() + + assert circuit.ir.statements == [H(0), CNOT(0, 1)] diff --git a/test/test_circuit_matrix_calculator.py b/test/test_circuit_matrix_calculator.py new file mode 100644 index 00000000..8e31332f --- /dev/null +++ b/test/test_circuit_matrix_calculator.py @@ -0,0 +1,63 @@ +from typing import Any + +import numpy as np +import pytest +from numpy.typing import NDArray + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit_matrix_calculator import get_circuit_matrix + + +@pytest.mark.parametrize( + ("builder", "expected_matrix"), + [ + (CircuitBuilder(1).H(0), np.sqrt(0.5) * np.array([[1, 1], [1, -1]])), + (CircuitBuilder(1).H(0).H(0), np.eye(2)), + (CircuitBuilder(1).H(0).H(0).H(0), np.sqrt(0.5) * np.array([[1, 1], [1, -1]])), + ( + CircuitBuilder(2).H(0).X(1), + np.sqrt(0.5) * np.array([[0, 0, 1, 1], [0, 0, 1, -1], [1, 1, 0, 0], [1, -1, 0, 0]]), + ), + ( + CircuitBuilder(2).H(1).X(0), + np.sqrt(0.5) * np.array([[0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, -1], [1, 0, -1, 0]]), + ), + (CircuitBuilder(2).CNOT(1, 0), [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]]), + (CircuitBuilder(2).CNOT(0, 1), [[1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0]]), + ( + CircuitBuilder(2).H(0).CNOT(0, 1), + np.sqrt(0.5) * np.array([[1, 1, 0, 0], [0, 0, 1, -1], [0, 0, 1, 1], [1, -1, 0, 0]]), + ), + ( + CircuitBuilder(3).H(0).CNOT(0, 2), + np.sqrt(0.5) + * np.array( + [ + [1, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, -1, 0, 0], + [0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, -1], + [0, 0, 0, 0, 1, 1, 0, 0], + [1, -1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 1], + [0, 0, 1, -1, 0, 0, 0, 0], + ], + ), + ), + ], + ids=[ + "H[0]", + "H[0]H[0]", + "H[0]H[0]H[0]", + "H[0]X[1]", + "H[1]X[0]", + "CNOT[1,0]", + "CNOT[0,1]", + "H[0]CNOT[0,1]", + "H[0]CNOT[0,2]", + ], +) +def test_get_circuit_matrix(builder: CircuitBuilder, expected_matrix: NDArray[Any]) -> None: + circuit = builder.to_circuit() + matrix = get_circuit_matrix(circuit) + np.testing.assert_almost_equal(matrix, expected_matrix) diff --git a/test/test_circuitbuilder.py b/test/test_circuitbuilder.py deleted file mode 100644 index a29d068a..00000000 --- a/test/test_circuitbuilder.py +++ /dev/null @@ -1,45 +0,0 @@ -import unittest - -from opensquirrel.CircuitBuilder import CircuitBuilder -from opensquirrel.DefaultGates import DefaultGates - - -class CircuitBuilderTest(unittest.TestCase): - def test_simple(self): - builder = CircuitBuilder(DefaultGates, 3) - - builder.h(0) - builder.cnot(0, 1) - - circuit = builder.to_circuit() - - self.assertEqual(circuit.getNumberOfQubits(), 3) - self.assertEqual(circuit.getQubitRegisterName(), "q") - self.assertEqual(len(circuit.squirrelAST.operations), 2) - self.assertEqual(circuit.squirrelAST.operations[0], ("h", (0,))) - self.assertEqual(circuit.squirrelAST.operations[1], ("cnot", (0, 1))) - - def test_chain(self): - builder = CircuitBuilder(DefaultGates, 3) - - circuit = builder.h(0).cnot(0, 1).to_circuit() - - self.assertEqual(len(circuit.squirrelAST.operations), 2) - self.assertEqual(circuit.squirrelAST.operations[0], ("h", (0,))) - self.assertEqual(circuit.squirrelAST.operations[1], ("cnot", (0, 1))) - - def test_unknown_gate(self): - builder = CircuitBuilder(DefaultGates, 3) - - with self.assertRaisesRegex(Exception, "Unknown gate or alias of gate: `un`"): - builder.un(0) - - def test_wrong_number_of_arguments(self): - builder = CircuitBuilder(DefaultGates, 3) - - with self.assertRaisesRegex(AssertionError, "Wrong number of arguments for gate `h`"): - builder.h(0, 1) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/test_decompose_mckay.py b/test/test_decompose_mckay.py deleted file mode 100644 index 0d827a5c..00000000 --- a/test/test_decompose_mckay.py +++ /dev/null @@ -1,99 +0,0 @@ -import unittest - -import numpy as np - -from opensquirrel.Common import ATOL -from opensquirrel.DefaultGates import DefaultGates -from opensquirrel.McKayDecomposer import McKayDecomposer -from opensquirrel.SquirrelAST import SquirrelAST -from opensquirrel.TestInterpreter import TestInterpreter - - -def areMatricesEqualUpToGlobalPhase(matrixA, matrixB): - firstNonZero = next( - (i, j) for i in range(matrixA.shape[0]) for j in range(matrixA.shape[1]) if abs(matrixA[i, j]) > ATOL - ) - - if abs(matrixB[firstNonZero]) < ATOL: - return False - - phaseDifference = matrixA[firstNonZero] / matrixB[firstNonZero] - - return np.allclose(matrixA, phaseDifference * matrixB) - - -class DecomposeMcKayTests(unittest.TestCase): - def checkMcKayDecomposition(self, squirrelAST, expectedAST=None): - """ - Check whether the mcKay decomposition transformation applied to the input AST preserves the - circuit matrix up to an irrelevant global phase factor. - """ - - interpreter = TestInterpreter(squirrelAST.gates) - # Store matrix before decompositions. - expectedMatrix = interpreter.process(squirrelAST) - - decomposer = McKayDecomposer(squirrelAST.gates) - output = decomposer.process(squirrelAST) - - self.assertEqual(output.nQubits, squirrelAST.nQubits) - self.assertEqual(output.qubitRegisterName, squirrelAST.qubitRegisterName) - - if expectedAST is not None: - self.assertEqual(output, expectedAST) - - # Get matrix after decompositions. - actualMatrix = interpreter.process(output) - - self.assertTrue(areMatricesEqualUpToGlobalPhase(actualMatrix, expectedMatrix)) - - def test_one(self): - ast = SquirrelAST(DefaultGates, 2, "squirrel") - - ast.addGate("ry", 0, 23847628349.123) - ast.addGate("rx", 0, 29384672.234) - ast.addGate("rz", 0, 9877.87634) - - self.checkMcKayDecomposition(ast) - - def test_two(self): - ast = SquirrelAST(DefaultGates, 2, "squirrel") - - ast.addGate("ry", 0, 23847628349.123) - ast.addGate("cnot", 0, 1) - ast.addGate("rx", 0, 29384672.234) - ast.addGate("rz", 0, 9877.87634) - ast.addGate("cnot", 0, 1) - ast.addGate("rx", 0, 29384672.234) - ast.addGate("rz", 0, 9877.87634) - - self.checkMcKayDecomposition(ast) - - def test_small_random(self): - ast = SquirrelAST(DefaultGates, 4, "q") - - ast.addGate("H", 2) - ast.addGate("cr", 2, 3, 2.123) - ast.addGate("H", 1) - ast.addGate("H", 0) - ast.addGate("H", 2) - ast.addGate("H", 1) - ast.addGate("H", 0) - ast.addGate("cr", 2, 3, 2.123) - - expectedAst = SquirrelAST(DefaultGates, 4, "q") - - expectedAst.addGate("x90", 2) - expectedAst.addGate("rz", 2, 1.5707963267948966) - expectedAst.addGate("x90", 2) - expectedAst.addGate("cr", 2, 3, 2.123) - expectedAst.addGate("x90", 2) - expectedAst.addGate("rz", 2, 1.5707963267948966) - expectedAst.addGate("x90", 2) - expectedAst.addGate("cr", 2, 3, 2.123) - - self.checkMcKayDecomposition(ast, expectedAst) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/test_integration.py b/test/test_integration.py index 5cf608aa..d1d19d8e 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -1,145 +1,327 @@ # This integration test also serves as example and code documentation. -import unittest - -from opensquirrel.Circuit import Circuit -from opensquirrel.DefaultGates import DefaultGates - - -class IntegrationTest(unittest.TestCase): - def test_simple(self): - myCircuit = Circuit.from_string( - DefaultGates, - """ - version 3.0 - - qubit[3] qreg - - ry qreg[0], 1.23 - RY qreg[1], 2.34 // Aliases for gates can be defined, here ry == RY - cnot qreg[0], qreg[1] - rx qreg[0], -2.3 - ry qreg[1], -3.14 - """, - ) - - # Decompose CNOT as - # - # -----•----- ------- Z ------- - # | == | - # -----⊕---- --- H --•-- H --- - # - - myCircuit.replace( - "cnot", lambda control, target: [("h", (target,)), ("cz", (control, target)), ("h", (target,))] - ) - - # Do 1q-gate fusion and decompose with McKay decomposition. - - myCircuit.decompose_mckay() - - # Write the transformed circuit as a cQasm3 string. - - output = str(myCircuit) - - self.assertEqual( - output, - """version 3.0 - -qubit[3] qreg - -rz qreg[0], 3.1415927 -x90 qreg[0] -rz qreg[0], 1.9115927 -x90 qreg[0] -rz qreg[1], 3.1415927 -x90 qreg[1] -rz qreg[1], 2.372389 -x90 qreg[1] -rz qreg[1], 3.1415927 -cz qreg[0], qreg[1] -rz qreg[1], 3.1415927 -x90 qreg[1] -rz qreg[1], 1.572389 -x90 qreg[1] -rz qreg[1], 3.1415927 -rz qreg[0], 1.5707963 -x90 qreg[0] -rz qreg[0], 0.84159265 -x90 qreg[0] -rz qreg[0], 1.5707963 -""", - ) - - def test_qi(self): - myCircuit = Circuit.from_string( - DefaultGates, - """ - version 3.0 - - // This is a single line comment which ends on the newline. - // The cQASM string must begin with the version instruction even before any comments. - - /* This is a multi- - line comment block */ - - - qubit[4] q //declaration - - //let us create a Bell state on 2 qubits and a |+> state on the third qubit - - H q[2] - H q[1] - H q[0] - RZ q[0], 1.5707963 - RY q[0], -0.2 - cnot q[1], q[0] - RZ q[0], 1.5789 - cnot q[1], q[0] - cnot q[1], q[2] - RZ q[1], 2.5707963 - cr q[2], q[3], 2.123 - RY q[1], -1.5707963 - - """, - ) - - myCircuit.decompose_mckay() - output = str(myCircuit) - - expected = """version 3.0 +import importlib.util + +import pytest + +from opensquirrel.circuit import Circuit +from opensquirrel.decomposer.aba_decomposer import XYXDecomposer, XZXDecomposer, ZYZDecomposer +from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.default_gates import CNOT, CZ, H +from opensquirrel.exporter.export_format import ExportFormat +from opensquirrel.ir import Measure + + +def test_Spin2_backend() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + + /* This is a multi- + line comment block */ + + qubit[4] q + bit[4] b + + H q[0:2] + Rx(1.5789) q[0] + Ry(-0.2) q[0] + Rz(1.5707963) q[0] + CNOT q[1], q[0] + CR(2.123) q[2], q[3] + CRk(2) q[0], q[2] + b = measure q + """, + ) + + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer()) + + # Replace CNOT gates with CZ gates + qc.replace( + CNOT, + lambda control, target: [ + H(target), + CZ(control, target), + H(target), + ], + ) + + # Merge single-qubit gates and decompose with McKay decomposition. + qc.merge_single_qubit_gates() + qc.decompose(decomposer=McKayDecomposer()) + + assert ( + str(qc) + == """version 3.0 qubit[4] q +bit[4] b -x90 q[1] -rz q[1], 1.5707963 -x90 q[1] -rz q[0], -0.2 -x90 q[0] -rz q[0], 1.5707963 -x90 q[0] -rz q[0], 1.5707963 -cnot q[1], q[0] -rz q[0], -2.3521427 -x90 q[0] -rz q[0], 3.1415927 -x90 q[0] -rz q[0], 0.78945 -cnot q[1], q[0] -x90 q[2] -rz q[2], 1.5707963 -x90 q[2] -cnot q[1], q[2] -cr q[2], q[3], 2.123 -rz q[1], 2.5707963 -x90 q[1] -rz q[1], 1.5707964 -x90 q[1] -rz q[1], 3.1415927 +Rz(1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(0.0081037174) q[0] +X90 q[0] +Rz(1.5707964) q[0] +X90 q[0] +Rz(-1.3707963) q[0] +CZ q[1], q[0] +Rz(1.5707963) q[2] +X90 q[2] +Rz(1.5707963) q[2] +Rz(1.0615) q[3] +X90 q[3] +Rz(1.5707963) q[3] +X90 q[3] +CZ q[2], q[3] +Rz(1.5707963) q[3] +X90 q[3] +Rz(2.0800926) q[3] +X90 q[3] +Rz(1.5707963) q[3] +CZ q[2], q[3] +Rz(1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(1.8468982) q[2] +X90 q[2] +Rz(1.5707963) q[2] +X90 q[2] +CZ q[0], q[2] +Rz(1.5707963) q[2] +X90 q[2] +Rz(2.3561945) q[2] +X90 q[2] +Rz(1.5707963) q[2] +CZ q[0], q[2] +Rz(0.78539816) q[0] +b[0] = measure q[0] +b[1] = measure q[1] +Rz(1.5707963) q[2] +X90 q[2] +Rz(1.5707963) q[2] +b[2] = measure q[2] +Rz(1.5707963) q[3] +X90 q[3] +Rz(1.5707963) q[3] +b[3] = measure q[3] """ + ) + + +def test_hectoqubit_backend() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[3] q + bit[3] b + + H q[1] + CZ q[0], q[1] + CNOT q[0], q[1] + CRk(4) q[0], q[1] + H q[0] + b[0:1] = measure q[0:1] + """, + ) + + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer()) + + # Replace CNOT gates with CZ gates + qc.replace( + CNOT, + lambda control, target: [ + H(target), + CZ(control, target), + H(target), + ], + ) + + # Merge single-qubit gates and decompose with the Rz-Ry-Rz decomposer. + qc.merge_single_qubit_gates() + qc.decompose(decomposer=ZYZDecomposer()) + + if importlib.util.find_spec("quantify_scheduler") is None: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + else: + exported_schedule = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + + assert exported_schedule.name == "Exported OpenSquirrel circuit" + + operations = [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] - self.assertEqual(output, expected) + assert operations == [ + "Rz(180, 'q[1]')", + "Rxy(90, 90, 'q[1]')", + "CZ (q[0], q[1])", + "Rz(180, 'q[1]')", + "Rxy(90, 90, 'q[1]')", + "CZ (q[0], q[1])", + "Rz(90, 'q[1]')", + "Rxy(11.25, 90, 'q[1]')", + "Rz(-90, 'q[1]')", + "CZ (q[0], q[1])", + "Rz(90, 'q[1]')", + "Rxy(-11.25, 90, 'q[1]')", + "Rz(-90, 'q[1]')", + "CZ (q[0], q[1])", + "Rz(11.25, 'q[0]')", + "Rxy(-90, 90, 'q[0]')", + "Rz(180, 'q[0]')", + "Measure q[0]", + "Rz(180, 'q[1]')", + "Rxy(90, 90, 'q[1]')", + "Measure q[1]", + ] + ir_measures = [instruction for instruction in qc.ir.statements if isinstance(instruction, Measure)] + qs_measures = [ + operation.data["gate_info"] + for operation in exported_schedule.operations.values() + if operation.data["gate_info"]["operation_type"] == "measure" + ] -if __name__ == "__main__": - unittest.main() + for i, ir_measure in enumerate(ir_measures): + assert qs_measures[i]["acq_channel_override"] == ir_measure.qubit.index + assert qs_measures[i]["acq_index"] == ir_measure.qubit.index + assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" + + +def test_hectoqubit_circuit_xyx() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[3] q + bit[3] b + + H q[1] + CZ q[0], q[1] + CNOT q[0], q[1] + CRk(4) q[0], q[1] + H q[0] + b[0:1] = measure q[0:1] + """, + ) + + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer()) + + # Replace CNOT gates with CZ gates + qc.replace( + CNOT, + lambda control, target: [ + H(target), + CZ(control, target), + H(target), + ], + ) + + # Merge single-qubit gates and decompose with the Rx-Ry-Rx decomposer. + qc.merge_single_qubit_gates() + qc.decompose(decomposer=XYXDecomposer()) + assert ( + str(qc) + == """version 3.0 + +qubit[3] q +bit[3] b + +Ry(1.5707963) q[1] +Rx(3.1415927) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Rx(3.1415927) q[1] +CZ q[0], q[1] +Rx(0.1963496) q[1] +CZ q[0], q[1] +Rx(-0.1963496) q[1] +CZ q[0], q[1] +Rx(-3.1415927) q[0] +Ry(-1.5707963) q[0] +Rx(0.1963496) q[0] +b[0] = measure q[0] +Ry(1.5707963) q[1] +Rx(3.1415927) q[1] +b[1] = measure q[1] +""" + ) + + +def test_HectoQubit_circuit_xzx() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[3] q + bit[3] b + + H q[1] + CZ q[0], q[1] + CNOT q[0], q[1] + CRk(4) q[0], q[1] + H q[0] + b[0:1] = measure q[0:1] + """, + ) + + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer()) + + # Replace CNOT gates with CZ gates + qc.replace( + CNOT, + lambda control, target: [ + H(target), + CZ(control, target), + H(target), + ], + ) + + # Merge single-qubit gates and decompose with the Rx-Ry-Rx decomposer. + qc.merge_single_qubit_gates() + qc.decompose(decomposer=XZXDecomposer()) + + assert ( + str(qc) + == """version 3.0 + +qubit[3] q +bit[3] b + +Rx(1.5707963) q[1] +Rz(1.5707963) q[1] +Rx(1.5707963) q[1] +CZ q[0], q[1] +Rx(1.5707963) q[1] +Rz(1.5707963) q[1] +Rx(1.5707963) q[1] +CZ q[0], q[1] +Rx(0.1963496) q[1] +CZ q[0], q[1] +Rx(-0.1963496) q[1] +CZ q[0], q[1] +Rx(-1.5707964) q[0] +Rz(-1.5707963) q[0] +Rx(-1.3744467) q[0] +b[0] = measure q[0] +Rx(1.5707963) q[1] +Rz(1.5707963) q[1] +Rx(1.5707963) q[1] +b[1] = measure q[1] +""" + ) diff --git a/test/test_ir.py b/test/test_ir.py new file mode 100644 index 00000000..2bb97db4 --- /dev/null +++ b/test/test_ir.py @@ -0,0 +1,336 @@ +from __future__ import annotations + +import math +from collections.abc import Sequence +from typing import Any, SupportsInt + +import numpy as np +import pytest +from numpy.typing import ArrayLike + +from opensquirrel.common import ATOL +from opensquirrel.ir import ( + Axis, + Bit, + BlochSphereRotation, + ControlledGate, + Expression, + Float, + Int, + MatrixGate, + Measure, + Qubit, +) + + +class TestAxis: + @pytest.fixture(name="axis") + def axis_fixture(self) -> Axis: + return Axis(1, 0, 0) + + @pytest.mark.parametrize("expected_class", [Sequence, Expression]) + def test_inheritance(self, axis: Axis, expected_class: type[Any]) -> None: + assert isinstance(axis, expected_class) + + def test_axis_getter(self, axis: Axis) -> None: + np.testing.assert_array_equal(axis.value, [1, 0, 0]) + + @pytest.mark.parametrize( + ("new_axis", "expected_axis"), + [ + ([0, 0, 1], [0, 0, 1]), + ([0, 3, 4], [0, 3 / 5, 4 / 5]), + (Axis(0, 1, 0), [0, 1, 0]), + ], + ) + def test_axis_setter_no_error(self, axis: Axis, new_axis: ArrayLike, expected_axis: ArrayLike) -> None: + axis.value = new_axis # type: ignore[assignment] + np.testing.assert_array_equal(axis, expected_axis) + + @pytest.mark.parametrize( + ("erroneous_axis", "expected_error", "expected_error_message"), + [ + (Qubit(1), TypeError, "axis requires an ArrayLike"), + ([0, [3], [2]], TypeError, "axis requires an ArrayLike"), + (0, ValueError, "axis requires an ArrayLike of length 3, but received an ArrayLike of length 1"), + ( + [1, 2, 3, 4], + ValueError, + "axis requires an ArrayLike of length 3, but received an ArrayLike of length 4", + ), + ], + ) + def test_axis_setter_with_error( + self, + axis: Axis, + erroneous_axis: Any, + expected_error: type[Exception], + expected_error_message: str, + ) -> None: + with pytest.raises(expected_error, match=expected_error_message): + axis.value = erroneous_axis + + def test_get_item(self, axis: Axis) -> None: + assert axis[0] == 1 + assert axis[1] == 0 + assert axis[2] == 0 + + def test_len(self, axis: Axis) -> None: + assert len(axis) == 3 + + def test_repr(self, axis: Axis) -> None: + assert repr(axis) == "Axis[1. 0. 0.]" + + def test_array(self, axis: Axis) -> None: + np.testing.assert_array_equal(axis, [1, 0, 0]) + + @pytest.mark.parametrize("other", [Axis(1, 0, 0), Axis([1, 0, 0]), Axis([[1], [0], [0]])]) + def test_eq_true(self, axis: Axis, other: Any) -> None: + assert axis == other + + @pytest.mark.parametrize("other", ["test", Axis(0, 1, 0)]) + def test_eq_false(self, axis: Axis, other: Any) -> None: + assert axis != other + + +class TestIR: + def test_cnot_equality(self) -> None: + matrix = np.array( + [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + ], + ) + cnot_matrix_gate = MatrixGate(matrix, operands=[4, 100]) + + cnot_controlled_gate = ControlledGate( + 4, + BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), + ) + + assert cnot_controlled_gate == cnot_matrix_gate + + def test_different_qubits_gate(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1], + ] + large_identity_matrix_gate = MatrixGate(matrix, operands=[0, 2]) + small_identity_control_gate = ControlledGate(4, BlochSphereRotation(qubit=2, axis=(1, 0, 0), angle=0, phase=0)) + + assert large_identity_matrix_gate == small_identity_control_gate + + def test_inverse_gate(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + [0, 1, 0, 0], + ] + inverted_matrix_gate = MatrixGate(matrix, operands=[0, 1]) + + inverted_cnot_gate = ControlledGate( + 1, + BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), + ) + + assert inverted_matrix_gate == inverted_cnot_gate + + def test_global_phase(self) -> None: + matrix = [ + [1j, 0, 0, 0], + [0, 0, 0, 1j], + [0, 0, 1j, 0], + [0, 1j, 0, 0], + ] + inverted_matrix_with_phase = MatrixGate(matrix, operands=[0, 1]) + + inverted_cnot_gate = ControlledGate( + 1, + BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), + ) + + assert inverted_matrix_with_phase == inverted_cnot_gate + + def test_cnot_inequality(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ] + swap_matrix_gate = MatrixGate(matrix, operands=[4, 100]) + + cnot_controlled_gate = ControlledGate( + 4, + BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), + ) + + assert cnot_controlled_gate != swap_matrix_gate + + def test_hash_difference_bit_qubit(self) -> None: + assert hash(Qubit(1)) != hash(Bit(1)) + + +class TestMeasure: + @pytest.fixture(name="measure") + def measure_fixture(self) -> Measure: + return Measure(42, Bit(42), axis=(0, 0, 1)) + + def test_repr(self, measure: Measure) -> None: + expected_repr = "Measure(qubit=Qubit[42], bit=Bit[42], axis=Axis[0. 0. 1.])" + assert repr(measure) == expected_repr + + def test_equality(self, measure: Measure) -> None: + measure_eq = Measure(42, Bit(42), axis=(0, 0, 1)) + assert measure == measure_eq + + @pytest.mark.parametrize( + "other_measure", + [Measure(43, Bit(43), axis=(0, 0, 1)), Measure(42, Bit(42), axis=(1, 0, 0)), "test"], + ids=["qubit", "axis", "type"], + ) + def test_inequality(self, measure: Measure, other_measure: Measure | str) -> None: + assert measure != other_measure + + def test_get_bit_operands(self, measure: Measure) -> None: + assert measure.get_bit_operands() == [Bit(42)] + + def test_get_qubit_operands(self, measure: Measure) -> None: + assert measure.get_qubit_operands() == [Qubit(42)] + + +class TestBlochSphereRotation: + @pytest.fixture(name="gate") + def gate_fixture(self) -> BlochSphereRotation: + return BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau) + + def test_identity(self) -> None: + expected_result = BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=0, phase=0) + assert BlochSphereRotation.identity(42) == expected_result + + @pytest.mark.parametrize( + "other_gate", + [ + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(1 + ATOL / 2, 0, 0), angle=math.pi, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi + ATOL / 2, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau + ATOL / 2), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi + math.tau, phase=math.tau), + ], + ids=["all_equal", "close_axis", "close_angle", "close_phase", "angle+tau"], + ) + def test_equality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation) -> None: + assert gate == other_gate + + @pytest.mark.parametrize( + "other_gate", + [ + BlochSphereRotation(qubit=43, axis=(1, 0, 0), angle=math.pi, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(0, 1, 0), angle=math.pi, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=0, phase=math.tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=1), + "test", + ], + ids=["qubit", "axis", "angle", "phase", "type"], + ) + def test_inequality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation | str) -> None: + assert gate != other_gate + + def test_get_qubit_operands(self, gate: BlochSphereRotation) -> None: + assert gate.get_qubit_operands() == [Qubit(42)] + + def test_is_identity(self, gate: BlochSphereRotation) -> None: + assert BlochSphereRotation.identity(42).is_identity() + assert not gate.is_identity() + + +class TestMatrixGate: + @pytest.fixture(name="gate") + def gate_fixture(self) -> MatrixGate: + cnot_matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + ] + return MatrixGate(cnot_matrix, operands=[42, 100]) + + def test_array_like(self) -> None: + gate = MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]) + assert ( + repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], " + "matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n [0.+0.j 0.+0.j 0.+0.j 1.+0.j]\n [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + ) + + def test_incorrect_array(self) -> None: + with pytest.raises(ValueError, match=".* inhomogeneous shape after .*") as e_info: + MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0]], [0, 1]) + assert "setting an array element with a sequence." in str(e_info.value) + + def test_repr(self, gate: MatrixGate) -> None: + assert ( + repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], " + "matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n [0.+0.j 0.+0.j 0.+0.j 1.+0.j]\n [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + ) + + def test_get_qubit_operands(self, gate: MatrixGate) -> None: + assert gate.get_qubit_operands() == [Qubit(42), Qubit(100)] + + def test_is_identity(self, gate: MatrixGate) -> None: + assert MatrixGate(np.eye(4, dtype=np.complex128), operands=[42, 100]).is_identity() + assert not gate.is_identity() + + def test_matrix_gate_same_control_and_target_qubit(self) -> None: + with pytest.raises(ValueError, match="control and target qubit cannot be the same"): + MatrixGate(np.eye(4, dtype=np.complex128), [0, 0]) + + +class TestControlledGate: + def test_control_gate_same_control_and_target_qubit(self) -> None: + with pytest.raises(ValueError, match="control and target qubit cannot be the same"): + ControlledGate(0, BlochSphereRotation(0, [0, 0, 1], angle=np.pi)) + + +class TestFloat: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="value must be a float"): + Float("f") # type: ignore + + def test_init(self) -> None: + assert Float(1).value == 1.0 + + +class TestInt: + @pytest.mark.parametrize("value", ["f", None, {1}]) + def test_type_error(self, value: Any) -> None: + with pytest.raises(TypeError, match="value must be an int"): + Int(value) + + @pytest.mark.parametrize("value", [1, 1.0, 1.1, Int(1)]) + def test_init(self, value: SupportsInt) -> None: + assert Int(value).value == 1 + + +class TestBit: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="index must be an int"): + Bit("f") # type: ignore + + def test_init(self) -> None: + assert str(Bit(1)) == "Bit[1]" + + +class TestQubit: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="index must be a QubitLike"): + Qubit("f") # type: ignore + + def test_init(self) -> None: + assert str(Qubit(1)) == "Qubit[1]" diff --git a/test/test_measure.py b/test/test_measure.py new file mode 100644 index 00000000..c7a31f8b --- /dev/null +++ b/test/test_measure.py @@ -0,0 +1,169 @@ +from opensquirrel import Circuit +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer + + +def test_measure() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + b[0, 1] = measure q[0, 1] + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) + + +def test_consecutive_measures() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[3] q + bit[3] b + + H q[0] + H q[1] + H q[2] + b[0] = measure q[0] + b[2] = measure q[2] + b[1] = measure q[1] + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[3] q +bit[3] b + +H q[0] +H q[1] +H q[2] +b[0] = measure q[0] +b[2] = measure q[2] +b[1] = measure q[1] +""" + ) + + +def test_measures_unrolling() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[6] q + bit[6] b + + H q[0] + CNOT q[0], q[1] + b[1, 4] = measure q[1, 4] + b[2:5] = measure q[0:3] + b = measure q + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[6] q +bit[6] b + +H q[0] +CNOT q[0], q[1] +b[1] = measure q[1] +b[4] = measure q[4] +b[2] = measure q[0] +b[3] = measure q[1] +b[4] = measure q[2] +b[5] = measure q[3] +b[0] = measure q[0] +b[1] = measure q[1] +b[2] = measure q[2] +b[3] = measure q[3] +b[4] = measure q[4] +b[5] = measure q[5] +""" + ) + + +def test_measure_order() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + Rz(-pi/3) q[0] + Rz(pi/2) q[1] + b[1, 0] = measure q[1, 0] + """, + ) + qc.merge_single_qubit_gates() + qc.decompose(decomposer=McKayDecomposer()) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +Rz(1.5707963) q[1] +b[1] = measure q[1] +Rz(-1.0471976) q[0] +b[0] = measure q[0] +""" + ) + + +def test_multiple_qubit_bit_definitions_and_mid_circuit_measure_instructions() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit q0 + bit b0 + X q0 + b0 = measure q0 + + qubit q1 + bit b1 + H q1 + CNOT q1, q0 + b1 = measure q1 + b0 = measure q0 + """, + ) + qc.merge_single_qubit_gates() + qc.decompose(decomposer=McKayDecomposer()) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +X90 q[0] +X90 q[0] +b[0] = measure q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +CNOT q[1], q[0] +b[1] = measure q[1] +b[0] = measure q[0] +""" + ) diff --git a/test/test_parsing.py b/test/test_parsing.py deleted file mode 100644 index dfa63246..00000000 --- a/test/test_parsing.py +++ /dev/null @@ -1,149 +0,0 @@ -import unittest - -import antlr4 - -from opensquirrel.DefaultGates import DefaultGates -from opensquirrel.SquirrelASTCreator import SquirrelASTCreator -from opensquirrel.SquirrelErrorHandler import SquirrelErrorHandler, SquirrelParseException -from opensquirrel.TypeChecker import TypeChecker -from parsing.GeneratedParsingCode import CQasm3Lexer, CQasm3Parser - - -class ParsingTest(unittest.TestCase): - def setUp(self): - self.gates = DefaultGates - self.astCreator = SquirrelASTCreator(DefaultGates) - - def typeCheck(self, cQasm3String): - input_stream = antlr4.InputStream(cQasm3String) - - lexer = CQasm3Lexer.CQasm3Lexer(input_stream) - - stream = antlr4.CommonTokenStream(lexer) - - parser = CQasm3Parser.CQasm3Parser(stream) - - parser.removeErrorListeners() - parser.addErrorListener(SquirrelErrorHandler()) - - tree = parser.prog() - - typeChecker = TypeChecker(self.gates) - typeChecker.visit(tree) - - return tree - - def getAST(self, cQasm3String): - tree = self.typeCheck(cQasm3String) - return self.astCreator.visit(tree) - - def test_empty(self): - with self.assertRaisesRegex(SquirrelParseException, "Parsing error at 1:0: mismatched input '' expecting"): - self.typeCheck("") - - def test_illegal(self): - with self.assertRaisesRegex( - SquirrelParseException, "Parsing error at 1:0: mismatched input 'illegal' expecting" - ): - self.typeCheck("illegal") - - def test_no_qubits(self): - with self.assertRaisesRegex( - SquirrelParseException, "Parsing error at 1:14: mismatched input 'h' expecting 'qubit" - ): - self.typeCheck("version 3.0; h q[0]") - - def test_wrong_version(self): - with self.assertRaisesRegex( - SquirrelParseException, "Parsing error at 1:8: mismatched input '3.1' expecting '3.0'" - ): - self.typeCheck("version 3.1; qubit[1] q; h q[0]") - - def test_unknown_gate(self): - with self.assertRaisesRegex(Exception, "Unknown gate `unknowngate`"): - self.typeCheck("version 3.0; qubit[1] q; unknowngate q[0]") - - def test_wrong_argument_type(self): - with self.assertRaisesRegex( - Exception, "Argument #1 passed to gate `rx` is of type ArgType.INT but should be ArgType.FLOAT" - ): - self.typeCheck("version 3.0; qubit[1] q; rx q[0], 42") - - def test_wrong_argument_type_2(self): - with self.assertRaisesRegex( - Exception, "Argument #0 passed to gate `rx` is of type ArgType.FLOAT but should be ArgType.QUBIT" - ): - self.typeCheck("version 3.0; qubit[1] q; rx 42., q[0]") - - # FIXME: add comments to AST when parsing? - - def test_simple(self): - ast = self.getAST( - """ - version 3.0 - - qubit[1] qu - - h qu[0] - """ - ) - - self.assertEqual(ast.nQubits, 1) - self.assertEqual(ast.qubitRegisterName, "qu") - self.assertEqual(len(ast.operations), 1) - self.assertEqual(ast.operations[0], ("h", (0,))) - - def test_r_xyz(self): - ast = self.getAST( - """ -version 3.0 - qubit[2] squirrel - - h squirrel[0]; - rx squirrel[1], 1.23;;;;; - ry squirrel[0], -42.;;;;; - """ - ) - - self.assertEqual(ast.nQubits, 2) - self.assertEqual(ast.qubitRegisterName, "squirrel") - self.assertEqual(len(ast.operations), 3) - self.assertEqual(ast.operations[0], ("h", (0,))) - self.assertEqual(ast.operations[1], ("rx", (1, 1.23))) - self.assertEqual(ast.operations[2], ("ry", (0, -42))) - - def test_multiple_qubits(self): - ast = self.getAST( - """ -version 3.0 - qubit[10] large - - h large[0,3,6]; - x90 large[4:5]; - """ - ) - - self.assertEqual(ast.nQubits, 10) - self.assertEqual(ast.qubitRegisterName, "large") - self.assertEqual(len(ast.operations), 5) - self.assertEqual(ast.operations[0], ("h", (0,))) - self.assertEqual(ast.operations[1], ("h", (3,))) - self.assertEqual(ast.operations[2], ("h", (6,))) - self.assertEqual(ast.operations[3], ("x90", (4,))) - self.assertEqual(ast.operations[4], ("x90", (5,))) - - def test_aliases(self): - ast = self.getAST( - """ -version 3.0 - qubit[2] q; - - H q[1] - """ - ) - - self.assertEqual(ast.operations[0], ("H", (1,))) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/test_registers.py b/test/test_registers.py new file mode 100644 index 00000000..d8a85bc5 --- /dev/null +++ b/test/test_registers.py @@ -0,0 +1,40 @@ +from opensquirrel import Circuit +from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer + + +def test_qubit_variable_b_and_bit_variable_q() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[2] b + bit[2] q + X b[0] + q[0] = measure b[0] + + H b[1] + CNOT b[1], b[00] + q[1] = measure b[1] + q[0] = measure b[0] + """, + ) + qc.merge_single_qubit_gates() + qc.decompose(decomposer=McKayDecomposer()) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +X90 q[0] +X90 q[0] +b[0] = measure q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +CNOT q[1], q[0] +b[1] = measure q[1] +b[0] = measure q[0] +""" + ) diff --git a/test/test_replacer.py b/test/test_replacer.py index 59f0869b..f38375b3 100644 --- a/test/test_replacer.py +++ b/test/test_replacer.py @@ -1,33 +1,137 @@ -import unittest +from __future__ import annotations -from opensquirrel.DefaultGates import DefaultGates -from opensquirrel.Replacer import Replacer -from opensquirrel.SquirrelAST import SquirrelAST +import math +import pytest -def hadamard_decomposition(q): - return [ - ("y90", (q,)), - ("x", (q,)), - ] +from opensquirrel import CircuitBuilder +from opensquirrel.decomposer import Decomposer +from opensquirrel.decomposer.general_decomposer import check_gate_replacement, decompose, replace +from opensquirrel.default_gates import CNOT, Y90, H, I, Ry, Rz, X, Z, sqrtSWAP +from opensquirrel.ir import BlochSphereRotation, Float, Gate -class ReplacerTest(unittest.TestCase): - def test_replace(self): - squirrelAST = SquirrelAST(DefaultGates, 3, "test") +class TestCheckGateReplacement: + @pytest.mark.parametrize( + ("gate", "replacement_gates"), + [ + (I(0), [I(0)]), + (I(0), [I(0), I(0)]), + (I(0), [H(0), H(0)]), + (H(0), [H(0), H(0), H(0)]), + (CNOT(0, 1), [CNOT(0, 1), I(0)]), + # Arbitrary global phase change is not considered an issue. + (CNOT(0, 1), [CNOT(0, 1), BlochSphereRotation(0, angle=0, axis=(1, 0, 0), phase=621.6546)]), + ], + ) + def test_valid_replacement(self, gate: Gate, replacement_gates: list[Gate]) -> None: + check_gate_replacement(gate, replacement_gates) - replacer = Replacer(DefaultGates) + @pytest.mark.parametrize( + ("gate", "replacement_gates", "error_msg"), + [ + (H(0), [H(1)], "replacement for gate H does not seem to operate on the right qubits"), + (CNOT(0, 1), [CNOT(2, 1)], "replacement for gate CNOT does not seem to operate on the right qubits"), + (CNOT(0, 1), [CNOT(1, 0)], "replacement for gate CNOT does not preserve the quantum state"), + ], + ) + def test_wrong_qubit(self, gate: Gate, replacement_gates: list[Gate], error_msg: str) -> None: + with pytest.raises(ValueError, match=error_msg): + check_gate_replacement(gate, replacement_gates) - squirrelAST.addGate("h", 0) + def test_cnot_as_sqrt_swap(self) -> None: + # https://en.wikipedia.org/wiki/Quantum_logic_gate#/media/File:Qcircuit_CNOTsqrtSWAP2.svg + c = 0 + t = 1 + check_gate_replacement( + CNOT(control=c, target=t), + [ + Ry(t, Float(math.pi / 2)), + sqrtSWAP(c, t), + Z(c), + sqrtSWAP(c, t), + Rz(c, Float(-math.pi / 2)), + Rz(t, Float(-math.pi / 2)), + Ry(t, Float(-math.pi / 2)), + ], + ) - replaced = replacer.process(squirrelAST, "h", hadamard_decomposition) + with pytest.raises(ValueError, match="replacement for gate CNOT does not preserve the quantum state"): + check_gate_replacement( + CNOT(control=c, target=t), + [ + Ry(t, Float(math.pi / 2)), + sqrtSWAP(c, t), + Z(c), + sqrtSWAP(c, t), + Rz(c, Float(-math.pi / 2 + 0.01)), + Rz(t, Float(-math.pi / 2)), + Ry(t, Float(-math.pi / 2)), + ], + ) - self.assertEqual(replaced.nQubits, 3) - self.assertEqual(replaced.qubitRegisterName, "test") - self.assertEqual(len(replaced.operations), 2) - self.assertEqual(replaced.operations[0], ("y90", (0,))) - self.assertEqual(replaced.operations[1], ("x", (0,))) + with pytest.raises(ValueError, match="replacement for gate CNOT does not seem to operate on the right qubits"): + check_gate_replacement( + CNOT(control=c, target=t), + [ + Ry(t, Float(math.pi / 2)), + sqrtSWAP(c, t), + Z(c), + sqrtSWAP(c, 2), + Rz(c, Float(-math.pi / 2 + 0.01)), + Rz(t, Float(-math.pi / 2)), + Ry(t, Float(-math.pi / 2)), + ], + ) + def test_large_number_of_qubits(self) -> None: + # If we were building the whole circuit matrix, this would run out of memory. + check_gate_replacement(H(9234687), [Y90(9234687), X(9234687)]) -if __name__ == "__main__": - unittest.main() + with pytest.raises(ValueError, match="replacement for gate H does not seem to operate on the right qubits"): + check_gate_replacement(H(9234687), [Y90(698446519), X(9234687)]) + + with pytest.raises(ValueError, match="replacement for gate H does not preserve the quantum state"): + check_gate_replacement(H(9234687), [Y90(9234687), X(9234687), X(9234687)]) + + +class TestReplacer: + def test_replace_generic(self) -> None: + builder1 = CircuitBuilder(3) + builder1.H(0) + builder1.CNOT(0, 1) + circuit = builder1.to_circuit() + + # A simple decomposer function that adds identities before and after single-qubit gates. + class TestDecomposer(Decomposer): + def decompose(self, g: Gate) -> list[Gate]: + if isinstance(g, BlochSphereRotation): + return [I(g.qubit), g, I(g.qubit)] + return [g] + + decompose(circuit.ir, decomposer=TestDecomposer()) + + builder2 = CircuitBuilder(3) + builder2.I(0) + builder2.H(0) + builder2.I(0) + builder2.CNOT(0, 1) + expected_circuit = builder2.to_circuit() + + assert expected_circuit == circuit + + def test_replace(self) -> None: + builder1 = CircuitBuilder(3) + builder1.H(0) + builder1.comment("Test comment.") + circuit = builder1.to_circuit() + + replace(circuit.ir, H, lambda q: [Y90(q), X(q)]) + + builder2 = CircuitBuilder(3) + builder2.Y90(0) + builder2.X(0) + builder2.comment("Test comment.") + expected_circuit = builder2.to_circuit() + + assert expected_circuit == circuit diff --git a/test/test_reset.py b/test/test_reset.py new file mode 100644 index 00000000..3ec34c20 --- /dev/null +++ b/test/test_reset.py @@ -0,0 +1,117 @@ +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.ir import Bit + + +def test_reset() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + H q[0] + CNOT q[0], q[1] + + reset q[0] + b = measure q + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +H q[0] +CNOT q[0], q[1] +reset q[0] +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) + + +def test_reset_sgmq() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[4] q + + H q[0] + H q[1:2] + reset q[2:3] + H q[3] + reset q[0:1] + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[4] q + +H q[0] +H q[1] +H q[2] +reset q[2] +reset q[3] +H q[3] +reset q[0] +reset q[1] +""" + ) + + +def test_reset_all() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[1] q + qubit[2] qq + + H qq[1] + + reset + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[3] q + +H q[2] +reset q[0] +reset q[1] +reset q[2] +""" + ) + + +def test_reset_in_circuit_builder() -> None: + builder = CircuitBuilder(2, 2) + builder.H(0) + builder.CNOT(0, 1) + builder.reset(0) + builder.measure(0, Bit(0)) + builder.measure(1, Bit(1)) + + qc = builder.to_circuit() + + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +H q[0] +CNOT q[0], q[1] +reset q[0] +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) diff --git a/test/test_testinterpreter.py b/test/test_testinterpreter.py deleted file mode 100644 index beeca1f6..00000000 --- a/test/test_testinterpreter.py +++ /dev/null @@ -1,203 +0,0 @@ -import math -import unittest - -import numpy as np - -from opensquirrel.Circuit import Circuit -from opensquirrel.DefaultGates import DefaultGates - - -class TestInterpreterTest(unittest.TestCase): - def test_hadamard(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[1] q - -h q[0] -""", - ) - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - math.sqrt(0.5) - * np.array( - [ - [1, 1], - [1, -1], - ] - ), - ) - ) - - def test_double_hadamard(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[1] q - -h q[0] -h q[0] -""", - ) - self.assertTrue(np.allclose(circuit.test_get_circuit_matrix(), np.eye(2))) - - def test_triple_hadamard(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[1] q - -h q[0] -h q[0] -h q[0] -""", - ) - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - math.sqrt(0.5) - * np.array( - [ - [1, 1], - [1, -1], - ] - ), - ) - ) - - def test_hadamard_x(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[2] q - -h q[0] -x q[1] -""", - ) - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - math.sqrt(0.5) - * np.array( - [ - [0, 0, 1, 1], - [0, 0, 1, -1], - [1, 1, 0, 0], - [1, -1, 0, 0], - ] - ), - ) - ) - - def test_x_hadamard(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[2] q - -h q[1] -x q[0] -""", - ) - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - math.sqrt(0.5) - * np.array( - [ - [0, 1, 0, 1], - [1, 0, 1, 0], - [0, 1, 0, -1], - [1, 0, -1, 0], - ] - ), - ) - ) - - def test_cnot(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[2] q - -cnot q[1], q[0] -""", - ) - - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - np.array( - [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - ] - ), - ) - ) - - def test_cnot_reversed(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[2] q - -cnot q[0], q[1] -""", - ) - - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - np.array( - [ - [1, 0, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - [0, 1, 0, 0], - ] - ), - ) - ) - - def test_hadamard_cnot(self): - circuit = Circuit.from_string( - DefaultGates, - r""" -version 3.0 -qubit[2] q - -h q[0] -cnot q[0], q[1] -""", - ) - - self.assertTrue( - np.allclose( - circuit.test_get_circuit_matrix(), - math.sqrt(0.5) - * np.array( - [ - [1, 1, 0, 0], - [0, 0, 1, -1], - [0, 0, 1, 1], - [1, -1, 0, 0], - ] - ), - ) - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/test_writer.py b/test/test_writer.py deleted file mode 100644 index ae5011f9..00000000 --- a/test/test_writer.py +++ /dev/null @@ -1,83 +0,0 @@ -import unittest - -from opensquirrel.DefaultGates import DefaultGates -from opensquirrel.SquirrelAST import SquirrelAST -from opensquirrel.Writer import Writer - - -class WriterTest(unittest.TestCase): - def test_write(self): - squirrelAST = SquirrelAST(DefaultGates, 3, "myqubitsregister") - - writer = Writer(DefaultGates) - - written = writer.process(squirrelAST) - - self.assertEqual( - written, - """version 3.0 - -qubit[3] myqubitsregister - -""", - ) - - squirrelAST.addGate("h", 0) - squirrelAST.addGate("cr", 0, 1, 1.234) - - written = writer.process(squirrelAST) - - self.assertEqual( - written, - """version 3.0 - -qubit[3] myqubitsregister - -h myqubitsregister[0] -cr myqubitsregister[0], myqubitsregister[1], 1.234 -""", - ) - - def test_comment(self): - squirrelAST = SquirrelAST(DefaultGates, 3, "q") - - writer = Writer(DefaultGates) - - squirrelAST.addGate("h", 0) - squirrelAST.addComment("My comment") - squirrelAST.addGate("cr", 0, 1, 1.234) - - self.assertEqual( - writer.process(squirrelAST), - """version 3.0 - -qubit[3] q - -h q[0] - -/* My comment */ - -cr q[0], q[1], 1.234 -""", - ) - - def test_cap_significant_digits(self): - squirrelAST = SquirrelAST(DefaultGates, 3, "q") - - writer = Writer(DefaultGates) - - squirrelAST.addGate("cr", 0, 1, 1.6546514861321684321654) - - self.assertEqual( - writer.process(squirrelAST), - """version 3.0 - -qubit[3] q - -cr q[0], q[1], 1.6546515 -""", - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/utils/__init__.py b/test/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/utils/test_matrix_expander.py b/test/utils/test_matrix_expander.py new file mode 100644 index 00000000..04fdc812 --- /dev/null +++ b/test/utils/test_matrix_expander.py @@ -0,0 +1,61 @@ +import math + +import numpy as np + +from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate +from opensquirrel.utils import matrix_expander + + +def test_bloch_sphere_rotation() -> None: + gate = BlochSphereRotation(qubit=0, axis=(0.8, -0.3, 1.5), angle=0.9468, phase=2.533) + np.testing.assert_almost_equal( + matrix_expander.get_matrix(gate, 2), + [ + [-0.50373461 + 0.83386635j, 0.05578802 + 0.21864595j, 0, 0], + [0.18579927 + 0.12805072j, -0.95671077 + 0.18381011j, 0, 0], + [0, 0, -0.50373461 + 0.83386635j, 0.05578802 + 0.21864595j], + [0, 0, 0.18579927 + 0.12805072j, -0.95671077 + 0.18381011j], + ], + ) + + +def test_controlled_gate() -> None: + gate = ControlledGate(2, BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2)) + np.testing.assert_almost_equal( + matrix_expander.get_matrix(gate, 3), + [ + [1, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0, 1, 0], + ], + ) + + +def test_matrix_gate() -> None: + gate = MatrixGate( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + operands=[1, 2], + ) + np.testing.assert_almost_equal( + matrix_expander.get_matrix(gate, 3), + [ + [1, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 1], + ], + ) diff --git a/test/writer/__init__.py b/test/writer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/writer/test_writer.py b/test/writer/test_writer.py new file mode 100644 index 00000000..29323f28 --- /dev/null +++ b/test/writer/test_writer.py @@ -0,0 +1,131 @@ +from opensquirrel import CircuitBuilder +from opensquirrel.ir import Bit, BlochSphereRotation, ControlledGate, Float, MatrixGate +from opensquirrel.writer import writer + + +def test_circuit_without_bits() -> None: + builder = CircuitBuilder(3) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q +""" + ) + + +def test_circuit_with_qubits_and_bits() -> None: + builder = CircuitBuilder(3, 3) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q +bit[3] b +""" + ) + + +def test_circuit_to_string_after_circuit_modification() -> None: + builder = CircuitBuilder(3) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q +""" + ) + + builder.H(0) + builder.CR(0, 1, Float(1.234)) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q + +H q[0] +CR(1.234) q[0], q[1] +""" + ) + + +def test_float_precision() -> None: + builder = CircuitBuilder(3) + builder.CR(0, 1, Float(1.6546514861321684321654)) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q + +CR(1.6546515) q[0], q[1] +""" + ) + + +def test_measure() -> None: + builder = CircuitBuilder(1, 1) + builder.H(0) + builder.measure(0, Bit(0)) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[1] q +bit[1] b + +H q[0] +b[0] = measure q[0] +""" + ) + + +def test_anonymous_gate() -> None: + builder = CircuitBuilder(2, 2) + builder.H(0) + builder.ir.add_gate(BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23)) + builder.ir.add_gate(ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23))) + builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1])) + builder.CR(0, 1, Float(1.234)) + assert ( + str(builder.to_circuit()) + == """version 3.0 + +qubit[2] q +bit[2] b + +H q[0] +Anonymous gate: BlochSphereRotation(Qubit[0], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0) +Anonymous gate: ControlledGate(control_qubit=Qubit[0], BlochSphereRotation(Qubit[1], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0)) +Anonymous gate: MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] [0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]]) +CR(1.234) q[0], q[1] +""" # noqa: E501 + ) + + +def test_comment() -> None: + builder = CircuitBuilder(3) + builder.H(0) + builder.comment("My comment") + builder.CR(0, 1, Float(1.234)) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[3] q + +H q[0] + +/* My comment */ + +CR(1.234) q[0], q[1] +""" + ) diff --git a/tox.ini b/tox.ini index d1081deb..0b448004 100644 --- a/tox.ini +++ b/tox.ini @@ -14,24 +14,20 @@ commands_pre = [testenv:lint] description = run linters commands = - poetry run black --check . - poetry run isort --check . - ; poetry run docformatter --check --black --recursive --wrap-summaries=119 --wrap-descriptions=119 . - ; poetry run pylint opensquirrel + poetry run ruff check + +[testenv:type] +description = run mypy +commands = + poetry run mypy opensquirrel test --strict [testenv:fix] description = run fixing linters commands = - poetry run black . - poetry run isort . - ; poetry run docformatter -i --black --recursive --wrap-summaries=119 --wrap-descriptions=119 . - -; [testenv:type] -; description = run type checks -; commands = -; poetry run mypy . + poetry run ruff check --fix + poetry run ruff format [testenv:test] description = run unit tests commands = - poetry run pytest . \ No newline at end of file + poetry run pytest . -vv From 0d321ff69493736ee0b2111ff5a3e3b2be387172 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Tue, 21 Jan 2025 15:18:28 +0100 Subject: [PATCH 02/12] Release 0.2.0 (#431) Signed-off-by: dependabot[bot] Co-authored-by: Guy Puts Co-authored-by: Guy Puts <38719377+GuyPuts@users.noreply.github.com> Co-authored-by: Juan Boschero Co-authored-by: rturrado Co-authored-by: Juan Carlos Boschero Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: rares1609 <79575613+rares1609@users.noreply.github.com> Co-authored-by: Oancea --- CHANGELOG.md | 16 + CONTRIBUTING.md | 2 +- README.md | 6 +- docs/_static/cnot2cz.png | Bin 0 -> 115813 bytes docs/_static/swap2cnot.png | Bin 0 -> 131780 bytes docs/tutorial.md | 79 +- example/decompositions.ipynb | 129 +- mkdocs.yaml | 3 +- opensquirrel/__init__.py | 62 +- opensquirrel/circuit.py | 62 +- opensquirrel/circuit_builder.py | 91 +- opensquirrel/circuit_matrix_calculator.py | 9 +- opensquirrel/common.py | 27 +- opensquirrel/decomposer/__init__.py | 23 - opensquirrel/decomposer/aba_decomposer.py | 199 - opensquirrel/default_gate_modifiers.py | 42 + opensquirrel/default_gates.py | 191 - opensquirrel/default_instructions.py | 243 + opensquirrel/default_measures.py | 14 - opensquirrel/default_resets.py | 9 - opensquirrel/instruction_library.py | 72 +- opensquirrel/ir.py | 495 +- opensquirrel/mapper/__init__.py | 4 - opensquirrel/merger/__init__.py | 0 opensquirrel/merger/general_merger.py | 126 - opensquirrel/parser/libqasm/parser.py | 188 +- opensquirrel/{exporter => passes}/__init__.py | 0 opensquirrel/passes/decomposer/__init__.py | 27 + .../passes/decomposer/aba_decomposer.py | 216 + .../passes/decomposer/cnot2cz_decomposer.py | 37 + .../decomposer/cnot_decomposer.py | 30 +- .../decomposer/general_decomposer.py | 8 +- .../decomposer/mckay_decomposer.py | 35 +- .../passes/decomposer/swap2cnot_decomposer.py | 29 + opensquirrel/passes/exporter/__init__.py | 3 + .../passes/exporter/cqasmv1_exporter.py | 107 + .../{ => passes}/exporter/export_format.py | 1 + .../exporter/quantify_scheduler_exporter.py | 52 +- opensquirrel/passes/mapper/__init__.py | 4 + .../{ => passes}/mapper/general_mapper.py | 2 +- opensquirrel/{ => passes}/mapper/mapping.py | 0 .../{ => passes}/mapper/qubit_remapper.py | 27 +- .../{ => passes}/mapper/simple_mappers.py | 4 +- opensquirrel/{ => passes}/mapper/utils.py | 0 opensquirrel/passes/merger/__init__.py | 7 + opensquirrel/passes/merger/general_merger.py | 168 + .../merger/single_qubit_gates_merger.py | 52 + opensquirrel/passes/router/__init__.py | 7 + opensquirrel/passes/router/general_router.py | 9 + opensquirrel/passes/router/routing_checker.py | 28 + opensquirrel/register_manager.py | 2 +- opensquirrel/reindexer/__init__.py | 4 +- opensquirrel/reindexer/qubit_reindexer.py | 27 +- opensquirrel/utils/__init__.py | 19 +- .../utils/{check_passes => }/check_mapper.py | 36 +- opensquirrel/utils/check_passes/__init__.py | 5 - opensquirrel/utils/list.py | 9 + opensquirrel/utils/math.py | 12 + opensquirrel/utils/matrix_expander.py | 20 +- opensquirrel/writer/writer.py | 61 +- poetry.lock | 4624 +++++++++-------- pyproject.toml | 30 +- test/decomposer/test_aba_decomposer.py | 47 + test/decomposer/test_cnot2cz_decomposer.py | 64 + test/decomposer/test_cnot_decomposer.py | 32 +- test/decomposer/test_mckay_decomposer.py | 147 +- test/decomposer/test_swap2cnot_decomposer.py | 60 + test/decomposer/test_xyx_decomposer.py | 24 +- test/decomposer/test_xzx_decomposer.py | 24 +- test/decomposer/test_yxy_decomposer.py | 24 +- test/decomposer/test_yzy_decomposer.py | 27 +- test/decomposer/test_zxz_decomposer.py | 40 +- test/decomposer/test_zyz_decomposer.py | 26 +- test/docs/test_tutorial.py | 26 +- test/example/tutorials/test_decompositions.py | 29 +- test/exporter/test_cqasmv1_exporter.py | 288 + .../test_quantify_scheduler_exporter.py | 29 +- test/ir_equality_test_base.py | 9 +- test/mapper/test_general_mapper.py | 11 +- test/mapper/test_mapping.py | 2 +- test/mapper/test_qubit_remapper.py | 16 +- test/mapper/test_simple_mappers.py | 6 +- test/merger/test_general_merger.py | 142 + test/merger/test_merger.py | 171 - test/merger/test_single_qubit_gates_merger.py | 264 + test/parser/libqasm/test_libqasm.py | 130 +- test/reindexer/test_qubit_reindexer.py | 9 +- test/router/test_routing_checker.py | 52 + test/test_circuit_builder.py | 60 +- test/test_init.py | 32 + test/test_integration.py | 397 +- test/test_ir.py | 78 +- test/test_measure.py | 7 +- test/test_registers.py | 5 +- test/test_replacer.py | 58 +- test/test_reset.py | 139 +- test/test_wait.py | 50 + test/utils/test_matrix_expander.py | 8 +- test/writer/test_writer.py | 34 +- tox.ini | 1 + 100 files changed, 6242 insertions(+), 4120 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 docs/_static/cnot2cz.png create mode 100644 docs/_static/swap2cnot.png delete mode 100644 opensquirrel/decomposer/__init__.py delete mode 100644 opensquirrel/decomposer/aba_decomposer.py create mode 100644 opensquirrel/default_gate_modifiers.py delete mode 100644 opensquirrel/default_gates.py create mode 100644 opensquirrel/default_instructions.py delete mode 100644 opensquirrel/default_measures.py delete mode 100644 opensquirrel/default_resets.py delete mode 100644 opensquirrel/mapper/__init__.py delete mode 100644 opensquirrel/merger/__init__.py delete mode 100644 opensquirrel/merger/general_merger.py rename opensquirrel/{exporter => passes}/__init__.py (100%) create mode 100644 opensquirrel/passes/decomposer/__init__.py create mode 100644 opensquirrel/passes/decomposer/aba_decomposer.py create mode 100644 opensquirrel/passes/decomposer/cnot2cz_decomposer.py rename opensquirrel/{ => passes}/decomposer/cnot_decomposer.py (69%) rename opensquirrel/{ => passes}/decomposer/general_decomposer.py (95%) rename opensquirrel/{ => passes}/decomposer/mckay_decomposer.py (67%) create mode 100644 opensquirrel/passes/decomposer/swap2cnot_decomposer.py create mode 100644 opensquirrel/passes/exporter/__init__.py create mode 100644 opensquirrel/passes/exporter/cqasmv1_exporter.py rename opensquirrel/{ => passes}/exporter/export_format.py (81%) rename opensquirrel/{ => passes}/exporter/quantify_scheduler_exporter.py (67%) create mode 100644 opensquirrel/passes/mapper/__init__.py rename opensquirrel/{ => passes}/mapper/general_mapper.py (92%) rename opensquirrel/{ => passes}/mapper/mapping.py (100%) rename opensquirrel/{ => passes}/mapper/qubit_remapper.py (85%) rename opensquirrel/{ => passes}/mapper/simple_mappers.py (83%) rename opensquirrel/{ => passes}/mapper/utils.py (100%) create mode 100644 opensquirrel/passes/merger/__init__.py create mode 100644 opensquirrel/passes/merger/general_merger.py create mode 100644 opensquirrel/passes/merger/single_qubit_gates_merger.py create mode 100644 opensquirrel/passes/router/__init__.py create mode 100644 opensquirrel/passes/router/general_router.py create mode 100644 opensquirrel/passes/router/routing_checker.py rename opensquirrel/utils/{check_passes => }/check_mapper.py (72%) delete mode 100644 opensquirrel/utils/check_passes/__init__.py create mode 100644 opensquirrel/utils/list.py create mode 100644 opensquirrel/utils/math.py create mode 100644 test/decomposer/test_aba_decomposer.py create mode 100644 test/decomposer/test_cnot2cz_decomposer.py create mode 100644 test/decomposer/test_swap2cnot_decomposer.py create mode 100644 test/exporter/test_cqasmv1_exporter.py create mode 100644 test/merger/test_general_merger.py delete mode 100644 test/merger/test_merger.py create mode 100644 test/merger/test_single_qubit_gates_merger.py create mode 100644 test/router/test_routing_checker.py create mode 100644 test/test_init.py create mode 100644 test/test_wait.py diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..ffdfdcd8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file. +This project adheres to [Semantic Versioning](http://semver.org/). + +### Types of changes: +* **Added** for new features. +* **Changed** for changes in existing functionality. +* **Fixed** for any bug fixes. +* **Removed** for now removed features. + + +## [ 0.2.0 ] - [ xxxx-yy-zz ] + +### Added +- Restore SGMQ notation for barrier groups in cQASMv1 Exporter. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6ff1cde9..c6271b63 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,10 +33,10 @@ Make sure the tests and the following linters pass. From a `poetry` shell (started from an OpenSquirrel checkout): ``` +$ poetry run mypy opensquirrel test --strict $ poetry run pytest . -vv $ poetry run ruff check --fix $ poetry run ruff format -$ poetry run mypy opensquirrel --strict ``` ## Setting the Python interpreter (PyCharm) diff --git a/README.md b/README.md index f5a5b3c2..b5293979 100644 --- a/README.md +++ b/README.md @@ -63,11 +63,11 @@ Here is an example of building a circuit using the `CircuitBuilder`: ```python import math from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.ir import Qubit, Float +from opensquirrel.ir import Qubit # Initialize the builder and build your circuit builder = CircuitBuilder(qubit_register_size=1) -builder.H(Qubit(0)).Z(Qubit(0)).Y(Qubit(0)).Rx(Qubit(0), Float(math.pi / 3)) +builder.H(Qubit(0)).Z(Qubit(0)).Y(Qubit(0)).Rx(Qubit(0), math.pi / 3) # Get the circuit from the circuit builder qc = builder.to_circuit() @@ -97,7 +97,7 @@ The different decomposition strategies can be found in the In the example below, the circuit is decomposed using the Z-Y-Z decomposer. ```python -from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer +from opensquirrel.passes.decomposer.aba_decomposer import ZYZDecomposer qc.decompose(decomposer=ZYZDecomposer()) ``` diff --git a/docs/_static/cnot2cz.png b/docs/_static/cnot2cz.png new file mode 100644 index 0000000000000000000000000000000000000000..7b0cfdbe37ffd0ed7830df4c06938595d0f126d7 GIT binary patch literal 115813 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≪1dl5?R>g295Rn+h}6hepI<-+4g^*vIM|y$rfUh6 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 literal 0 HcmV?d00001 diff --git a/docs/_static/swap2cnot.png b/docs/_static/swap2cnot.png new file mode 100644 index 0000000000000000000000000000000000000000..c75330bc2ae9be315a291d901f1fd068c2f1653e GIT binary patch literal 131780 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 literal 0 HcmV?d00001 diff --git a/docs/tutorial.md b/docs/tutorial.md index 40bef238..8137b09e 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -64,11 +64,10 @@ _Output_: For creation of a circuit through Python, the `CircuitBuilder` can be used accordingly: ```python -from opensquirrel import CircuitBuilder -from opensquirrel.ir import Float +from opensquirrel.circuit_builder import CircuitBuilder builder = CircuitBuilder(qubit_register_size=2) -builder.Ry(0, Float(0.23)).CNOT(0, 1) +builder.Ry(0, 0.23).CNOT(0, 1) qc = builder.to_circuit() print(qc) @@ -85,6 +84,8 @@ _Output_: You can naturally use the functionalities available in Python to create your circuit: ```python +from opensquirrel.circuit_builder import CircuitBuilder + builder = CircuitBuilder(qubit_register_size=10) for i in range(0, 10, 2): builder.H(i) @@ -107,6 +108,8 @@ _Output_: For instance, you can generate a quantum fourier transform (QFT) circuit as follows: ```python +from opensquirrel.circuit_builder import CircuitBuilder + qubit_register_size = 5 builder = CircuitBuilder(qubit_register_size) for i in range(qubit_register_size): @@ -144,6 +147,8 @@ _Output_: As you can see, gates require _strong types_. For instance, you cannot do: ```python +from opensquirrel.circuit import Circuit + try: Circuit.from_string( """ @@ -160,13 +165,13 @@ _Output_: Parsing error: failed to resolve overload for cnot with argument pack (qubit, int) -The issue is that the CNOT expects a qubit as second input argument where an integer has been provided. +The issue is that the `CNOT` expects a qubit as second input argument where an integer has been provided. ## Modifying a circuit ### Merging single qubit gates -All single-qubit gates appearing in a circuit can be merged by applying `merge_single_qubit_gates()` to the circuit. +All single-qubit gates appearing in a circuit can be merged by applying `merge(merger=SingleQubitGatesMerger())` to the circuit. Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. The gate that results from the merger of single-qubit gates will, in general, comprise an arbitrary rotation and, therefore, not be a known gate. @@ -182,14 +187,17 @@ the semantic representation of the anonymous gate is exported. will not recognize it as a valid statement. ```python +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.ir import Float import math builder = CircuitBuilder(1) for _ in range(4): - builder.Rx(0, Float(math.pi / 4)) + builder.Rx(0, math.pi / 4) qc = builder.to_circuit() -qc.merge_single_qubit_gates() +qc.merge(merger=SingleQubitGatesMerger()) print(qc) ``` @@ -222,6 +230,9 @@ It accepts a qubit, an axis, an angle, and a phase as arguments. Below is shown how the X-gate is defined in the default gate set of OpenSquirrel: ```python +from opensquirrel.ir import Gate, BlochSphereRotation, QubitLike, named_gate +import math + @named_gate def x(q: QubitLike) -> Gate: return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) @@ -232,17 +243,22 @@ This _tells_ OpenSquirrel that the function defines a gate and that it should, therefore, have all the nice properties OpenSquirrel expects of it. - The `ControlledGate` class is used to define a multiple qubit gate that comprises a controlled operation. -For instance, the CNOT gate is defined in the default gate set of OpenSquirrel as follows: +For instance, the `CNOT` gate is defined in the default gate set of OpenSquirrel as follows: ```python +from opensquirrel.ir import Gate, ControlledGate, QubitLike, named_gate +from opensquirrel import X + @named_gate def cnot(control: QubitLike, target: QubitLike) -> Gate: - return ControlledGate(control, x(target)) + return ControlledGate(control, X(target)) ``` - The `MatrixGate` class may be used to define a gate in the generic form of a matrix: ```python +from opensquirrel.ir import Gate, MatrixGate, QubitLike, named_gate + @named_gate def swap(q1: QubitLike, q2: QubitLike) -> Gate: return MatrixGate( @@ -274,13 +290,14 @@ Decompositions can be: #### 1. Predefined decomposition The first kind of decomposition is when you want to replace a particular gate in the circuit, -like the CNOT gate, with a fixed list of gates. -It is commonly known that CNOT can be decomposed as H-CZ-H. +like the `CNOT` gate, with a fixed list of gates. +It is commonly known that `CNOT` can be decomposed as `H`-`CZ`-`H`. This decomposition is demonstrated below using a Python _lambda function_, which requires the same parameters as the gate that is decomposed: ```python -from opensquirrel.default_gates import CNOT, H, CZ +from opensquirrel.circuit import Circuit +from opensquirrel import CNOT, H, CZ qc = Circuit.from_string( """ @@ -323,6 +340,9 @@ For instance, an exception is thrown if we forget the final Hadamard, or H gate, in our custom-made decomposition: ```python +from opensquirrel.circuit import Circuit +from opensquirrel import CNOT, CZ, H + qc = Circuit.from_string( """ version 3.0 @@ -349,21 +369,42 @@ _Output_: replacement for gate CNOT does not preserve the quantum state +##### _`CNOT` to `CZ` decomposer_ + +The decomposition of the `CNOT` gate into a `CZ` gate (with additional single-qubit gates) is used frequently. +To this end a `CNOT2CZDecomposer` has been implemented that decomposes any `CNOT`s in a circuit to a +`Ry(-π/2)`-`CZ`-`Ry(π/2)`. The decomposition is illustrated in the image below. + +

+ +`Ry` gates are used instead of, _e.g._, `H` gates, as they are, generally, +more likely to be supported already by target backends. + +##### _`SWAP` to `CNOT` decomposer_ + +The `SWAP2CNOTDecomposer` implements the predefined decomposition of the `SWAP` gate into 3 `CNOT` gates. +The decomposition is illustrated in the image below. + +

+ + #### 2. Inferred decomposition OpenSquirrel has a variety inferred decomposition strategies. More in depth tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). -One of the most common single qubit decomposition techniques is the Z-Y-Z decomposition. +One of the most common single qubit decomposition techniques is the ZYZ decomposition. This technique decomposes a quantum gate into an `Rz`, `Ry` and `Rz` gate in that order. -The decompositions are found in `opensquirrel.decomposer`, -an example can be seen below where a Hadamard, Z, Y and Rx gate are all decomposed on a single qubit circuit. +The decompositions are found in `opensquirrel.passes.decomposer`, +an example can be seen below where a `H`, `Z`, `Y`, and `Rx` gate are all decomposed on a single qubit circuit. ```python -from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.passes.decomposer import ZYZDecomposer +import math builder = CircuitBuilder(qubit_register_size=1) -builder.H(0).Z(0).Y(0).Rx(0, Float(math.pi / 3)) +builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) qc = builder.to_circuit() qc.decompose(decomposer=ZYZDecomposer()) @@ -387,8 +428,8 @@ _Output_: Similarly, the decomposer can be used on individual gates. ```python -from opensquirrel.decomposer.aba_decomposer import XZXDecomposer -from opensquirrel.default_gates import H +from opensquirrel.passes.decomposer import ZYZDecomposer +from opensquirrel import H print(ZYZDecomposer().decompose(H(0))) ``` diff --git a/example/decompositions.ipynb b/example/decompositions.ipynb index 122c22a5..3ac6e571 100644 --- a/example/decompositions.ipynb +++ b/example/decompositions.ipynb @@ -62,15 +62,15 @@ "source": [ "import math\n", "\n", - "from opensquirrel.circuit_builder import CircuitBuilder\n", - "from opensquirrel.ir import Float\n", + "from opensquirrel import CircuitBuilder\n", + "from opensquirrel.ir import Float, Qubit\n", "\n", "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=1)\n", - "builder.H(0)\n", - "builder.Z(0)\n", - "builder.Y(0)\n", - "builder.Rx(0, Float(math.pi / 3))\n", + "builder.H(Qubit(0))\n", + "builder.Z(Qubit(0))\n", + "builder.Y(Qubit(0))\n", + "builder.Rx(Qubit(0), Float(math.pi / 3))\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -81,9 +81,7 @@ "cell_type": "markdown", "id": "afe111839ab98b22", "metadata": {}, - "source": [ - "Above we can see the current gates in our circuit. Having created a circuit, we can now use an ABA decomposition in `opensquirrel.decomposer.aba_decomposer` to decompose the gates in the circuit. For this example, we will apply the Z-Y-Z decomposition using the `ZYZDecomposer`. " - ] + "source": "Above we can see the current gates in our circuit. Having created a circuit, we can now use an ABA decomposition in `opensquirrel.decomposer.aba_decomposer` to decompose the gates in the circuit. For this example, we will apply the Z-Y-Z decomposition using the `ZYZDecomposer`. " }, { "cell_type": "code", @@ -118,7 +116,7 @@ } ], "source": [ - "from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer\n", + "from opensquirrel.passes.decomposer import ZYZDecomposer\n", "\n", "# Decompose the circuit using ZYZDecomposer\n", "circuit.decompose(decomposer=ZYZDecomposer())\n", @@ -171,10 +169,10 @@ } ], "source": [ - "from opensquirrel.decomposer.aba_decomposer import XZXDecomposer\n", - "from opensquirrel.default_gates import H\n", + "from opensquirrel import H\n", + "from opensquirrel.passes.decomposer import XZXDecomposer\n", "\n", - "XZXDecomposer().decompose(H(0))" + "XZXDecomposer().decompose(H(Qubit(0)))" ] }, { @@ -228,10 +226,10 @@ "source": [ "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=1)\n", - "builder.H(0)\n", - "builder.Z(0)\n", - "builder.X(0)\n", - "builder.Rx(0, Float(math.pi / 3))\n", + "builder.H(Qubit(0))\n", + "builder.Z(Qubit(0))\n", + "builder.X(Qubit(0))\n", + "builder.Rx(Qubit(0), Float(math.pi / 3))\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -242,9 +240,7 @@ "cell_type": "markdown", "id": "69517d8287c1777d", "metadata": {}, - "source": [ - "The `McKayDecomposer` is called from `opensquirrel.decomposer.mckay_decomposer` and used in a similar method to the `ABADecomposer`." - ] + "source": "The `McKayDecomposer` is called from `opensquirrel.decomposer.mckay_decomposer` and used in a similar method to the `ABADecomposer`." }, { "cell_type": "code", @@ -283,7 +279,7 @@ } ], "source": [ - "from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer\n", + "from opensquirrel.passes.decomposer import McKayDecomposer\n", "\n", "# Decompose the circuit using ZYZDecomposer\n", "circuit.decompose(decomposer=McKayDecomposer())\n", @@ -362,9 +358,9 @@ "source": [ "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=2)\n", - "builder.CZ(0, 1)\n", - "builder.CR(0, 1, Float(math.pi / 3))\n", - "builder.CR(1, 0, Float(math.pi / 2))\n", + "builder.CZ(Qubit(0), Qubit(1))\n", + "builder.CR(Qubit(0), Qubit(1), Float(math.pi / 3))\n", + "builder.CR(Qubit(1), Qubit(0), Float(math.pi / 2))\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -375,9 +371,7 @@ "cell_type": "markdown", "id": "8c945ab4572e9f77", "metadata": {}, - "source": [ - "We can import `CNOTDecomposer` from `opensquirrel.decomposer.cnot_decomposer`. The above circuit can then be decomposed using `CNOTDecomposer` as seen below." - ] + "source": "We can import `CNOTDecomposer` from `opensquirrel.decomposer.cnot_decomposer`. The above circuit can then be decomposed using `CNOTDecomposer` as seen below." }, { "cell_type": "code", @@ -420,7 +414,7 @@ } ], "source": [ - "from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer\n", + "from opensquirrel.passes.decomposer import CNOTDecomposer\n", "\n", "circuit.decompose(decomposer=CNOTDecomposer())\n", "circuit" @@ -481,9 +475,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + - \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" - ], + "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + - \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$", "text/plain": [ "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + (-sin(theta_2/2)*sin((theta_1 - theta_3)/2))*i + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*j + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*k" ] @@ -510,9 +502,7 @@ "cell_type": "markdown", "id": "6e776f2cb7cae465", "metadata": {}, - "source": [ - "Let us change variables and define $p\\equiv\\theta_1 + \\theta_3$ and $m\\equiv\\theta_1 - \\theta_3$." - ] + "source": "Let us change variables and define $p\\equiv\\theta_1 + \\theta_3$ and $m\\equiv\\theta_1 - \\theta_3$." }, { "cell_type": "code", @@ -527,9 +517,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} + - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} j + \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" - ], + "text/latex": "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} + - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} j + \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$", "text/plain": [ "cos(p/2)*cos(theta_2/2) + (-sin(m/2)*sin(theta_2/2))*i + sin(theta_2/2)*cos(m/2)*j + sin(p/2)*cos(theta_2/2)*k" ] @@ -551,9 +539,7 @@ "cell_type": "markdown", "id": "1ece3d36eb99512b", "metadata": {}, - "source": [ - "The original rotation's quaternion $q$ can be defined in Sympy accordingly:" - ] + "source": "The original rotation's quaternion $q$ can be defined in Sympy accordingly:" }, { "cell_type": "code", @@ -568,9 +554,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\cos{\\left(\\frac{\\alpha}{2} \\right)} + n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)} i + n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)} j + n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)} k$" - ], + "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\alpha}{2} \\right)} + n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)} i + n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)} j + n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)} k$", "text/plain": [ "cos(alpha/2) + n_x*sin(alpha/2)*i + n_y*sin(alpha/2)*j + n_z*sin(alpha/2)*k" ] @@ -593,9 +577,7 @@ "cell_type": "markdown", "id": "7cb50842c8fa111a", "metadata": {}, - "source": [ - "We get the following system of equations, where the unknowns are $p$, $m$, and $\\theta_2$:\n" - ] + "source": "We get the following system of equations, where the unknowns are $p$, $m$, and $\\theta_2$:\n" }, { "cell_type": "code", @@ -610,9 +592,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" - ], + "text/latex": "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$", "text/plain": [ "Eq(cos(p/2)*cos(theta_2/2), cos(alpha/2))" ] @@ -622,9 +602,7 @@ }, { "data": { - "text/latex": [ - "$\\displaystyle - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" - ], + "text/latex": "$\\displaystyle - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", "text/plain": [ "Eq(-sin(m/2)*sin(theta_2/2), n_x*sin(alpha/2))" ] @@ -634,9 +612,7 @@ }, { "data": { - "text/latex": [ - "$\\displaystyle \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} = n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" - ], + "text/latex": "$\\displaystyle \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} = n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", "text/plain": [ "Eq(sin(theta_2/2)*cos(m/2), n_y*sin(alpha/2))" ] @@ -646,9 +622,7 @@ }, { "data": { - "text/latex": [ - "$\\displaystyle \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" - ], + "text/latex": "$\\displaystyle \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", "text/plain": [ "Eq(sin(p/2)*cos(theta_2/2), n_z*sin(alpha/2))" ] @@ -658,7 +632,7 @@ } ], "source": [ - "from IPython.display import display\n", + "from IPython.display import display # noqa: A004\n", "\n", "display(\n", " sp.Eq(rhs_simplified.a, q.a),\n", @@ -672,9 +646,7 @@ "cell_type": "markdown", "id": "e6b34ef9cb46f2e4", "metadata": {}, - "source": [ - "Instead, assume $\\sin(p/2) \\neq 0$, then we can substitute in the first equation $\\cos\\left(\\theta_2/2\\right)$ with its value computed from the last equation. We get:" - ] + "source": "Instead, assume $\\sin(p/2) \\neq 0$, then we can substitute in the first equation $\\cos\\left(\\theta_2/2\\right)$ with its value computed from the last equation. We get:" }, { "cell_type": "code", @@ -689,9 +661,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\frac{n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}}{\\tan{\\left(\\frac{p}{2} \\right)}} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" - ], + "text/latex": "$\\displaystyle \\frac{n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}}{\\tan{\\left(\\frac{p}{2} \\right)}} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$", "text/plain": [ "Eq(n_z*sin(alpha/2)/tan(p/2), cos(alpha/2))" ] @@ -748,9 +718,7 @@ "cell_type": "markdown", "id": "e3fc4cdb6d15dd1", "metadata": {}, - "source": [ - "The terms are similar to the other decompositions, XZX, YXY, ZXZ, XYX and YZY. However, for ZXZ, XYX and YZY, the $i$ term in the quaternion is positive as seen below in the YZY decomposition." - ] + "source": "The terms are similar to the other decompositions, XZX, YXY, ZXZ, XYX and YZY. However, for ZXZ, XYX and YZY, the $i$ term in the quaternion is positive as seen below in the YZY decomposition." }, { "cell_type": "code", @@ -765,9 +733,7 @@ "outputs": [ { "data": { - "text/latex": [ - "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} k$" - ], + "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} k$", "text/plain": [ "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + sin(theta_2/2)*sin((theta_1 - theta_3)/2)*i + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*j + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*k" ] @@ -792,9 +758,7 @@ "cell_type": "markdown", "id": "a41b84ed5f3365b2", "metadata": {}, - "source": [ - "Thus, in order to correct for the orientation of the rotation, $\\theta_1$ and $\\theta_3$ are swapped. " - ] + "source": "Thus, in order to correct for the orientation of the rotation, $\\theta_1$ and $\\theta_3$ are swapped. " }, { "cell_type": "markdown", @@ -829,8 +793,6 @@ }, { "cell_type": "markdown", - "id": "866e89a24587f0af", - "metadata": {}, "source": [ "### 3.3 ABA Decomposition\n", "In a two qubit system, the unitary matrix of a controlled operation is seen below,\n", @@ -882,20 +844,11 @@ "C &= Rz\\bigg(\\frac{1}{2} \\theta_0 - \\frac{1}{2} \\theta_2 \\bigg)\n", "\\end{split}\n", "$$" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "3cc1e9963f3e794d", + ], "metadata": { - "ExecuteTime": { - "end_time": "2024-08-05T11:35:27.882752Z", - "start_time": "2024-08-05T11:35:27.871794Z" - } + "collapsed": false }, - "outputs": [], - "source": [] + "id": "c084046b0bb17ec9" } ], "metadata": { diff --git a/mkdocs.yaml b/mkdocs.yaml index 9f148fe0..e6365ba7 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -23,8 +23,7 @@ theme: name: Switch to light mode # Palette toggle for light mode - media: "(prefers-color-scheme: light)" - primary: white - accent: light blue + scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode diff --git a/opensquirrel/__init__.py b/opensquirrel/__init__.py index 6f1e5b84..5a0d5e30 100644 --- a/opensquirrel/__init__.py +++ b/opensquirrel/__init__.py @@ -1,5 +1,63 @@ from opensquirrel.circuit import Circuit from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.default_gates import default_gate_aliases +from opensquirrel.default_instructions import ( + CNOT, + CR, + CZ, + SWAP, + X90, + Y90, + CRk, + H, + I, + Rx, + Ry, + Rz, + S, + Sdag, + T, + Tdag, + X, + Y, + Z, + barrier, + init, + measure, + mX90, + mY90, + reset, + wait, +) +from opensquirrel.writer import writer -__all__ = ["Circuit", "CircuitBuilder", "default_gate_aliases"] +__all__ = [ + "CNOT", + "CR", + "CZ", + "SWAP", + "X90", + "Y90", + "CRk", + "Circuit", + "CircuitBuilder", + "H", + "I", + "Rx", + "Ry", + "Rz", + "S", + "Sdag", + "T", + "Tdag", + "X", + "Y", + "Z", + "barrier", + "init", + "mX90", + "mY90", + "measure", + "reset", + "wait", + "writer", +] diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py index 1452dedb..65eb118b 100644 --- a/opensquirrel/circuit.py +++ b/opensquirrel/circuit.py @@ -1,16 +1,16 @@ from __future__ import annotations -from collections.abc import Callable, Mapping -from typing import TYPE_CHECKING, Any, Literal +from collections.abc import Callable +from typing import TYPE_CHECKING, Any -from opensquirrel.default_gates import default_gate_aliases, default_gate_set -from opensquirrel.default_measures import default_measure_set -from opensquirrel.exporter.export_format import ExportFormat +from opensquirrel.passes.exporter import ExportFormat if TYPE_CHECKING: - from opensquirrel.decomposer import Decomposer - from opensquirrel.ir import IR, Gate, Measure - from opensquirrel.mapper import Mapper + from opensquirrel.ir import IR, Gate + from opensquirrel.passes.decomposer import Decomposer + from opensquirrel.passes.mapper import Mapper + from opensquirrel.passes.merger.general_merger import Merger + from opensquirrel.passes.router.general_router import Router from opensquirrel.register_manager import RegisterManager @@ -45,7 +45,7 @@ def __init__(self, register_manager: RegisterManager, ir: IR) -> None: def __repr__(self) -> str: """Write the circuit to a cQASM 3 string.""" - from opensquirrel.writer import writer + from opensquirrel import writer return writer.circuit_to_string(self) @@ -55,13 +55,7 @@ def __eq__(self, other: Any) -> bool: return self.register_manager == other.register_manager and self.ir == other.ir @classmethod - def from_string( - cls, - cqasm3_string: str, - gate_set: list[Callable[..., Gate]] = default_gate_set, - gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, - measure_set: list[Callable[..., Measure]] = default_measure_set, - ) -> Circuit: + def from_string(cls, cqasm3_string: str) -> Circuit: """Create a circuit object from a cQasm3 string. All the gates in the circuit need to be defined in the `gates` argument. @@ -72,18 +66,10 @@ def from_string( Args: cqasm3_string: a cQASM 3 string - gate_set: an array of gate semantic functions. See default_gates for examples - gate_aliases: a dictionary of extra gate aliases, mapping strings to functions in the gate set - measure_set: an array of measurement semantic functions. See default_measures for examples """ from opensquirrel.parser.libqasm.parser import Parser - parser = Parser( - gate_set=gate_set, - gate_aliases=gate_aliases, - measure_set=measure_set, - ) - return parser.circuit_from_string(cqasm3_string) + return Parser().circuit_from_string(cqasm3_string) @property def qubit_register_size(self) -> int: @@ -101,19 +87,19 @@ def qubit_register_name(self) -> str: def bit_register_name(self) -> str: return self.register_manager.get_bit_register_name() - def merge_single_qubit_gates(self) -> None: - """Merge all consecutive 1-qubit gates in the circuit. - Gates obtained from merging other gates become anonymous gates. - """ - from opensquirrel.merger import general_merger + def route(self, router: Router) -> None: + """Generic router pass. It applies the given Router to the circuit.""" + router.route(self.ir) - general_merger.merge_single_qubit_gates(self) + def merge(self, merger: Merger) -> None: + """Generic merge pass. It applies the given merger to the circuit.""" + merger.merge(self.ir, self.qubit_register_size) def decompose(self, decomposer: Decomposer) -> None: """Generic decomposition pass. It applies the given decomposer function to every gate in the circuit. """ - from opensquirrel.decomposer import general_decomposer + from opensquirrel.passes.decomposer import general_decomposer general_decomposer.decompose(self.ir, decomposer) @@ -121,7 +107,7 @@ def map(self, mapper: Mapper) -> None: """Generic qubit mapper pass. Map the (virtual) qubits of the circuit to the physical qubits of the target hardware. """ - from opensquirrel.mapper.qubit_remapper import remap_ir + from opensquirrel.passes.mapper.qubit_remapper import remap_ir remap_ir(self, mapper.get_mapping()) @@ -130,14 +116,18 @@ def replace(self, gate_generator: Callable[..., Gate], f: Callable[..., list[Gat `f` is a callable that takes the arguments of the gate that is to be replaced and returns the decomposition as a list of gates. """ - from opensquirrel.decomposer import general_decomposer + from opensquirrel.passes.decomposer import general_decomposer general_decomposer.replace(self.ir, gate_generator, f) - def export(self, fmt: Literal[ExportFormat.QUANTIFY_SCHEDULER] | None = None) -> Any: + def export(self, fmt: ExportFormat | None = None) -> Any: if fmt == ExportFormat.QUANTIFY_SCHEDULER: - from opensquirrel.exporter import quantify_scheduler_exporter + from opensquirrel.passes.exporter import quantify_scheduler_exporter return quantify_scheduler_exporter.export(self) + if fmt == ExportFormat.CQASM_V1: + from opensquirrel.passes.exporter import cqasmv1_exporter + + return cqasmv1_exporter.export(self) msg = "unknown exporter format" raise ValueError(msg) diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py index ceb043b7..d3a5361e 100644 --- a/opensquirrel/circuit_builder.py +++ b/opensquirrel/circuit_builder.py @@ -1,23 +1,30 @@ from __future__ import annotations import inspect -from collections.abc import Callable, Mapping +from collections.abc import Callable from copy import deepcopy from functools import partial from typing import Any from typing_extensions import Self +from opensquirrel import instruction_library from opensquirrel.circuit import Circuit -from opensquirrel.default_gates import default_gate_aliases, default_gate_set -from opensquirrel.default_measures import default_measure_set -from opensquirrel.default_resets import default_reset_set -from opensquirrel.instruction_library import GateLibrary, MeasureLibrary, ResetLibrary -from opensquirrel.ir import ANNOTATIONS_TO_TYPE_MAP, IR, Comment, Gate, Measure, Qubit, QubitLike, Reset +from opensquirrel.ir import ( + ANNOTATIONS_TO_TYPE_MAP, + IR, + Bit, + BitLike, + Instruction, + Qubit, + QubitLike, + is_bit_like_annotation, + is_qubit_like_annotation, +) from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager -class CircuitBuilder(GateLibrary, MeasureLibrary, ResetLibrary): +class CircuitBuilder: """ A class using the builder pattern to make construction of circuits easy from Python. Adds corresponding instruction when a method is called. Checks that instructions are known and called with the right @@ -27,9 +34,6 @@ class CircuitBuilder(GateLibrary, MeasureLibrary, ResetLibrary): Args: qubit_register_size (int): Size of the qubit register bit_register_size (int): Size of the bit register - gate_set (list): Supported gates - gate_aliases (dict): Supported gate aliases - measure_set (list): Supported measure instructions Example: >>> CircuitBuilder(qubit_register_size=3, bit_register_size=3).\ @@ -43,47 +47,27 @@ class CircuitBuilder(GateLibrary, MeasureLibrary, ResetLibrary): cnot q[0], q[1] cnot q[0], q[2] - """ - def __init__( - self, - qubit_register_size: int, - bit_register_size: int = 0, - gate_set: list[Callable[..., Gate]] = default_gate_set, - gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, - measure_set: list[Callable[..., Measure]] = default_measure_set, - reset_set: list[Callable[..., Reset]] = default_reset_set, - ) -> None: - GateLibrary.__init__(self, gate_set, gate_aliases) - MeasureLibrary.__init__(self, measure_set) - ResetLibrary.__init__(self, reset_set) + def __init__(self, qubit_register_size: int, bit_register_size: int = 0) -> None: self.register_manager = RegisterManager(QubitRegister(qubit_register_size), BitRegister(bit_register_size)) self.ir = IR() def __getattr__(self, attr: Any) -> Callable[..., Self]: - if attr == "comment": - return self._add_comment - return partial(self._add_instruction, attr) - def _add_comment(self, comment_string: str) -> Self: - self.ir.add_comment(Comment(comment_string)) - return self - def _add_instruction(self, attr: str, *args: Any) -> Self: - if any(attr == measure.__name__ for measure in self.measure_set): - generator_f_measure = MeasureLibrary.get_measure_f(self, attr) - self._check_generator_f_args(generator_f_measure, attr, args) - self.ir.add_measure(generator_f_measure(*args)) - elif any(attr == reset.__name__ for reset in self.reset_set): - generator_f_reset = ResetLibrary.get_reset_f(self, attr) - self._check_generator_f_args(generator_f_reset, attr, args) - self.ir.add_reset(generator_f_reset(*args)) - else: - generator_f_gate = GateLibrary.get_gate_f(self, attr) + if attr in instruction_library.gate_set: + generator_f_gate = instruction_library.get_gate_f(attr) self._check_generator_f_args(generator_f_gate, attr, args) self.ir.add_gate(generator_f_gate(*args)) + elif attr in instruction_library.non_unitary_set: + generator_f_non_unitary = instruction_library.get_non_unitary_f(attr) + self._check_generator_f_args(generator_f_non_unitary, attr, args) + self.ir.add_non_unitary(generator_f_non_unitary(*args)) + else: + msg = f"unknown instruction '{attr}'" + raise ValueError(msg) return self def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: @@ -97,30 +81,31 @@ def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: msg = "qubit index is out of bounds" raise IndexError(msg) - def _check_bit_out_of_bounds_access(self, index: int) -> None: - """Throw error if bit index is outside the qubit register range. + def _check_bit_out_of_bounds_access(self, bit: BitLike) -> None: + """Throw error if bit index is outside the bit register range. Args: - index: bit index + bit: bit to check. """ + index = Bit(bit).index if index >= self.register_manager.get_bit_register_size(): msg = "bit index is out of bounds" raise IndexError(msg) def _check_generator_f_args( self, - generator_f: Callable[..., Gate | Measure | Reset], + generator_f: Callable[..., Instruction], attr: str, args: tuple[Any, ...], ) -> None: - """General instruction validation function. The function checks if each instruction has the proper arguments + """General instruction validation function. + The function checks if each instruction has the proper arguments and if the qubit and bits are within the register range. Args: generator_f: Instruction function attr: Type of instruction args: Arguments parsed into the function - """ for i, par in enumerate(inspect.signature(generator_f).parameters.values()): try: @@ -131,20 +116,20 @@ def _check_generator_f_args( msg = "unknown annotation type" raise TypeError(msg) from e - # fix for python39 + # Fix for Python 3.9 try: - is_incorrect_type = not isinstance(args[i], expected_type) + is_incorrect_type = not isinstance(args[i], expected_type) # type: ignore except TypeError: - # expected type is probably a Union, which works differently in python39 - is_incorrect_type = not isinstance(args[i], expected_type.__args__) + # Expected type is probably a Union, which works differently in Python 3.9 + is_incorrect_type = not isinstance(args[i], expected_type.__args__) # type: ignore if is_incorrect_type: msg = f"wrong argument type for instruction `{attr}`, got {type(args[i])} but expected {expected_type}" raise TypeError(msg) - if expected_type in (QubitLike, Qubit): + if is_qubit_like_annotation(expected_type): self._check_qubit_out_of_bounds_access(args[i]) - elif args[i].__class__.__name__ == "Bit": - self._check_bit_out_of_bounds_access(args[i].index) + elif is_bit_like_annotation(expected_type): + self._check_bit_out_of_bounds_access(args[i]) def to_circuit(self) -> Circuit: return Circuit(deepcopy(self.register_manager), deepcopy(self.ir)) diff --git a/opensquirrel/circuit_matrix_calculator.py b/opensquirrel/circuit_matrix_calculator.py index 77937b5e..9fdc2ef5 100644 --- a/opensquirrel/circuit_matrix_calculator.py +++ b/opensquirrel/circuit_matrix_calculator.py @@ -5,8 +5,8 @@ import numpy as np from numpy.typing import NDArray -from opensquirrel.ir import Comment, Gate, IRVisitor -from opensquirrel.utils.matrix_expander import get_matrix +from opensquirrel.ir import Gate, IRVisitor +from opensquirrel.utils import get_matrix if TYPE_CHECKING: from opensquirrel.circuit import Circuit @@ -19,10 +19,7 @@ def __init__(self, qubit_register_size: int) -> None: def visit_gate(self, gate: Gate) -> None: big_matrix = get_matrix(gate, qubit_register_size=self.qubit_register_size) - self.matrix = big_matrix @ self.matrix - - def visit_comment(self, comment: Comment) -> None: - pass + self.matrix = np.asarray(big_matrix @ self.matrix, dtype=np.complex128) def get_circuit_matrix(circuit: Circuit) -> NDArray[np.complex128]: diff --git a/opensquirrel/common.py b/opensquirrel/common.py index e8544fc8..b10a5984 100644 --- a/opensquirrel/common.py +++ b/opensquirrel/common.py @@ -1,14 +1,24 @@ from __future__ import annotations import math +from typing import SupportsFloat import numpy as np from numpy.typing import NDArray -ATOL = 0.0000001 +ATOL = 0.000_000_1 -def normalize_angle(x: float) -> float: +def normalize_angle(x: SupportsFloat) -> float: + r"""Normalize the angle to be in between the range of $(-\pi, \pi]$. + + Args: + x: value to normalize. + + Returns: + The normalized angle. + """ + x = float(x) t = x - 2 * math.pi * (x // (2 * math.pi) + 1) if t < -math.pi + ATOL: t += 2 * math.pi @@ -38,4 +48,15 @@ def are_matrices_equivalent_up_to_global_phase( phase_difference = matrix_a[first_non_zero] / matrix_b[first_non_zero] - return np.allclose(matrix_a, phase_difference * matrix_b) + return np.allclose(matrix_a, phase_difference * matrix_b, atol=ATOL) + + +def is_identity_matrix_up_to_a_global_phase(matrix: NDArray[np.complex128]) -> bool: + """Checks whether matrix is an identity matrix up to a global phase. + + Args: + matrix: matrix to check. + Returns: + Whether matrix is an identity matrix up to a global phase. + """ + return are_matrices_equivalent_up_to_global_phase(matrix, np.eye(matrix.shape[0], dtype=np.complex128)) diff --git a/opensquirrel/decomposer/__init__.py b/opensquirrel/decomposer/__init__.py deleted file mode 100644 index de0651fa..00000000 --- a/opensquirrel/decomposer/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -from opensquirrel.decomposer.aba_decomposer import ( - XYXDecomposer, - XZXDecomposer, - YXYDecomposer, - YZYDecomposer, - ZXZDecomposer, - ZYZDecomposer, -) -from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer -from opensquirrel.decomposer.general_decomposer import Decomposer -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer - -__all__ = [ - "McKayDecomposer", - "XYXDecomposer", - "XZXDecomposer", - "YXYDecomposer", - "YZYDecomposer", - "ZXZDecomposer", - "ZYZDecomposer", - "CNOTDecomposer", - "Decomposer", -] diff --git a/opensquirrel/decomposer/aba_decomposer.py b/opensquirrel/decomposer/aba_decomposer.py deleted file mode 100644 index 5c48cc34..00000000 --- a/opensquirrel/decomposer/aba_decomposer.py +++ /dev/null @@ -1,199 +0,0 @@ -"""Module containing classes that inherit from the ABADecomposer class to decompose a circuit into one of the Pauli -ABA decompositions.""" - -from __future__ import annotations - -import math -from abc import ABC, abstractmethod -from collections.abc import Callable -from typing import ClassVar - -from opensquirrel.common import ATOL -from opensquirrel.decomposer.general_decomposer import Decomposer -from opensquirrel.default_gates import Rx, Ry, Rz -from opensquirrel.ir import Axis, AxisLike, BlochSphereRotation, Float, Gate -from opensquirrel.utils.identity_filter import filter_out_identities - - -class ABADecomposer(Decomposer, ABC): - @property - @abstractmethod - def ra(self) -> Callable[..., BlochSphereRotation]: ... - - @property - @abstractmethod - def rb(self) -> Callable[..., BlochSphereRotation]: ... - - _gate_list: ClassVar[list[Callable[..., BlochSphereRotation]]] = [Rx, Ry, Rz] - - def __init__(self) -> None: - self.index_a = self._gate_list.index(self.ra) - self.index_b = self._gate_list.index(self.rb) - - def _find_unused_index(self) -> int: - """Finds the index of the axis object that is not used in the decomposition. - For example, if one selects the ZYZ decomposition, the integer returned will be 0 (since it is X). - Returns: - Index of the axis object that is not used in the decomposition. - """ - return ({0, 1, 2} - {self.index_a, self.index_b}).pop() - - def get_decomposition_angles(self, alpha: float, axis: AxisLike) -> tuple[float, float, float]: - """Gives the angles used in the A-B-A decomposition of the Bloch sphere rotation - characterized by a rotation around `axis` of angle `alpha`. - - Parameters: - alpha: angle of the Bloch sphere rotation - axis: _normalized_ axis of the Bloch sphere rotation - - Returns: - A triple (theta1, theta2, theta3) corresponding to the decomposition of the - arbitrary Bloch sphere rotation into U = Ra(theta3) Rb(theta2) Ra(theta1) - - """ - axis = Axis(axis) - a_axis_value = axis[self.index_a] - b_axis_value = axis[self.index_b] - c_axis_value = axis[self._find_unused_index()] - - if not (-math.pi + ATOL < alpha <= math.pi + ATOL): - msg = "angle needs to be normalized" - raise ValueError(msg) - - if abs(alpha - math.pi) < ATOL: - # alpha == pi, math.tan(alpha / 2) is not defined. - if abs(a_axis_value) < ATOL: - theta2 = math.pi - p = 0.0 - m = 2 * math.acos(b_axis_value) - else: - p = math.pi - theta2 = 2 * math.acos(a_axis_value) - if abs(a_axis_value - 1) < ATOL or abs(a_axis_value + 1) < ATOL: - m = p # This can be anything, but setting m = p means theta3 == 0, which is better for gate count. - else: - m = 2 * math.acos( - round(b_axis_value / math.sqrt(1 - a_axis_value**2), abs(math.floor(math.log10(ATOL)))), - ) - - else: - p = 2 * math.atan2(a_axis_value * math.sin(alpha / 2), math.cos(alpha / 2)) - acos_argument = math.cos(alpha / 2) * math.sqrt(1 + (a_axis_value * math.tan(alpha / 2)) ** 2) - - # This fixes float approximations like 1.0000000000002, which acos does not like. - acos_argument = max(min(acos_argument, 1.0), -1.0) - - theta2 = 2 * math.acos(acos_argument) - theta2 = math.copysign(theta2, alpha) - - if abs(math.sin(theta2 / 2)) < ATOL: - m = p # This can be anything, but setting m = p means theta3 == 0, which is better for gate count. - else: - acos_argument = float(b_axis_value) * math.sin(alpha / 2) / math.sin(theta2 / 2) - - # This fixes float approximations like 1.0000000000002, which acos does not like. - acos_argument = max(min(acos_argument, 1.0), -1.0) - m = 2 * math.acos(acos_argument) - if math.pi - abs(m) > ATOL: - m_sign = 2 * math.atan2(c_axis_value, a_axis_value) - m = math.copysign(m, m_sign) - - is_sin_m_negative = self.index_a - self.index_b in (-1, 2) - if is_sin_m_negative: - m = m * -1 - - theta1 = (p + m) / 2 - theta3 = p - theta1 - - return theta1, theta2, theta3 - - def decompose(self, g: Gate) -> list[Gate]: - """General A-B-A decomposition function for a single gate. - - Args: - g: gate to decompose. - - Returns: - Three gates, following the A-B-A convention, corresponding to the decomposition of the input gate. - """ - if not isinstance(g, BlochSphereRotation): - # We only decompose Bloch sphere rotations. - return [g] - - theta1, theta2, theta3 = self.get_decomposition_angles(g.angle, g.axis) - a1 = self.ra(g.qubit, Float(theta1)) - b = self.rb(g.qubit, Float(theta2)) - a2 = self.ra(g.qubit, Float(theta3)) - return filter_out_identities([a1, b, a2]) - - -class XYXDecomposer(ABADecomposer): - """Class responsible for the X-Y-X decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Rx - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Ry - - -class XZXDecomposer(ABADecomposer): - """Class responsible for the X-Z-X decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Rx - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Rz - - -class YXYDecomposer(ABADecomposer): - """Class responsible for the Y-X-Y decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Ry - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Rx - - -class YZYDecomposer(ABADecomposer): - """Class responsible for the Y-Z-Y decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Ry - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Rz - - -class ZXZDecomposer(ABADecomposer): - """Class responsible for the Z-X-Z decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Rz - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Rx - - -class ZYZDecomposer(ABADecomposer): - """Class responsible for the Z-Y-Z decomposition.""" - - @property - def ra(self) -> Callable[..., BlochSphereRotation]: - return Rz - - @property - def rb(self) -> Callable[..., BlochSphereRotation]: - return Ry diff --git a/opensquirrel/default_gate_modifiers.py b/opensquirrel/default_gate_modifiers.py new file mode 100644 index 00000000..a10a0098 --- /dev/null +++ b/opensquirrel/default_gate_modifiers.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from collections.abc import Callable +from typing import Any, SupportsFloat + +from opensquirrel.ir import BlochSphereRotation, ControlledGate, QubitLike + + +class GateModifier: + pass + + +class InverseGateModifier(GateModifier): + def __init__(self, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: + self.generator_f_gate = generator_f_gate + + def __call__(self, *args: Any) -> BlochSphereRotation: + gate: BlochSphereRotation = self.generator_f_gate(*args) + modified_angle = gate.angle * -1 + modified_phase = gate.phase * -1 + return BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + + +class PowerGateModifier(GateModifier): + def __init__(self, exponent: SupportsFloat, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: + self.exponent = exponent + self.generator_f_gate = generator_f_gate + + def __call__(self, *args: Any) -> BlochSphereRotation: + gate: BlochSphereRotation = self.generator_f_gate(*args) + modified_angle = gate.angle * float(self.exponent) + modified_phase = gate.phase * float(self.exponent) + return BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + + +class ControlGateModifier(GateModifier): + def __init__(self, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: + self.generator_f_gate = generator_f_gate + + def __call__(self, control: QubitLike, *args: Any) -> ControlledGate: + gate: BlochSphereRotation = self.generator_f_gate(*args) + return ControlledGate(control, gate) diff --git a/opensquirrel/default_gates.py b/opensquirrel/default_gates.py deleted file mode 100644 index c6640e5e..00000000 --- a/opensquirrel/default_gates.py +++ /dev/null @@ -1,191 +0,0 @@ -from __future__ import annotations - -import math -from collections.abc import Callable -from typing import SupportsInt - -import numpy as np - -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, Gate, Int, MatrixGate, QubitLike, named_gate - - -@named_gate -def I(q: QubitLike) -> BlochSphereRotation: # noqa: E743 - return BlochSphereRotation.identity(q) - - -@named_gate -def H(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def X(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def X90(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi / 2, phase=0) - - -@named_gate -def mX90(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0) - - -@named_gate -def Y(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def Y90(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=math.pi / 2, phase=0) - - -@named_gate -def mY90(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=-math.pi / 2, phase=0) - - -@named_gate -def Z(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def S(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi / 2, phase=0) - - -@named_gate -def Sdag(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=-math.pi / 2, phase=0) - - -@named_gate -def T(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=math.pi / 4, phase=0) - - -@named_gate -def Tdag(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=-math.pi / 4, phase=0) - - -@named_gate -def Rx(q: QubitLike, theta: Float) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=theta.value, phase=0) - - -@named_gate -def Ry(q: QubitLike, theta: Float) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 1, 0), angle=theta.value, phase=0) - - -@named_gate -def Rz(q: QubitLike, theta: Float) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(0, 0, 1), angle=theta.value, phase=0) - - -@named_gate -def CNOT(control: QubitLike, target: QubitLike) -> ControlledGate: - return ControlledGate(control, X(target)) - - -@named_gate -def CZ(control: QubitLike, target: QubitLike) -> ControlledGate: - return ControlledGate(control, Z(target)) - - -@named_gate -def CR(control: QubitLike, target: QubitLike, theta: Float) -> ControlledGate: - return ControlledGate( - control, - BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta.value, phase=theta.value / 2), - ) - - -@named_gate -def CRk(control: QubitLike, target: QubitLike, k: SupportsInt) -> ControlledGate: - theta = 2 * math.pi / (2 ** Int(k).value) - return ControlledGate(control, BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=theta / 2)) - - -@named_gate -def SWAP(q1: QubitLike, q2: QubitLike) -> MatrixGate: - return MatrixGate( - np.array( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - ), - [q1, q2], - ) - - -@named_gate -def sqrtSWAP(q1: QubitLike, q2: QubitLike) -> MatrixGate: - return MatrixGate( - np.array( - [ - [1, 0, 0, 0], - [0, (1 + 1j) / 2, (1 - 1j) / 2, 0], - [0, (1 - 1j) / 2, (1 + 1j) / 2, 0], - [0, 0, 0, 1], - ], - ), - [q1, q2], - ) - - -@named_gate -def CCZ(control1: QubitLike, control2: QubitLike, target: QubitLike) -> ControlledGate: - return ControlledGate(control1, CZ(control2, target)) - - -default_bloch_sphere_rotations_without_params: list[Callable[[QubitLike], BlochSphereRotation]] -default_bloch_sphere_rotations_without_params = [ - I, - H, - X, - X90, - mX90, - Y, - Y90, - mY90, - Z, - S, - Sdag, - T, - Tdag, -] -default_bloch_sphere_rotations: list[ - Callable[[QubitLike], BlochSphereRotation] | Callable[[QubitLike, Float], BlochSphereRotation] -] -default_bloch_sphere_rotations = [ - *default_bloch_sphere_rotations_without_params, - Rx, - Ry, - Rz, -] -default_gate_set: list[Callable[..., Gate]] -default_gate_set = [ - *default_bloch_sphere_rotations, - CNOT, - CZ, - CR, - CRk, - SWAP, - sqrtSWAP, - CCZ, -] - -default_gate_aliases = { - "Hadamard": H, - "Identity": I, -} diff --git a/opensquirrel/default_instructions.py b/opensquirrel/default_instructions.py new file mode 100644 index 00000000..43731048 --- /dev/null +++ b/opensquirrel/default_instructions.py @@ -0,0 +1,243 @@ +from __future__ import annotations + +import math +from collections.abc import Mapping +from typing import Callable, SupportsFloat, SupportsInt + +import numpy as np + +from opensquirrel.ir import ( + Barrier, + BitLike, + BlochSphereRotation, + ControlledGate, + Gate, + Init, + Instruction, + MatrixGate, + Measure, + NonUnitary, + QubitLike, + Reset, + Unitary, + Wait, + named_gate, + non_unitary, +) + +###################### +# Unitary instructions +###################### + + +@named_gate +def I(qubit: QubitLike) -> BlochSphereRotation: # noqa: E743, N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=0, phase=0) + + +@named_gate +def H(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def X(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def X90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=0) + + +@named_gate +def mX90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0) + + +@named_gate +def Y(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def Y90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=0) + + +@named_gate +def mY90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=0) + + +@named_gate +def Z(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2) + + +@named_gate +def S(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=0) + + +@named_gate +def Sdag(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=0) + + +@named_gate +def T(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=0) + + +@named_gate +def Tdag(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=0) + + +@named_gate +def Rx(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=theta, phase=0) + + +@named_gate +def Ry(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=theta, phase=0) + + +@named_gate +def Rz(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 + return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=theta, phase=0) + + +@named_gate +def CNOT(control: QubitLike, target: QubitLike) -> ControlledGate: # noqa: N802 + return ControlledGate(control, X(target)) + + +@named_gate +def CZ(control: QubitLike, target: QubitLike) -> ControlledGate: # noqa: N802 + return ControlledGate(control, Z(target)) + + +@named_gate +def CR(control: QubitLike, target: QubitLike, theta: SupportsFloat) -> ControlledGate: # noqa: N802 + return ControlledGate( + control, + BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), + ) + + +@named_gate +def CRk(control: QubitLike, target: QubitLike, k: SupportsInt) -> ControlledGate: # noqa: N802 + theta = 2 * math.pi / (2 ** int(k)) + return ControlledGate( + control, BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2) + ) + + +@named_gate +def SWAP(qubit0: QubitLike, qubit1: QubitLike) -> MatrixGate: # noqa: N802 + return MatrixGate( + np.array( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + ), + [qubit0, qubit1], + ) + + +########################## +# Non-unitary instructions +########################## + + +@non_unitary +def measure(qubit: QubitLike, b: BitLike) -> Measure: + return Measure(qubit=qubit, bit=b, axis=(0, 0, 1)) + + +@non_unitary +def init(qubit: QubitLike) -> Init: + return Init(qubit=qubit) + + +@non_unitary +def reset(qubit: QubitLike) -> Reset: + return Reset(qubit=qubit) + + +@non_unitary +def barrier(qubit: QubitLike) -> Barrier: + return Barrier(qubit=qubit) + + +@non_unitary +def wait(qubit: QubitLike, time: SupportsInt) -> Wait: + return Wait(qubit=qubit, time=time) + + +default_bloch_sphere_rotation_without_params_set = { + "H": H, + "I": I, + "S": S, + "Sdag": Sdag, + "T": T, + "Tdag": Tdag, + "X": X, + "X90": X90, + "Y": Y, + "Y90": Y90, + "Z": Z, + "mX90": mX90, + "mY90": mY90, +} +default_bloch_sphere_rotation_set = { + **default_bloch_sphere_rotation_without_params_set, + "Rx": Rx, + "Ry": Ry, + "Rz": Rz, +} +default_controlled_gate_set = { + "CNOT": CNOT, + "CR": CR, + "CRk": CRk, + "CZ": CZ, +} +default_matrix_gate_set = { + "SWAP": SWAP, +} +default_gate_alias_set = { + "Hadamard": H, + "Identity": I, +} + +default_gate_set: Mapping[str, Callable[..., Gate]] +default_gate_set = { + **default_bloch_sphere_rotation_set, + **default_controlled_gate_set, + **default_matrix_gate_set, + **default_gate_alias_set, +} + +default_unitary_set: Mapping[str, Callable[..., Unitary]] +default_unitary_set = {**default_gate_set} + +default_non_unitary_set: Mapping[str, Callable[..., NonUnitary]] +default_non_unitary_set = { + "barrier": barrier, + "init": init, + "measure": measure, + "reset": reset, + "wait": wait, +} + +default_instructions: Mapping[str, Callable[..., Instruction]] +default_instructions = { + **default_unitary_set, + **default_non_unitary_set, +} diff --git a/opensquirrel/default_measures.py b/opensquirrel/default_measures.py deleted file mode 100644 index 032851d1..00000000 --- a/opensquirrel/default_measures.py +++ /dev/null @@ -1,14 +0,0 @@ -from opensquirrel.ir import Bit, Measure, QubitLike, named_measure - - -@named_measure -def measure(q: QubitLike, b: Bit) -> Measure: - return Measure(qubit=q, bit=b, axis=(0, 0, 1)) - - -@named_measure -def measure_z(q: QubitLike, b: Bit) -> Measure: - return Measure(qubit=q, bit=b, axis=(0, 0, 1)) - - -default_measure_set = [measure_z, measure] diff --git a/opensquirrel/default_resets.py b/opensquirrel/default_resets.py deleted file mode 100644 index e5516c9a..00000000 --- a/opensquirrel/default_resets.py +++ /dev/null @@ -1,9 +0,0 @@ -from opensquirrel.ir import QubitLike, Reset, named_reset - - -@named_reset -def reset(q: QubitLike) -> Reset: - return Reset(qubit=q) - - -default_reset_set = [reset] diff --git a/opensquirrel/instruction_library.py b/opensquirrel/instruction_library.py index ed980e31..21bb3c03 100644 --- a/opensquirrel/instruction_library.py +++ b/opensquirrel/instruction_library.py @@ -1,55 +1,27 @@ from __future__ import annotations -from collections.abc import Callable, Iterable, Mapping +from collections.abc import Callable from typing import TYPE_CHECKING +from opensquirrel.default_instructions import default_gate_set, default_non_unitary_set + if TYPE_CHECKING: - from opensquirrel.ir import Gate, Measure, Reset - - -class InstructionLibrary: - """Base class for instruction libraries.""" - - -class GateLibrary(InstructionLibrary): - def __init__( - self, - gate_set: Iterable[Callable[..., Gate]], - gate_aliases: Mapping[str, Callable[..., Gate]], - ) -> None: - self.gate_set = gate_set - self.gate_aliases = gate_aliases - - def get_gate_f(self, gate_name: str) -> Callable[..., Gate]: - try: - generator_f = next(f for f in self.gate_set if f.__name__ == gate_name) - except StopIteration as exc: - if gate_name not in self.gate_aliases: - msg = f"unknown instruction `{gate_name}`" - raise ValueError(msg) from exc - generator_f = self.gate_aliases[gate_name] - return generator_f - - -class MeasureLibrary(InstructionLibrary): - def __init__(self, measure_set: Iterable[Callable[..., Measure]]) -> None: - self.measure_set = measure_set - - def get_measure_f(self, measure_name: str) -> Callable[..., Measure]: - try: - return next(f for f in self.measure_set if f.__name__ == measure_name) - except StopIteration as exc: - msg = f"unknown instruction `{measure_name}`" - raise ValueError(msg) from exc - - -class ResetLibrary(InstructionLibrary): - def __init__(self, reset_set: Iterable[Callable[..., Reset]]) -> None: - self.reset_set = reset_set - - def get_reset_f(self, reset_name: str) -> Callable[..., Reset]: - try: - return next(f for f in self.reset_set if f.__name__ == reset_name) - except StopIteration as exc: - msg = f"unknown instruction `{reset_name}`" - raise ValueError(msg) from exc + from opensquirrel.ir import Gate, NonUnitary + + +gate_set = default_gate_set +non_unitary_set = default_non_unitary_set + + +def get_gate_f(gate_name: str) -> Callable[..., Gate]: + if gate_name not in gate_set: + msg = f"unknown gate '{gate_name}'" + raise ValueError(msg) + return gate_set[gate_name] + + +def get_non_unitary_f(non_unitary_name: str) -> Callable[..., NonUnitary]: + if non_unitary_name not in non_unitary_set: + msg = f"unknown non-unitary instruction '{non_unitary_name}'" + raise ValueError(msg) + return non_unitary_set[non_unitary_name] diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py index 6dfb900c..57cf8972 100644 --- a/opensquirrel/ir.py +++ b/opensquirrel/ir.py @@ -22,16 +22,13 @@ def repr_round( class IRVisitor: - def visit_comment(self, comment: Comment) -> Any: - pass - def visit_int(self, i: Int) -> Any: pass def visit_float(self, f: Float) -> Any: pass - def visit_bit(self, qubit: Bit) -> Any: + def visit_bit(self, bit: Bit) -> Any: pass def visit_qubit(self, qubit: Qubit) -> Any: @@ -40,15 +37,27 @@ def visit_qubit(self, qubit: Qubit) -> Any: def visit_gate(self, gate: Gate) -> Any: pass + def visit_non_unitary(self, gate: NonUnitary) -> Any: + pass + def visit_axis(self, axis: Axis) -> Any: pass def visit_measure(self, measure: Measure) -> Any: pass + def visit_init(self, init: Init) -> Any: + pass + def visit_reset(self, reset: Reset) -> Any: pass + def visit_barrier(self, barrier: Barrier) -> Any: + pass + + def visit_wait(self, wait: Wait) -> Any: + pass + def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: pass @@ -69,20 +78,40 @@ class Expression(IRNode, ABC): pass -@dataclass +@dataclass(init=False) class Float(Expression): + """Floats used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``Float`` object. + """ + value: float + def __init__(self, value: SupportsFloat) -> None: + """Init of the ``Float`` object. + + Args: + value: value of the ``Float`` object. + """ + if isinstance(value, SupportsFloat): + self.value = float(value) + return + + msg = "value must be a float" + raise TypeError(msg) + + def __float__(self) -> float: + """Cast the ``Float`` object to a built-in Python ``float``. + + Returns: + Built-in Python ``float`` representation of the ``Float``. + """ + return self.value + def accept(self, visitor: IRVisitor) -> Any: return visitor.visit_float(self) - def __post_init__(self) -> None: - if isinstance(self.value, SupportsFloat): - self.value = float(self.value) - else: - msg = "value must be a float" - raise TypeError(msg) - @dataclass(init=False) class Int(Expression): @@ -107,35 +136,37 @@ def __init__(self, value: SupportsInt) -> None: msg = "value must be an int" raise TypeError(msg) - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_int(self) - def __int__(self) -> int: - """Cast the ``Int`` object to a building python ``int``. + """Cast the ``Int`` object to a built-in Python ``int``. Returns: - Building python ``int`` representation of the ``Int``. + Built-in Python ``int`` representation of the ``Int``. """ return self.value + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_int(self) + -@dataclass +@dataclass(init=False) class Bit(Expression): index: int + def __init__(self, index: BitLike) -> None: + if isinstance(index, SupportsInt): + self.index = int(index) + elif isinstance(index, Bit): + self.index = index.index + else: + msg = "index must be a BitLike" + raise TypeError(msg) + def __hash__(self) -> int: return hash(str(self.__class__) + str(self.index)) def __repr__(self) -> str: return f"Bit[{self.index}]" - def __post_init__(self) -> None: - if isinstance(self.index, SupportsInt): - self.index = int(self.index) - else: - msg = "index must be an int" - raise TypeError(msg) - def accept(self, visitor: IRVisitor) -> Any: return visitor.visit_bit(self) @@ -151,11 +182,6 @@ class Qubit(Expression): index: int def __init__(self, index: QubitLike) -> None: - """Init of the ``Qubit`` object. - - Args: - index: index of the ``Qubit`` object. - """ if isinstance(index, SupportsInt): self.index = int(index) elif isinstance(index, Qubit): @@ -165,11 +191,9 @@ def __init__(self, index: QubitLike) -> None: raise TypeError(msg) def __hash__(self) -> int: - """Create a hash for this qubit.""" return hash(str(self.__class__) + str(self.index)) def __repr__(self) -> str: - """String representation of the Qubit.""" return f"Qubit[{self.index}]" def accept(self, visitor: IRVisitor) -> Any: @@ -190,7 +214,7 @@ def __init__(self, *axis: AxisLike) -> None: axis: An ``AxisLike`` to create the axis from. """ axis_to_parse = axis[0] if len(axis) == 1 else cast(AxisLike, axis) - self._value = self._parse_and_validate_axislike(axis_to_parse) + self._value = self.normalize(self.parse(axis_to_parse)) @property def value(self) -> NDArray[np.float64]: @@ -204,14 +228,15 @@ def value(self, axis: AxisLike) -> None: Args: axis: An ``AxisLike`` to create the axis from. """ - self._value = self._parse_and_validate_axislike(axis) + self._value = self.parse(axis) + self._value = self.normalize(self._value) - @classmethod - def _parse_and_validate_axislike(cls, axis: AxisLike) -> NDArray[np.float64]: + @staticmethod + def parse(axis: AxisLike) -> NDArray[np.float64]: """Parse and validate an ``AxisLike``. - Check if the `axis` can be cast to a 1DArray of length 3, raise an error - otherwise. After casting to an array, the axis is normalized. + Check if the `axis` can be cast to a 1DArray of length 3, raise an error otherwise. + After casting to an array, the axis is normalized. Args: axis: ``AxisLike`` to validate and parse. @@ -231,10 +256,13 @@ def _parse_and_validate_axislike(cls, axis: AxisLike) -> NDArray[np.float64]: if len(axis) != 3: msg = f"axis requires an ArrayLike of length 3, but received an ArrayLike of length {len(axis)}" raise ValueError(msg) - return cls._normalize_axis(axis) + if np.all(axis == 0): + msg = "axis requires at least one element to be non-zero" + raise ValueError(msg) + return axis @staticmethod - def _normalize_axis(axis: NDArray[np.float64]) -> NDArray[np.float64]: + def normalize(axis: NDArray[np.float64]) -> NDArray[np.float64]: """Normalize a NDArray. Args: @@ -245,7 +273,13 @@ def _normalize_axis(axis: NDArray[np.float64]) -> NDArray[np.float64]: """ return axis / np.linalg.norm(axis) - def __getitem__(self, index: int, /) -> np.float64: # type:ignore[override] + @overload + def __getitem__(self, i: int, /) -> np.float64: ... + + @overload + def __getitem__(self, s: slice, /) -> list[np.float64]: ... + + def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: """Get the item at `index`.""" return cast(np.float64, self.value[index]) @@ -266,7 +300,7 @@ def accept(self, visitor: IRVisitor) -> Any: return visitor.visit_axis(self) def __eq__(self, other: Any) -> bool: - """Check if `self` is equal to other. + """Check if `self` is equal to `other`. Two ``Axis`` objects are considered equal if their axes are equal. """ @@ -279,38 +313,84 @@ class Statement(IRNode, ABC): pass -class Measure(Statement, ABC): +class Instruction(Statement, ABC): def __init__( self, - qubit: QubitLike, - bit: Bit, - axis: AxisLike = (0, 0, 1), - generator: Callable[..., Measure] | None = None, + generator: Callable[..., Instruction] | None = None, arguments: tuple[Expression, ...] | None = None, + *args: Any, + **kwargs: Any, ) -> None: self.generator = generator self.arguments = arguments - self.qubit = Qubit(qubit) - self.bit: Bit = bit - self.axis = Axis(axis) - def __repr__(self) -> str: - return f"Measure(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + pass + + +class Unitary(Instruction, ABC): + def __init__( + self, + generator: Callable[..., Unitary] | None = None, + arguments: tuple[Expression, ...] | None = None, + *args: Any, + **kwargs: Any, + ) -> None: + Instruction.__init__(self, generator, arguments) @property def name(self) -> str: - return self.generator.__name__ if self.generator else "" + return self.generator.__name__ if self.generator else "Unknown unitary instruction: " + self.__repr__() + + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + pass + + +class NonUnitary(Instruction, ABC): + def __init__( + self, + generator: Callable[..., NonUnitary] | None = None, + arguments: tuple[Expression, ...] | None = None, + *args: Any, + **kwargs: Any, + ) -> None: + Instruction.__init__(self, generator, arguments) @property - def is_abstract(self) -> bool: - return self.arguments is None + def name(self) -> str: + return self.generator.__name__ if self.generator else "Unknown non-unitary instruction: " + self.__repr__() + + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + pass + + +class Measure(NonUnitary): + def __init__( + self, + qubit: QubitLike, + bit: BitLike, + axis: AxisLike = (0, 0, 1), + generator: Callable[..., Measure] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + NonUnitary.__init__(self, generator, arguments) + self.qubit = Qubit(qubit) + self.bit = Bit(bit) + self.axis = Axis(axis) + + def __repr__(self) -> str: + return f"Measure(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" def __eq__(self, other: object) -> bool: - if not isinstance(other, Measure): - return False - return self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + return ( + isinstance(other, Measure) and self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + ) def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) return visitor.visit_measure(self) def get_bit_operands(self) -> list[Bit]: @@ -320,41 +400,105 @@ def get_qubit_operands(self) -> list[Qubit]: return [self.qubit] -class Reset(Statement, ABC): +class Init(NonUnitary): + def __init__( + self, + qubit: QubitLike, + generator: Callable[..., Init] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + NonUnitary.__init__(self, generator, arguments) + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"Init(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Init) and self.qubit == other.qubit + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_init(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Reset(NonUnitary): def __init__( self, qubit: QubitLike, generator: Callable[..., Reset] | None = None, arguments: tuple[Expression, ...] | None = None, ) -> None: - self.generator = generator - self.arguments = arguments + NonUnitary.__init__(self, generator, arguments) self.qubit = Qubit(qubit) def __repr__(self) -> str: return f"Reset(qubit={self.qubit})" - @property - def name(self) -> str: - return self.generator.__name__ if self.generator else "" + def __eq__(self, other: object) -> bool: + return isinstance(other, Reset) and self.qubit == other.qubit - @property - def is_abstract(self) -> bool: - return self.arguments is None + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_reset(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Barrier(NonUnitary): + def __init__( + self, + qubit: QubitLike, + generator: Callable[..., Barrier] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + NonUnitary.__init__(self, generator, arguments) + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"Barrier(qubit={self.qubit})" def __eq__(self, other: object) -> bool: - if not isinstance(other, Reset): - return False - return self.qubit == other.qubit + return isinstance(other, Barrier) and self.qubit == other.qubit def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_reset(self) + visitor.visit_non_unitary(self) + return visitor.visit_barrier(self) def get_qubit_operands(self) -> list[Qubit]: return [self.qubit] -class Gate(Statement, ABC): +class Wait(NonUnitary): + def __init__( + self, + qubit: QubitLike, + time: SupportsInt, + generator: Callable[..., Wait] | None = None, + arguments: tuple[Expression, ...] | None = None, + ) -> None: + NonUnitary.__init__(self, generator, arguments) + self.qubit = Qubit(qubit) + self.time = Int(time) + + def __repr__(self) -> str: + return f"Wait(qubit={self.qubit}, time={self.time})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_wait(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Gate(Unitary, ABC): def __init__( self, generator: Callable[..., Gate] | None = None, @@ -362,9 +506,7 @@ def __init__( *args: Any, **kwargs: Any, ) -> None: - # Note: two gates are considered equal even when their generators/arguments are different. - self.generator = generator - self.arguments = arguments + Unitary.__init__(self, generator, arguments) def __eq__(self, other: object) -> bool: if not isinstance(other, Gate): @@ -379,35 +521,19 @@ def name(self) -> str: @property def is_anonymous(self) -> bool: - return self.arguments is None + return self.generator is None @staticmethod def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: - """Check if qubit operands are repeated. - - Args: - qubits: Sequence of qubits. - - Returns: - Whether qubit operands are repeated. - """ return len(qubits) != len(set(qubits)) @abstractmethod def get_qubit_operands(self) -> list[Qubit]: - """Get the qubit operands of the Gate. - - Returns: - List of qubits on which the Gate operates. - """ + pass @abstractmethod def is_identity(self) -> bool: - """Check whether the Gate is an identity Gate. - - Returns: - Boolean value stating whether the Gate is an identity Gate. - """ + pass class BlochSphereRotation(Gate): @@ -415,8 +541,8 @@ def __init__( self, qubit: QubitLike, axis: AxisLike, - angle: float, - phase: float = 0, + angle: SupportsFloat, + phase: SupportsFloat = 0, generator: Callable[..., BlochSphereRotation] | None = None, arguments: tuple[Expression, ...] | None = None, ) -> None: @@ -426,10 +552,6 @@ def __init__( self.angle = normalize_angle(angle) self.phase = normalize_angle(phase) - @staticmethod - def identity(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=0, phase=0) - def __repr__(self) -> str: return ( f"BlochSphereRotation({self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}," @@ -446,9 +568,9 @@ def __eq__(self, other: object) -> bool: if abs(self.phase - other.phase) > ATOL: return False - if np.allclose(self.axis, other.axis): + if np.allclose(self.axis, other.axis, atol=ATOL): return abs(self.angle - other.angle) < ATOL - if np.allclose(self.axis, -other.axis.value): + if np.allclose(self.axis, -other.axis.value, atol=ATOL): return abs(self.angle + other.angle) < ATOL return False @@ -506,7 +628,7 @@ def get_qubit_operands(self) -> list[Qubit]: return self.operands def is_identity(self) -> bool: - return np.allclose(self.matrix, np.eye(2 ** len(self.operands))) + return np.allclose(self.matrix, np.eye(2 ** len(self.operands)), atol=ATOL) class ControlledGate(Gate): @@ -539,26 +661,14 @@ def is_identity(self) -> bool: return self.target_gate.is_identity() -@overload -def named_gate(gate_generator: Callable[..., BlochSphereRotation]) -> Callable[..., BlochSphereRotation]: ... - - -@overload -def named_gate(gate_generator: Callable[..., MatrixGate]) -> Callable[..., MatrixGate]: ... - - -@overload -def named_gate(gate_generator: Callable[..., ControlledGate]) -> Callable[..., ControlledGate]: ... - - -def named_gate(gate_generator: Callable[..., Gate]) -> Callable[..., Gate]: - @wraps(gate_generator) - def wrapper(*args: Any, **kwargs: Any) -> Gate: - result = gate_generator(*args, **kwargs) +def instruction_decorator(instruction_generator: Callable[..., Instruction]) -> Callable[..., Instruction]: + @wraps(instruction_generator) + def wrapper(*args: Any, **kwargs: Any) -> Instruction: + result = instruction_generator(*args, **kwargs) result.generator = wrapper all_args: list[Expression] = [] - for par in inspect.signature(gate_generator).parameters.values(): + for par in inspect.signature(instruction_generator).parameters.values(): next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] next_annotation = ( ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation @@ -567,6 +677,10 @@ def wrapper(*args: Any, **kwargs: Any) -> Gate: # Convert to correct expression for IR if is_int_annotation(next_annotation): next_arg = Int(next_arg) + elif is_float_annotation(next_annotation): + next_arg = Float(next_arg) + if is_bit_like_annotation(next_annotation): + next_arg = Bit(next_arg) if is_qubit_like_annotation(next_annotation): next_arg = Qubit(next_arg) @@ -579,56 +693,44 @@ def wrapper(*args: Any, **kwargs: Any) -> Gate: return wrapper -def named_measure(measure_generator: Callable[..., Measure]) -> Callable[..., Measure]: - @wraps(measure_generator) - def wrapper(*args: Any, **kwargs: Any) -> Measure: - result = measure_generator(*args, **kwargs) - result.generator = wrapper +@overload +def named_gate(gate_generator: Callable[..., BlochSphereRotation]) -> Callable[..., BlochSphereRotation]: ... - all_args: list[Any] = [] - for par in inspect.signature(measure_generator).parameters.values(): - next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] - next_annotation = ( - ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation - ) - # Convert to correct expression for IR - if is_qubit_like_annotation(next_annotation): - next_arg = Qubit(next_arg) +@overload +def named_gate(gate_generator: Callable[..., MatrixGate]) -> Callable[..., MatrixGate]: ... - # Append parsed argument - all_args.append(next_arg) - result.arguments = tuple(all_args) - return result +@overload +def named_gate(gate_generator: Callable[..., ControlledGate]) -> Callable[..., ControlledGate]: ... - return wrapper +def named_gate(gate_generator: Callable[..., Gate]) -> Callable[..., Gate]: + return cast(Callable[..., Gate], instruction_decorator(gate_generator)) -def named_reset(reset_generator: Callable[..., Reset]) -> Callable[..., Reset]: - @wraps(reset_generator) - def wrapper(*args: Any, **kwargs: Any) -> Reset: - result = reset_generator(*args, **kwargs) - result.generator = wrapper - all_args: list[Any] = [] - for par in inspect.signature(reset_generator).parameters.values(): - next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] - next_annotation = ( - ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation - ) +@overload +def non_unitary(non_unitary_generator: Callable[..., Measure]) -> Callable[..., Measure]: ... - # Convert to correct expression for IR - if is_qubit_like_annotation(next_annotation): - next_arg = Qubit(next_arg) - # Append parsed argument - all_args.append(next_arg) +@overload +def non_unitary(non_unitary_generator: Callable[..., Init]) -> Callable[..., Init]: ... - result.arguments = tuple(all_args) - return result - return wrapper +@overload +def non_unitary(non_unitary_generator: Callable[..., Reset]) -> Callable[..., Reset]: ... + + +@overload +def non_unitary(non_unitary_generator: Callable[..., Barrier]) -> Callable[..., Barrier]: ... + + +@overload +def non_unitary(non_unitary_generator: Callable[..., Wait]) -> Callable[..., Wait]: ... + + +def non_unitary(non_unitary_generator: Callable[..., NonUnitary]) -> Callable[..., NonUnitary]: + return cast(Callable[..., NonUnitary], instruction_decorator(non_unitary_generator)) def compare_gates(g1: Gate, g2: Gate) -> bool: @@ -643,35 +745,18 @@ def compare_gates(g1: Gate, g2: Gate) -> bool: return are_matrices_equivalent_up_to_global_phase(matrix_g1, matrix_g2) -@dataclass -class Comment(Statement): - str: str - - def __post_init__(self) -> None: - if "*/" in self.str: - msg = "comment contains illegal characters" - raise ValueError(msg) - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_comment(self) - - class IR: - # This is just a list of gates (for now?) def __init__(self) -> None: self.statements: list[Statement] = [] def add_gate(self, gate: Gate) -> None: self.statements.append(gate) - def add_measure(self, measure: Measure) -> None: - self.statements.append(measure) - - def add_reset(self, reset: Reset) -> None: - self.statements.append(reset) + def add_non_unitary(self, non_unitary: NonUnitary) -> None: + self.statements.append(non_unitary) - def add_comment(self, comment: Comment) -> None: - self.statements.append(comment) + def add_statement(self, statement: Statement) -> None: + self.statements.append(statement) def __eq__(self, other: object) -> bool: if not isinstance(other, IR): @@ -689,24 +774,74 @@ def accept(self, visitor: IRVisitor) -> None: # Type Aliases AxisLike = Union[ArrayLike, Axis] +BitLike = Union[SupportsInt, Bit] QubitLike = Union[SupportsInt, Qubit] +def is_bit_like_annotation(annotation: Any) -> bool: + """Check if the provided annotation should be cast to BitLike. + + Args: + annotation: annotation to check. + + Returns: + Boolean value stating whether the annotation is something that should be cast to Bit. + """ + return annotation in (BitLike, Bit) + + def is_qubit_like_annotation(annotation: Any) -> bool: + """Check if the provided annotation should be cast to QubitLike. + + Args: + annotation: annotation to check. + + Returns: + Boolean value stating whether the annotation is something that should be cast to Qubit. + """ return annotation in (QubitLike, Qubit) def is_int_annotation(annotation: Any) -> bool: + """Check if the provided annotation should be cast to Int. + + Args: + annotation: annotation to check. + + Returns: + Boolean value stating whether the annotation is something that should be cast to int. + """ return annotation in (SupportsInt, Int) +def is_float_annotation(annotation: Any) -> bool: + """Check if the provided annotation should be cast to Float. + + Args: + annotation: annotation to check. + + Returns: + Boolean value stating whether the annotation is something that should be cast to float. + """ + return annotation in (SupportsFloat, Float) + + ANNOTATIONS_TO_TYPE_MAP = { "AxisLike": AxisLike, + "Barrier": Barrier, + "Bit": Bit, + "BitLike": BitLike, "BlochSphereRotation": BlochSphereRotation, "ControlledGate": ControlledGate, "Float": Float, + "Init": Init, + "Int": Int, "MatrixGate": MatrixGate, - "SupportsInt": SupportsInt, + "Measure": Measure, "Qubit": Qubit, "QubitLike": QubitLike, + "Reset": Reset, + "SupportsFloat": SupportsFloat, + "SupportsInt": SupportsInt, + "Wait": Wait, } diff --git a/opensquirrel/mapper/__init__.py b/opensquirrel/mapper/__init__.py deleted file mode 100644 index a0557640..00000000 --- a/opensquirrel/mapper/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from opensquirrel.mapper.general_mapper import Mapper -from opensquirrel.mapper.simple_mappers import HardcodedMapper, IdentityMapper - -__all__ = ["Mapper", "IdentityMapper", "HardcodedMapper"] diff --git a/opensquirrel/merger/__init__.py b/opensquirrel/merger/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/opensquirrel/merger/general_merger.py b/opensquirrel/merger/general_merger.py deleted file mode 100644 index 167227b9..00000000 --- a/opensquirrel/merger/general_merger.py +++ /dev/null @@ -1,126 +0,0 @@ -from math import acos, cos, floor, log10, sin - -import numpy as np - -from opensquirrel.circuit import Circuit -from opensquirrel.common import ATOL -from opensquirrel.default_gates import I, default_bloch_sphere_rotations_without_params -from opensquirrel.ir import BlochSphereRotation, Comment, Qubit - - -def compose_bloch_sphere_rotations(a: BlochSphereRotation, b: BlochSphereRotation) -> BlochSphereRotation: - """Computes the Bloch sphere rotation resulting from the composition of two Bloch sphere rotations. - The first rotation is applied and then the second. - The resulting gate is anonymous except if `a` is the identity and `b` is not anonymous, or vice versa. - - Uses Rodrigues' rotation formula, see for instance https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula. - """ - if a.qubit != b.qubit: - msg = "cannot merge two BlochSphereRotation's on different qubits" - raise ValueError(msg) - - acos_argument = cos(a.angle / 2) * cos(b.angle / 2) - sin(a.angle / 2) * sin(b.angle / 2) * np.dot(a.axis, b.axis) - # This fixes float approximations like 1.0000000000002 which acos doesn't like. - acos_argument = max(min(acos_argument, 1.0), -1.0) - - combined_angle = 2 * acos(acos_argument) - - if abs(sin(combined_angle / 2)) < ATOL: - return BlochSphereRotation.identity(a.qubit) - - order_of_magnitude = abs(floor(log10(ATOL))) - combined_axis = np.round( - ( - 1 - / sin(combined_angle / 2) - * ( - sin(a.angle / 2) * cos(b.angle / 2) * a.axis.value - + cos(a.angle / 2) * sin(b.angle / 2) * b.axis.value - + sin(a.angle / 2) * sin(b.angle / 2) * np.cross(a.axis, b.axis) - ) - ), - order_of_magnitude, - ) - - combined_phase = np.round(a.phase + b.phase, order_of_magnitude) - - generator = b.generator if a.is_identity() else a.generator if b.is_identity() else None - arguments = b.arguments if a.is_identity() else a.arguments if b.is_identity() else None - - return BlochSphereRotation( - qubit=a.qubit, - axis=combined_axis, - angle=combined_angle, - phase=combined_phase, - generator=generator, # type: ignore[arg-type] - arguments=arguments, - ) - - -def try_name_anonymous_bloch(bsr: BlochSphereRotation) -> BlochSphereRotation: - """Try converting a given BlochSphereRotation to a default BlochSphereRotation. - It does that by checking if the input BlochSphereRotation is close to a default BlochSphereRotation. - - Notice we don't try to match Rx, Ry, and Rz rotations, as those gates use an extra angle parameter. - - Returns: - A default BlockSphereRotation if this BlochSphereRotation is close to it, - or the input BlochSphereRotation otherwise. - """ - for gate_function in default_bloch_sphere_rotations_without_params: - gate = gate_function(*bsr.get_qubit_operands()) - if ( - np.allclose(gate.axis, bsr.axis) - and np.allclose(gate.angle, bsr.angle) - and np.allclose(gate.phase, bsr.phase) - ): - return gate - return bsr - - -def merge_single_qubit_gates(circuit: Circuit) -> None: - """Merge all consecutive 1-qubit gates in the circuit. - - Gates obtained from merging other gates become anonymous gates. - - Args: - circuit: Circuit to perform the merge on. - """ - accumulators_per_qubit: dict[Qubit, BlochSphereRotation] = { - Qubit(qubit_index): I(qubit_index) for qubit_index in range(circuit.qubit_register_size) - } - - ir = circuit.ir - statement_index = 0 - while statement_index < len(ir.statements): - statement = ir.statements[statement_index] - - if isinstance(statement, Comment): - # Skip, since statement is a comment - statement_index += 1 - continue - - if isinstance(statement, BlochSphereRotation): - # Accumulate consecutive Bloch sphere rotations - already_accumulated = accumulators_per_qubit[statement.qubit] - - composed = compose_bloch_sphere_rotations(statement, already_accumulated) - accumulators_per_qubit[statement.qubit] = composed - - del ir.statements[statement_index] - continue - - # Skip controlled-gates, measure, reset, and reset accumulator for their qubit operands - for qubit_operand in statement.get_qubit_operands(): # type: ignore - if not accumulators_per_qubit[qubit_operand].is_identity(): - ir.statements.insert(statement_index, accumulators_per_qubit[qubit_operand]) - accumulators_per_qubit[qubit_operand] = I(qubit_operand) - statement_index += 1 - - statement_index += 1 - - for accumulated_bloch_sphere_rotation in accumulators_per_qubit.values(): - if not accumulated_bloch_sphere_rotation.is_identity(): - if accumulated_bloch_sphere_rotation.is_anonymous: - accumulated_bloch_sphere_rotation = try_name_anonymous_bloch(accumulated_bloch_sphere_rotation) - ir.statements.append(accumulated_bloch_sphere_rotation) diff --git a/opensquirrel/parser/libqasm/parser.py b/opensquirrel/parser/libqasm/parser.py index f75c15c1..07e453cf 100644 --- a/opensquirrel/parser/libqasm/parser.py +++ b/opensquirrel/parser/libqasm/parser.py @@ -1,43 +1,32 @@ from __future__ import annotations -from collections.abc import Callable, Iterable, Mapping -from typing import Any +from collections.abc import Callable +from typing import Any, cast import cqasm.v3x as cqasm +from opensquirrel import instruction_library from opensquirrel.circuit import Circuit -from opensquirrel.default_gates import default_gate_aliases, default_gate_set -from opensquirrel.default_measures import default_measure_set -from opensquirrel.default_resets import default_reset_set -from opensquirrel.instruction_library import GateLibrary, MeasureLibrary, ResetLibrary -from opensquirrel.ir import IR, Bit, Float, Gate, Int, Measure, Qubit, Reset +from opensquirrel.default_gate_modifiers import ControlGateModifier, InverseGateModifier, PowerGateModifier +from opensquirrel.ir import IR, Bit, BlochSphereRotation, Float, Gate, Int, NonUnitary, Qubit, Statement from opensquirrel.register_manager import RegisterManager -class Parser(GateLibrary, MeasureLibrary, ResetLibrary): - def __init__( - self, - gate_set: Iterable[Callable[..., Gate]] = default_gate_set, - gate_aliases: Mapping[str, Callable[..., Gate]] = default_gate_aliases, - measure_set: Iterable[Callable[..., Measure]] = default_measure_set, - reset_set: Iterable[Callable[..., Reset]] = default_reset_set, - ) -> None: - GateLibrary.__init__(self, gate_set, gate_aliases) - MeasureLibrary.__init__(self, measure_set) - ResetLibrary.__init__(self, reset_set) +class Parser: + def __init__(self) -> None: self.ir = None @staticmethod def _ast_literal_to_ir_literal( - cqasm_literal_expression: cqasm.values.ConstInt | cqasm.values.ConstFloat, + ast_literal: cqasm.values.ConstInt | cqasm.values.ConstFloat | None, ) -> Int | Float | None: - if type(cqasm_literal_expression) not in [cqasm.values.ConstInt, cqasm.values.ConstFloat]: - msg = f"unrecognized type: {type(cqasm_literal_expression)}" + if type(ast_literal) not in [cqasm.values.ConstInt, cqasm.values.ConstFloat, type(None)]: + msg = f"unrecognized type: {type(ast_literal)}" raise TypeError(msg) - if isinstance(cqasm_literal_expression, cqasm.values.ConstInt): - return Int(cqasm_literal_expression.value) - if isinstance(cqasm_literal_expression, cqasm.values.ConstFloat): - return Float(cqasm_literal_expression.value) + if isinstance(ast_literal, cqasm.values.ConstInt): + return Int(ast_literal.value) + if isinstance(ast_literal, cqasm.values.ConstFloat): + return Float(ast_literal.value) return None @staticmethod @@ -64,6 +53,14 @@ def _is_bit_type(ast_expression: Any) -> bool: ast_type = Parser._type_of(ast_expression) return bool(ast_type == cqasm.types.Bit or ast_type == cqasm.types.BitArray) + @staticmethod + def _is_gate_instruction(ast_node: Any) -> bool: + return isinstance(ast_node, cqasm.semantic.GateInstruction) + + @staticmethod + def _is_non_unitary_instruction(ast_node: Any) -> bool: + return isinstance(ast_node, cqasm.semantic.NonGateInstruction) + @staticmethod def _get_qubits( ast_qubit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef, @@ -97,56 +94,70 @@ def _get_bits( return ret @classmethod - def _get_expanded_measure_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: - """Construct a list with a list of bits and a list of qubits, then return a zip of both lists. - For example: [(Qubit(0), Bit(0)), (Qubit(1), Bit(1))] - - Notice the list is walked in reverse mode. - This is because the AST measure node has a bit first operand and a qubit second operand. + def _get_instruction_operands( + cls, + instruction: cqasm.semantic.Instruction, + register_manager: RegisterManager, + ) -> list[list[Any]]: + """Get the list of lists of operands of an instruction. + Notice that an instruction just has a list of operands. The outer list is needed to support SGMQ. + For example, for CNOT q[0, 1] q[2, 3], this function returns [[Qubit(0), Qubit(1)], [Qubit(2), Qubit(3)]]. """ - expanded_args: list[list[Any]] = [] - for ast_arg in reversed(ast_args): - if Parser._is_qubit_type(ast_arg): - expanded_args.append(cls._get_qubits(ast_arg, register_manager)) - elif Parser._is_bit_type(ast_arg): - expanded_args.append(cls._get_bits(ast_arg, register_manager)) + ret: list[list[Any]] = [] + for operand in instruction.operands: + if cls._is_qubit_type(operand): + ret.append(cls._get_qubits(operand, register_manager)) else: - msg = "received argument is not a (qu)bit" + msg = "argument is not of qubit type" raise TypeError(msg) - return zip(*expanded_args) + return ret @classmethod - def _get_expanded_reset_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: - """Construct a list of qubits and return a zip. - For example: [Qubit(0), Qubit(1), Qubit(2)] + def _get_named_gate_param(cls, gate: cqasm.semantic.Gate) -> Any: + """Get the parameter of a named gate. + Notice the input gate can be a composition of gate modifiers acting on a named gate. """ - expanded_args: list[Any] = [] - if len(ast_args) < 1: - expanded_args += [Qubit(qubit_index) for qubit_index in range(register_manager.get_qubit_register_size())] - return zip(expanded_args) - for ast_arg in ast_args: - if Parser._is_qubit_type(ast_arg): - expanded_args += cls._get_qubits(ast_arg, register_manager) - else: - msg = "received argument is not a (qu)bit" - raise TypeError(msg) - return zip(expanded_args) + if gate.name in ["inv", "pow", "ctrl"]: + return cls._get_named_gate_param(gate.gate) + return cls._ast_literal_to_ir_literal(gate.parameter) @classmethod - def _get_expanded_gate_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + def _get_expanded_instruction_args( + cls, + instruction: cqasm.semantic.Instruction, + register_manager: RegisterManager, + ) -> zip[tuple[Any, ...]]: """Construct a list with a list of qubits and a list of parameters, then return a zip of both lists. - For example: [(Qubit(0), Float(pi)), (Qubit(1), Float(pi))] + For example, for CRk(2) q[0, 1] q[2, 3], this function first constructs the list with a list of qubits + [[Qubit(0), Qubit(1)], [Qubit(2), Qubit(3)]], then appends the list of parameters [Int(2), Int(2)], + and finally zips the whole list and returns [(Qubit(0), Qubit(1), Int(2)), (Qubit(2), Qubit(3), Int(2))] + """ + ret = cls._get_instruction_operands(instruction, register_manager) + if isinstance(instruction, cqasm.semantic.GateInstruction): + gate_parameter = cls._get_named_gate_param(instruction.gate) + else: + gate_parameter = cls._ast_literal_to_ir_literal(instruction.parameter) + if gate_parameter: + number_of_operands = len(ret[0]) + ret.append([gate_parameter] * number_of_operands) + return zip(*ret) + + @classmethod + def _get_expanded_measure_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + """Construct a list with a list of bits and a list of qubits, then return a zip of both lists. + For example: [(Qubit(0), Bit(0)), (Qubit(1), Bit(1))] """ - number_of_operands = 0 - for ast_arg in ast_args: - if Parser._is_qubit_type(ast_arg): - number_of_operands += Parser._size_of(ast_arg) + # Notice the list is walked in reverse mode + # This is because the AST measure node has a bit first operand and a qubit second operand expanded_args: list[list[Any]] = [] - for ast_arg in ast_args: - if Parser._is_qubit_type(ast_arg): + for ast_arg in reversed(ast_args): + if cls._is_qubit_type(ast_arg): expanded_args.append(cls._get_qubits(ast_arg, register_manager)) + elif cls._is_bit_type(ast_arg): + expanded_args.append(cls._get_bits(ast_arg, register_manager)) else: - expanded_args.append([cls._ast_literal_to_ir_literal(ast_arg)] * number_of_operands) + msg = "argument is neither of qubit nor bit type" + raise TypeError(msg) return zip(*expanded_args) @staticmethod @@ -159,6 +170,25 @@ def _check_analysis_result(result: Any) -> None: if isinstance(result, list): raise OSError("parsing error: " + ", ".join(result)) + @staticmethod + def _get_gate_f(instruction: cqasm.semantic.GateInstruction) -> Callable[..., Gate]: + gate_name = instruction.gate.name + if gate_name in ["inv", "pow", "ctrl"]: + modified_gate_f = cast(Callable[..., BlochSphereRotation], Parser._get_gate_f(instruction.gate)) + if gate_name == "inv": + return InverseGateModifier(modified_gate_f) + if gate_name == "pow": + return PowerGateModifier(instruction.gate.parameter.value, modified_gate_f) + if gate_name == "ctrl": + return ControlGateModifier(modified_gate_f) + msg = "parsing error: unknown unitary instruction" + raise OSError(msg) + return instruction_library.get_gate_f(gate_name) + + @staticmethod + def _get_non_unitary_f(instruction: cqasm.semantic.NonGateInstruction) -> Callable[..., NonUnitary]: + return instruction_library.get_non_unitary_f(instruction.name) + def circuit_from_string(self, s: str) -> Circuit: # Analysis result will be either an Abstract Syntax Tree (AST) or a list of error messages analyzer = Parser._create_analyzer() @@ -172,20 +202,24 @@ def circuit_from_string(self, s: str) -> Circuit: # Parse statements ir = IR() for statement in ast.block.statements: - if "measure" in statement.name: - generator_f_measure = self.get_measure_f(statement.name) - expanded_args = Parser._get_expanded_measure_args(statement.operands, register_manager) - for arg_set in expanded_args: - ir.add_measure(generator_f_measure(*arg_set)) - elif "reset" in statement.name: - generator_f_reset = self.get_reset_f(statement.name) - expanded_args = Parser._get_expanded_reset_args(statement.operands, register_manager) - for arg_set in expanded_args: - ir.add_reset(generator_f_reset(*arg_set)) + instruction_generator: Callable[..., Statement] + if Parser._is_gate_instruction(statement): + instruction_generator = self._get_gate_f(statement) + expanded_args = Parser._get_expanded_instruction_args(statement, register_manager) + elif Parser._is_non_unitary_instruction(statement): + instruction_generator = self._get_non_unitary_f(statement) + expanded_args = ( + Parser._get_expanded_measure_args(statement.operands, register_manager) + if statement.name == "measure" + else Parser._get_expanded_instruction_args(statement, register_manager) + ) else: - generator_f_gate = self.get_gate_f(statement.name) - expanded_args = Parser._get_expanded_gate_args(statement.operands, register_manager) - for arg_set in expanded_args: - ir.add_gate(generator_f_gate(*arg_set)) - + msg = "parsing error: unknown statement" + raise OSError(msg) + + # For an SGMQ instruction: + # expanded_args will contain a list with the list of qubits for each individual instruction, + # while args will contain the list of qubits of an individual instruction + for args in expanded_args: + ir.add_statement(instruction_generator(*args)) return Circuit(register_manager, ir) diff --git a/opensquirrel/exporter/__init__.py b/opensquirrel/passes/__init__.py similarity index 100% rename from opensquirrel/exporter/__init__.py rename to opensquirrel/passes/__init__.py diff --git a/opensquirrel/passes/decomposer/__init__.py b/opensquirrel/passes/decomposer/__init__.py new file mode 100644 index 00000000..08d819c2 --- /dev/null +++ b/opensquirrel/passes/decomposer/__init__.py @@ -0,0 +1,27 @@ +from opensquirrel.passes.decomposer.aba_decomposer import ( + XYXDecomposer, + XZXDecomposer, + YXYDecomposer, + YZYDecomposer, + ZXZDecomposer, + ZYZDecomposer, +) +from opensquirrel.passes.decomposer.cnot2cz_decomposer import CNOT2CZDecomposer +from opensquirrel.passes.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.passes.decomposer.general_decomposer import Decomposer +from opensquirrel.passes.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.passes.decomposer.swap2cnot_decomposer import SWAP2CNOTDecomposer + +__all__ = [ + "CNOT2CZDecomposer", + "CNOTDecomposer", + "Decomposer", + "McKayDecomposer", + "SWAP2CNOTDecomposer", + "XYXDecomposer", + "XZXDecomposer", + "YXYDecomposer", + "YZYDecomposer", + "ZXZDecomposer", + "ZYZDecomposer", +] diff --git a/opensquirrel/passes/decomposer/aba_decomposer.py b/opensquirrel/passes/decomposer/aba_decomposer.py new file mode 100644 index 00000000..13bf3fc0 --- /dev/null +++ b/opensquirrel/passes/decomposer/aba_decomposer.py @@ -0,0 +1,216 @@ +"""Module containing classes that inherit from the ABADecomposer class to decompose a circuit into one of the Pauli +ABA decompositions.""" + +from __future__ import annotations + +import math +from abc import ABC, abstractmethod +from collections.abc import Callable +from typing import Any, ClassVar + +from opensquirrel import Rx, Ry, Rz +from opensquirrel.common import ATOL +from opensquirrel.ir import Axis, AxisLike, BlochSphereRotation, Gate +from opensquirrel.passes.decomposer.general_decomposer import Decomposer +from opensquirrel.utils import acos, are_axes_consecutive, filter_out_identities + + +class ABADecomposer(Decomposer, ABC): + @property + @abstractmethod + def ra(self) -> Callable[..., BlochSphereRotation]: ... + + @property + @abstractmethod + def rb(self) -> Callable[..., BlochSphereRotation]: ... + + _gate_list: ClassVar[list[Callable[..., BlochSphereRotation]]] = [Rx, Ry, Rz] + + def __init__(self) -> None: + self.index_a = self._gate_list.index(self.ra) + self.index_b = self._gate_list.index(self.rb) + + def _find_unused_index(self) -> int: + """Finds the index of the axis object that is not used in the decomposition. + For example, if one selects the ZYZ decomposition, the integer returned will be 0 (since it is X). + + Returns: + Index of the axis object that is not used in the decomposition. + """ + return ({0, 1, 2} - {self.index_a, self.index_b}).pop() + + def _set_a_b_c_axes_values(self, axis: AxisLike) -> tuple[Any, Any, Any]: + """Given: + - an A-B-A decomposition strategy (where A and B can be either X, Y, or Z), and + - a rotation axis { X: x, Y: y, Z: z } corresponding to a Bloch sphere rotation. + Sets a new rotation axis (a, b, c) such that a = axis[A], b = axis[B], and c = axis[C]. + For example, given a Z-X-Z decomposition strategy, and an axis (x, y, z), sets (a, b, c) = (z, x, y). + + Parameters: + axis: _normalized_ axis of a Bloch sphere rotation + + Returns: + A triplet (a, b, c) where a, b, and c are the values of x, y, and z reordered. + """ + _axis = Axis(axis) + return _axis[self.index_a], _axis[self.index_b], _axis[self._find_unused_index()] + + @staticmethod + def _are_b_and_c_axes_in_negative_octant(b_axis_value: float, c_axis_value: float) -> bool: + """Given an ABC axis system, and the values for axes B and C. + Checks if the values for the B and C axes fall in one of the two negative octants (A positive or negative, + and B and C negative, or one of them zero). + + Returns: + True if the values for axis B and C are both negative or zero, but not zero at the same time. + False otherwise. + """ + return ( + (b_axis_value < 0 or abs(b_axis_value) < ATOL) + and (c_axis_value < 0 or abs(c_axis_value) < ATOL) + and not (abs(b_axis_value) < ATOL and abs(c_axis_value) < ATOL) + ) + + def get_decomposition_angles(self, axis: AxisLike, alpha: float) -> tuple[float, float, float]: + """Given: + - an A-B-A decomposition strategy (where A and B can be either X, Y, or Z), and + - the rotation axis and angle corresponding to a Bloch sphere rotation. + Calculates the rotation angles around axes A, B, and C, + such that the original Bloch sphere rotation can be expressed as U = Ra(theta3) Rb(theta2) Rc(theta1), + Rn meaning rotation around axis N + + Parameters: + axis: _normalized_ axis of a Bloch sphere rotation + alpha: angle of a Bloch sphere rotation + + Returns: + A triplet (theta_1, theta_2, theta_3), where theta_1, theta_2, and theta_3 are the rotation angles around + axes A, B, and C, respectively. + """ + if not (-math.pi + ATOL < alpha <= math.pi + ATOL): + msg = "angle needs to be normalized" + raise ValueError(msg) + + a_axis_value, b_axis_value, c_axis_value = self._set_a_b_c_axes_values(axis) + + # Calculate primary angle + p = 2 * math.atan2(a_axis_value * math.sin(alpha / 2), math.cos(alpha / 2)) + + # Calculate theta 2 + theta_2 = 2 * acos(math.cos(alpha / 2) * math.sqrt(1 + (a_axis_value * math.tan(alpha / 2)) ** 2)) + theta_2 = math.copysign(theta_2, alpha) + + # Calculate secondary angle + if abs(math.sin(theta_2 / 2)) < ATOL: + # This can be anything, but setting m = p means theta_3 == 0, which is better for gate count. + m = p + else: + m = 2 * acos(float(b_axis_value) * math.sin(alpha / 2) / math.sin(theta_2 / 2)) + if math.pi - abs(m) > ATOL: + ret_sign = 2 * math.atan2(c_axis_value, a_axis_value) + m = math.copysign(m, ret_sign) + + # Check if the sign of the secondary angle has to be flipped + if are_axes_consecutive(self.index_a, self.index_b): + m = -m + + # Calculate theta 1 and theta 2 + theta_1 = (p + m) / 2 + theta_3 = p - theta_1 + + # Check if theta 1 and theta 3 have to be swapped + if ABADecomposer._are_b_and_c_axes_in_negative_octant(b_axis_value, c_axis_value): + theta_1, theta_3 = theta_3, theta_1 + + return theta_1, theta_2, theta_3 + + def decompose(self, g: Gate) -> list[Gate]: + """General A-B-A decomposition function for a single gate. + + Args: + g: gate to decompose. + + Returns: + Three gates, following the A-B-A convention, corresponding to the decomposition of the input gate. + """ + if not isinstance(g, BlochSphereRotation): + # We only decompose Bloch sphere rotations. + return [g] + + theta1, theta2, theta3 = self.get_decomposition_angles(g.axis, g.angle) + a1 = self.ra(g.qubit, theta1) + b = self.rb(g.qubit, theta2) + a2 = self.ra(g.qubit, theta3) + return filter_out_identities([a1, b, a2]) + + +class XYXDecomposer(ABADecomposer): + """Class responsible for the X-Y-X decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rx + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Ry + + +class XZXDecomposer(ABADecomposer): + """Class responsible for the X-Z-X decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rx + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rz + + +class YXYDecomposer(ABADecomposer): + """Class responsible for the Y-X-Y decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Ry + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rx + + +class YZYDecomposer(ABADecomposer): + """Class responsible for the Y-Z-Y decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Ry + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rz + + +class ZXZDecomposer(ABADecomposer): + """Class responsible for the Z-X-Z decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rz + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Rx + + +class ZYZDecomposer(ABADecomposer): + """Class responsible for the Z-Y-Z decomposition.""" + + @property + def ra(self) -> Callable[..., BlochSphereRotation]: + return Rz + + @property + def rb(self) -> Callable[..., BlochSphereRotation]: + return Ry diff --git a/opensquirrel/passes/decomposer/cnot2cz_decomposer.py b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py new file mode 100644 index 00000000..f71e6ee6 --- /dev/null +++ b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import math + +from opensquirrel.default_instructions import CZ, Ry +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.passes.decomposer.general_decomposer import Decomposer + + +class CNOT2CZDecomposer(Decomposer): + """Predefined decomposition of CNOT gate to CZ gate with Y rotations. + + ---•--- -----------------•---------------- + | → | + ---⊕--- --[Ry(-pi/2)]---[Z]---[Ry(pi/2)]-- + + Note: + This decomposition preserves the global phase of the CNOT gate. + """ + + def decompose(self, gate: Gate) -> list[Gate]: + if gate.name != "CNOT": + return [gate] + if isinstance(gate, ControlledGate): + if not isinstance(gate.target_gate, BlochSphereRotation): + # ControlledGate's with 2+ control qubits are ignored. + return [gate] + control_qubit = gate.control_qubit + target_qubit = gate.target_gate.qubit + else: + # If CNOT is not implemented as a ControlledGate but, e.g., as a MatrixGate. + control_qubit, target_qubit = gate.get_qubit_operands() + return [ + Ry(target_qubit, -math.pi / 2), + CZ(control_qubit, target_qubit), + Ry(target_qubit, math.pi / 2), + ] diff --git a/opensquirrel/decomposer/cnot_decomposer.py b/opensquirrel/passes/decomposer/cnot_decomposer.py similarity index 69% rename from opensquirrel/decomposer/cnot_decomposer.py rename to opensquirrel/passes/decomposer/cnot_decomposer.py index b1eb6acf..229d654a 100644 --- a/opensquirrel/decomposer/cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot_decomposer.py @@ -2,13 +2,13 @@ import math +from opensquirrel import CNOT, Ry, Rz, X from opensquirrel.common import ATOL -from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer -from opensquirrel.decomposer.general_decomposer import Decomposer -from opensquirrel.default_gates import CNOT, Ry, Rz, X -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, Gate -from opensquirrel.merger import general_merger -from opensquirrel.utils.identity_filter import filter_out_identities +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.passes.decomposer import ZYZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import Decomposer +from opensquirrel.passes.merger import general_merger +from opensquirrel.utils import filter_out_identities class CNOTDecomposer(Decomposer): @@ -40,28 +40,28 @@ def decompose(self, g: Gate) -> list[Gate]: # Try special case first, see https://arxiv.org/pdf/quant-ph/9503016.pdf lemma 5.5 controlled_rotation_times_x = general_merger.compose_bloch_sphere_rotations(X(target_qubit), g.target_gate) theta0_with_x, theta1_with_x, theta2_with_x = ZYZDecomposer().get_decomposition_angles( - controlled_rotation_times_x.angle, controlled_rotation_times_x.axis, + controlled_rotation_times_x.angle, ) if abs((theta0_with_x - theta2_with_x) % (2 * math.pi)) < ATOL: # The decomposition can use a single CNOT according to the lemma. - A = [Ry(target_qubit, Float(-theta1_with_x / 2)), Rz(target_qubit, Float(-theta2_with_x))] - B = [Rz(target_qubit, Float(theta2_with_x)), Ry(target_qubit, Float(theta1_with_x / 2))] + A = [Ry(target_qubit, -theta1_with_x / 2), Rz(target_qubit, -theta2_with_x)] # noqa: N806 + B = [Rz(target_qubit, theta2_with_x), Ry(target_qubit, theta1_with_x / 2)] # noqa: N806 return filter_out_identities( [ *B, CNOT(g.control_qubit, target_qubit), *A, - Rz(g.control_qubit, Float(g.target_gate.phase - math.pi / 2)), + Rz(g.control_qubit, g.target_gate.phase - math.pi / 2), ], ) - theta0, theta1, theta2 = ZYZDecomposer().get_decomposition_angles(g.target_gate.angle, g.target_gate.axis) + theta0, theta1, theta2 = ZYZDecomposer().get_decomposition_angles(g.target_gate.axis, g.target_gate.angle) - A = [Ry(target_qubit, Float(theta1 / 2)), Rz(target_qubit, Float(theta2))] - B = [Rz(target_qubit, Float(-(theta0 + theta2) / 2)), Ry(target_qubit, Float(-theta1 / 2))] - C = [Rz(target_qubit, Float((theta0 - theta2) / 2))] + A = [Ry(target_qubit, theta1 / 2), Rz(target_qubit, theta2)] # noqa: N806 + B = [Rz(target_qubit, -(theta0 + theta2) / 2), Ry(target_qubit, -theta1 / 2)] # noqa: N806 + C = [Rz(target_qubit, (theta0 - theta2) / 2)] # noqa: N806 return filter_out_identities( [ @@ -70,6 +70,6 @@ def decompose(self, g: Gate) -> list[Gate]: *B, CNOT(g.control_qubit, target_qubit), *A, - Rz(g.control_qubit, Float(g.target_gate.phase)), + Rz(g.control_qubit, g.target_gate.phase), ], ) diff --git a/opensquirrel/decomposer/general_decomposer.py b/opensquirrel/passes/decomposer/general_decomposer.py similarity index 95% rename from opensquirrel/decomposer/general_decomposer.py rename to opensquirrel/passes/decomposer/general_decomposer.py index dc24cf50..779e4fb1 100644 --- a/opensquirrel/decomposer/general_decomposer.py +++ b/opensquirrel/passes/decomposer/general_decomposer.py @@ -4,7 +4,7 @@ from collections.abc import Callable, Iterable from opensquirrel.circuit_matrix_calculator import get_circuit_matrix -from opensquirrel.common import are_matrices_equivalent_up_to_global_phase +from opensquirrel.common import are_matrices_equivalent_up_to_global_phase, is_identity_matrix_up_to_a_global_phase from opensquirrel.ir import IR, Gate from opensquirrel.reindexer import get_reindexed_circuit @@ -18,6 +18,11 @@ def decompose(self, gate: Gate) -> list[Gate]: def check_gate_replacement(gate: Gate, replacement_gates: Iterable[Gate]) -> None: gate_qubit_indices = [q.index for q in gate.get_qubit_operands()] replacement_gates_qubit_indices = set() + replaced_matrix = get_circuit_matrix(get_reindexed_circuit([gate], gate_qubit_indices)) + + if is_identity_matrix_up_to_a_global_phase(replaced_matrix): + return + for g in replacement_gates: replacement_gates_qubit_indices.update([q.index for q in g.get_qubit_operands()]) @@ -25,7 +30,6 @@ def check_gate_replacement(gate: Gate, replacement_gates: Iterable[Gate]) -> Non msg = f"replacement for gate {gate.name} does not seem to operate on the right qubits" raise ValueError(msg) - replaced_matrix = get_circuit_matrix(get_reindexed_circuit([gate], gate_qubit_indices)) replacement_matrix = get_circuit_matrix(get_reindexed_circuit(replacement_gates, gate_qubit_indices)) if not are_matrices_equivalent_up_to_global_phase(replaced_matrix, replacement_matrix): diff --git a/opensquirrel/decomposer/mckay_decomposer.py b/opensquirrel/passes/decomposer/mckay_decomposer.py similarity index 67% rename from opensquirrel/decomposer/mckay_decomposer.py rename to opensquirrel/passes/decomposer/mckay_decomposer.py index 09b3cedd..72d4a43b 100644 --- a/opensquirrel/decomposer/mckay_decomposer.py +++ b/opensquirrel/passes/decomposer/mckay_decomposer.py @@ -2,11 +2,11 @@ from math import atan2, cos, pi, sin, sqrt +from opensquirrel import X90, I, Rz from opensquirrel.common import ATOL, normalize_angle -from opensquirrel.decomposer.aba_decomposer import ZXZDecomposer -from opensquirrel.decomposer.general_decomposer import Decomposer -from opensquirrel.default_gates import X90, Rz -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel.ir import Axis, BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import ZXZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import Decomposer class McKayDecomposer(Decomposer): @@ -25,20 +25,26 @@ def decompose(self, g: Gate) -> list[Gate]: return [g] if abs(g.angle) < ATOL: - return [] + return [I(g.qubit)] if g.axis[0] == 0 and g.axis[1] == 0: rz_angle = float(g.angle * g.axis[2]) - return [Rz(g.qubit, Float(rz_angle))] + return [Rz(g.qubit, rz_angle)] zxz_decomposition = ZXZDecomposer().decompose(g) zxz_angle = 0.0 - if len(zxz_decomposition) >= 2 and isinstance(zxz_decomposition[1], BlochSphereRotation): - zxz_angle = zxz_decomposition[1].angle + if len(zxz_decomposition) >= 2: + zxz_angle = next( + gate.angle + for gate in zxz_decomposition + if isinstance(gate, BlochSphereRotation) and gate.axis == Axis(1, 0, 0) + ) if abs(zxz_angle - pi / 2) < ATOL: - zxz_decomposition[1] = X90(g.qubit) - return zxz_decomposition + return [ + X90(g.qubit) if isinstance(gate, BlochSphereRotation) and gate.axis == Axis(1, 0, 0) else gate + for gate in zxz_decomposition + ] # McKay decomposition za_mod = sqrt(cos(g.angle / 2) ** 2 + (g.axis[2] * sin(g.angle / 2)) ** 2) @@ -59,21 +65,20 @@ def decompose(self, g: Gate) -> list[Gate]: decomposed_g: list[Gate] = [] if abs(theta) < ATOL and lam == phi: - decomposed_g.append(X90(g.qubit)) - decomposed_g.append(X90(g.qubit)) + decomposed_g.extend((X90(g.qubit), X90(g.qubit))) return decomposed_g if abs(lam) > ATOL: - decomposed_g.append(Rz(g.qubit, Float(lam))) + decomposed_g.append(Rz(g.qubit, lam)) decomposed_g.append(X90(g.qubit)) if abs(theta) > ATOL: - decomposed_g.append(Rz(g.qubit, Float(theta))) + decomposed_g.append(Rz(g.qubit, theta)) decomposed_g.append(X90(g.qubit)) if abs(phi) > ATOL: - decomposed_g.append(Rz(g.qubit, Float(phi))) + decomposed_g.append(Rz(g.qubit, phi)) return decomposed_g diff --git a/opensquirrel/passes/decomposer/swap2cnot_decomposer.py b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py new file mode 100644 index 00000000..cb427a7c --- /dev/null +++ b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from opensquirrel.default_instructions import CNOT +from opensquirrel.passes.decomposer.general_decomposer import Decomposer + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +class SWAP2CNOTDecomposer(Decomposer): + """Predefined decomposition of SWAP gate to 3 CNOT gates. + ---x--- ----•---[X]---•---- + | → | | | + ---x--- ---[X]---•---[X]--- + Note: + This decomposition preserves the global phase of the SWAP gate. + """ + + def decompose(self, gate: Gate) -> list[Gate]: + if gate.name != "SWAP": + return [gate] + qubit0, qubit1 = gate.get_qubit_operands() + return [ + CNOT(qubit0, qubit1), + CNOT(qubit1, qubit0), + CNOT(qubit0, qubit1), + ] diff --git a/opensquirrel/passes/exporter/__init__.py b/opensquirrel/passes/exporter/__init__.py new file mode 100644 index 00000000..47f01182 --- /dev/null +++ b/opensquirrel/passes/exporter/__init__.py @@ -0,0 +1,3 @@ +from opensquirrel.passes.exporter.export_format import ExportFormat + +__all__ = ["ExportFormat"] diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py new file mode 100644 index 00000000..bb25d7c8 --- /dev/null +++ b/opensquirrel/passes/exporter/cqasmv1_exporter.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +import re +from typing import TYPE_CHECKING, SupportsFloat, SupportsInt + +from opensquirrel.exceptions import UnsupportedGateError +from opensquirrel.ir import Barrier, Float, Gate, Init, Int, IRVisitor, Measure, Qubit, Reset, Wait + +if TYPE_CHECKING: + from opensquirrel.circuit import Circuit + from opensquirrel.register_manager import RegisterManager + + +class CqasmV1ExporterParseError(Exception): + pass + + +class _CQASMv1Creator(IRVisitor): + # Precision used when writing out a float number + FLOAT_PRECISION = 8 + + def __init__(self, register_manager: RegisterManager) -> None: + self.register_manager = register_manager + qubit_register_size = self.register_manager.get_qubit_register_size() + self.output = "version 1.0\n\n{}\n\n".format(f"qubits {qubit_register_size}" if qubit_register_size > 0 else "") + + def visit_qubit(self, qubit: Qubit) -> str: + qubit_register_name = self.register_manager.get_qubit_register_name() + return f"{qubit_register_name}[{qubit.index}]" + + def visit_int(self, i: SupportsInt) -> str: + i = Int(i) + return f"{i.value}" + + def visit_float(self, f: SupportsFloat) -> str: + f = Float(f) + return f"{f.value:.{self.FLOAT_PRECISION}}" + + def visit_measure(self, measure: Measure) -> None: + qubit_argument = measure.arguments[0].accept(self) # type: ignore[index] + self.output += f"{measure.name}_z {qubit_argument}\n" + + def visit_init(self, init: Init) -> None: + qubit_argument = init.arguments[0].accept(self) # type: ignore[index] + self.output += f"prep_z {qubit_argument}\n" + + def visit_reset(self, reset: Reset) -> None: + qubit_argument = reset.arguments[0].accept(self) # type: ignore[index] + self.output += f"prep_z {qubit_argument}\n" + + def visit_barrier(self, barrier: Barrier) -> None: + qubit_argument = barrier.arguments[0].accept(self) # type: ignore[index] + self.output += f"barrier {qubit_argument}\n" + + def visit_wait(self, wait: Wait) -> None: + qubit_argument = wait.arguments[0].accept(self) # type: ignore[index] + parameter = wait.arguments[1].accept(self) # type: ignore[index] + self.output += f"wait {qubit_argument}, {parameter}\n" + + def visit_gate(self, gate: Gate) -> None: + gate_name = gate.name.lower() + if gate.is_anonymous: + raise UnsupportedGateError(gate) + params = [] + if any(not isinstance(arg, Qubit) for arg in gate.arguments): # type: ignore[union-attr] + params = [arg.accept(self) for arg in gate.arguments if not isinstance(arg, Qubit)] # type: ignore[union-attr] + qubit_args = (arg.accept(self) for arg in gate.arguments if isinstance(arg, Qubit)) # type: ignore[union-attr] + self.output += "{} {}{}\n".format(gate_name, ", ".join(qubit_args), ", " + ", ".join(params) if params else "") + + +def post_process(output: str) -> str: + return _merge_barrier_groups(output) + + +def _merge_barrier_groups(output: str) -> str: + ret: str = "" + barrier_group_indices: list[int] = [] + for line in output.split("\n"): + if not line.startswith("barrier"): + if barrier_group_indices: + ret += _dump_barrier_group(barrier_group_indices) + barrier_group_indices = [] + ret += f"{line}\n" + else: + barrier_group_indices.append(_get_barrier_index(line)) + return ret + + +def _dump_barrier_group(indices: list[int]) -> str: + return "barrier q[{}]\n".format(", ".join(map(str, indices)) if len(indices) != 0 else "") + + +def _get_barrier_index(line: str) -> int: + barrier_index_match = re.search("\d+", line) + if not barrier_index_match: + msg = "expecting a barrier index but found none" + raise CqasmV1ExporterParseError(msg) + return int(barrier_index_match.group(0)) + + +def export(circuit: Circuit) -> str: + cqasmv1_creator = _CQASMv1Creator(circuit.register_manager) + + circuit.ir.accept(cqasmv1_creator) + + # Remove all trailing lines and leave only one + return post_process(cqasmv1_creator.output).rstrip() + "\n" diff --git a/opensquirrel/exporter/export_format.py b/opensquirrel/passes/exporter/export_format.py similarity index 81% rename from opensquirrel/exporter/export_format.py rename to opensquirrel/passes/exporter/export_format.py index 6adbb939..4397ffb9 100644 --- a/opensquirrel/exporter/export_format.py +++ b/opensquirrel/passes/exporter/export_format.py @@ -3,3 +3,4 @@ class ExportFormat(Enum): QUANTIFY_SCHEDULER = 0 + CQASM_V1 = 1 diff --git a/opensquirrel/exporter/quantify_scheduler_exporter.py b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py similarity index 67% rename from opensquirrel/exporter/quantify_scheduler_exporter.py rename to opensquirrel/passes/exporter/quantify_scheduler_exporter.py index 16e639f7..2f1146f8 100644 --- a/opensquirrel/exporter/quantify_scheduler_exporter.py +++ b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py @@ -3,10 +3,11 @@ import math from typing import TYPE_CHECKING, Any +from opensquirrel import X, Z +from opensquirrel.circuit import Circuit from opensquirrel.common import ATOL -from opensquirrel.default_gates import X, Z from opensquirrel.exceptions import ExporterError, UnsupportedGateError -from opensquirrel.ir import BlochSphereRotation, ControlledGate, IRVisitor, MatrixGate, Measure, Qubit, Reset +from opensquirrel.ir import BlochSphereRotation, ControlledGate, IRVisitor, MatrixGate, Measure, Reset try: import quantify_scheduler @@ -16,6 +17,8 @@ if TYPE_CHECKING: from opensquirrel.circuit import Circuit + from opensquirrel.ir import Qubit + from opensquirrel.register_manager import RegisterManager # Radian to degree conversion outcome precision FIXED_POINT_DEG_PRECISION = 5 @@ -25,8 +28,13 @@ class _ScheduleCreator(IRVisitor): def _get_qubit_string(self, q: Qubit) -> str: return f"{self.qubit_register_name}[{q.index}]" - def __init__(self, qubit_register_name: str) -> None: - self.qubit_register_name = qubit_register_name + def __init__(self, register_manager: RegisterManager) -> None: + self.register_manager = register_manager + self.qubit_register_size = register_manager.get_qubit_register_size() + self.qubit_register_name = register_manager.get_qubit_register_name() + self.bit_register_size = register_manager.get_bit_register_size() + self.acq_index_record = [0] * self.qubit_register_size + self.bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * self.bit_register_size self.schedule = quantify_scheduler.Schedule("Exported OpenSquirrel circuit") def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> None: @@ -34,18 +42,17 @@ def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> None: # there exists an ambiguity with how Quantify-scheduler will store an angle of 180 degrees. # Depending on the system the angle may be stored as either 180 or -180 degrees. # This ambiguity has no physical consequences, but may cause the exporter test fail. - g_qubit = Qubit(g.qubit) if abs(g.axis[2]) < ATOL: # Rxy rotation. theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) phi: float = round(math.degrees(math.atan2(g.axis[1], g.axis[0])), FIXED_POINT_DEG_PRECISION) - self.schedule.add(quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(g_qubit))) + self.schedule.add(quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(g.qubit))) return if abs(g.axis[0]) < ATOL and abs(g.axis[1]) < ATOL: # Rz rotation. theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) - self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(g_qubit))) + self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(g.qubit))) return raise UnsupportedGateError(g) @@ -57,14 +64,11 @@ def visit_controlled_gate(self, g: ControlledGate) -> None: if not isinstance(g.target_gate, BlochSphereRotation): raise UnsupportedGateError(g) - g_control_qubit = Qubit(g.control_qubit) - g_target_gate_qubit = Qubit(g.target_gate.qubit) - if g.target_gate == X(g.target_gate.qubit): self.schedule.add( quantify_scheduler_gates.CNOT( - qC=self._get_qubit_string(g_control_qubit), - qT=self._get_qubit_string(g_target_gate_qubit), + qC=self._get_qubit_string(g.control_qubit), + qT=self._get_qubit_string(g.target_gate.qubit), ), ) return @@ -72,8 +76,8 @@ def visit_controlled_gate(self, g: ControlledGate) -> None: if g.target_gate == Z(g.target_gate.qubit): self.schedule.add( quantify_scheduler_gates.CZ( - qC=self._get_qubit_string(g_control_qubit), - qT=self._get_qubit_string(g_target_gate_qubit), + qC=self._get_qubit_string(g.control_qubit), + qT=self._get_qubit_string(g.target_gate.qubit), ), ) return @@ -81,20 +85,26 @@ def visit_controlled_gate(self, g: ControlledGate) -> None: raise UnsupportedGateError(g) def visit_measure(self, g: Measure) -> None: + qubit_index = g.qubit.index + bit_index = g.bit.index + acq_index = self.acq_index_record[qubit_index] + self.bit_string_mapping[bit_index] = (acq_index, qubit_index) self.schedule.add( quantify_scheduler_gates.Measure( self._get_qubit_string(g.qubit), - acq_channel=g.qubit.index, - acq_index=g.qubit.index, + acq_channel=qubit_index, + acq_index=acq_index, acq_protocol="ThresholdedAcquisition", - ), + ) ) + self.acq_index_record[qubit_index] += 1 + return def visit_reset(self, g: Reset) -> Any: - self.schedule.add(quantify_scheduler_gates.Reset(qubit=self._get_qubit_string(g.qubit))) + self.schedule.add(quantify_scheduler_gates.Reset(self._get_qubit_string(g.qubit))) -def export(circuit: Circuit) -> quantify_scheduler.Schedule: +def export(circuit: Circuit) -> tuple[quantify_scheduler.Schedule, list[tuple[Any, Any]]]: if "quantify_scheduler" not in globals(): class QuantifySchedulerNotInstalled: @@ -107,7 +117,7 @@ def __getattr__(self, attr_name: Any) -> None: global quantify_scheduler_gates quantify_scheduler_gates = QuantifySchedulerNotInstalled() - schedule_creator = _ScheduleCreator(circuit.qubit_register_name) + schedule_creator = _ScheduleCreator(circuit.register_manager) try: circuit.ir.accept(schedule_creator) except UnsupportedGateError as e: @@ -116,4 +126,4 @@ def __getattr__(self, attr_name: Any) -> None: "Decompose all gates to the Quantify-scheduler gate set first (rxy, rz, cnot, cz)" ) raise ExporterError(msg) from e - return schedule_creator.schedule + return schedule_creator.schedule, schedule_creator.bit_string_mapping diff --git a/opensquirrel/passes/mapper/__init__.py b/opensquirrel/passes/mapper/__init__.py new file mode 100644 index 00000000..9088ae32 --- /dev/null +++ b/opensquirrel/passes/mapper/__init__.py @@ -0,0 +1,4 @@ +from opensquirrel.passes.mapper.general_mapper import Mapper +from opensquirrel.passes.mapper.simple_mappers import HardcodedMapper, IdentityMapper + +__all__ = ["HardcodedMapper", "IdentityMapper", "Mapper"] diff --git a/opensquirrel/mapper/general_mapper.py b/opensquirrel/passes/mapper/general_mapper.py similarity index 92% rename from opensquirrel/mapper/general_mapper.py rename to opensquirrel/passes/mapper/general_mapper.py index 7fbf2fb7..2078c98a 100644 --- a/opensquirrel/mapper/general_mapper.py +++ b/opensquirrel/passes/mapper/general_mapper.py @@ -2,7 +2,7 @@ from __future__ import annotations -from opensquirrel.mapper.mapping import Mapping +from opensquirrel.passes.mapper.mapping import Mapping class Mapper: diff --git a/opensquirrel/mapper/mapping.py b/opensquirrel/passes/mapper/mapping.py similarity index 100% rename from opensquirrel/mapper/mapping.py rename to opensquirrel/passes/mapper/mapping.py diff --git a/opensquirrel/mapper/qubit_remapper.py b/opensquirrel/passes/mapper/qubit_remapper.py similarity index 85% rename from opensquirrel/mapper/qubit_remapper.py rename to opensquirrel/passes/mapper/qubit_remapper.py index 9303b3ac..86646d01 100644 --- a/opensquirrel/mapper/qubit_remapper.py +++ b/opensquirrel/passes/mapper/qubit_remapper.py @@ -1,16 +1,18 @@ from opensquirrel.circuit import Circuit from opensquirrel.ir import ( IR, + Barrier, BlochSphereRotation, - Comment, ControlledGate, + Init, IRVisitor, MatrixGate, Measure, Qubit, Reset, + Wait, ) -from opensquirrel.mapper.mapping import Mapping +from opensquirrel.passes.mapper.mapping import Mapping class _QubitRemapper(IRVisitor): @@ -32,20 +34,29 @@ class _QubitRemapper(IRVisitor): def __init__(self, mapping: Mapping) -> None: self.mapping = mapping - def visit_comment(self, comment: Comment) -> Comment: - return comment - def visit_qubit(self, qubit: Qubit) -> Qubit: qubit.index = self.mapping[qubit.index] return qubit + def visit_measure(self, measure: Measure) -> Measure: + measure.qubit.accept(self) + return measure + + def visit_init(self, init: Init) -> Init: + init.qubit.accept(self) + return init + def visit_reset(self, reset: Reset) -> Reset: reset.qubit.accept(self) return reset - def visit_measure(self, measure: Measure) -> Measure: - measure.qubit.accept(self) - return measure + def visit_barrier(self, barrier: Barrier) -> Barrier: + barrier.qubit.accept(self) + return barrier + + def visit_wait(self, wait: Wait) -> Wait: + wait.qubit.accept(self) + return wait def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: g.qubit.accept(self) diff --git a/opensquirrel/mapper/simple_mappers.py b/opensquirrel/passes/mapper/simple_mappers.py similarity index 83% rename from opensquirrel/mapper/simple_mappers.py rename to opensquirrel/passes/mapper/simple_mappers.py index 673f7767..f57005d6 100644 --- a/opensquirrel/mapper/simple_mappers.py +++ b/opensquirrel/passes/mapper/simple_mappers.py @@ -4,8 +4,8 @@ * HardcodedMapper """ -from opensquirrel.mapper.general_mapper import Mapper -from opensquirrel.mapper.mapping import Mapping +from opensquirrel.passes.mapper.general_mapper import Mapper +from opensquirrel.passes.mapper.mapping import Mapping class IdentityMapper(Mapper): diff --git a/opensquirrel/mapper/utils.py b/opensquirrel/passes/mapper/utils.py similarity index 100% rename from opensquirrel/mapper/utils.py rename to opensquirrel/passes/mapper/utils.py diff --git a/opensquirrel/passes/merger/__init__.py b/opensquirrel/passes/merger/__init__.py new file mode 100644 index 00000000..23ff519f --- /dev/null +++ b/opensquirrel/passes/merger/__init__.py @@ -0,0 +1,7 @@ +from opensquirrel.passes.merger.general_merger import Merger +from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger + +__all__ = [ + "Merger", + "SingleQubitGatesMerger", +] diff --git a/opensquirrel/passes/merger/general_merger.py b/opensquirrel/passes/merger/general_merger.py new file mode 100644 index 00000000..b6cbdcf4 --- /dev/null +++ b/opensquirrel/passes/merger/general_merger.py @@ -0,0 +1,168 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from math import cos, floor, isclose, log10, sin +from typing import cast + +import numpy as np + +from opensquirrel import I +from opensquirrel.common import ATOL +from opensquirrel.default_instructions import default_bloch_sphere_rotation_set +from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Float, Instruction, Statement +from opensquirrel.utils import acos, flatten_list + + +def compose_bloch_sphere_rotations(bsr_a: BlochSphereRotation, bsr_b: BlochSphereRotation) -> BlochSphereRotation: + """Computes the Bloch sphere rotation resulting from the composition of two Bloch sphere rotations. + The first rotation is applied and then the second. + If the final Bloch sphere rotation is anonymous, we will try to match it to a default gate. + + Uses Rodrigues' rotation formula (see https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula). + """ + if bsr_a.qubit != bsr_b.qubit: + msg = "cannot merge two Bloch sphere rotations on different qubits" + raise ValueError(msg) + + acos_argument = cos(bsr_a.angle / 2) * cos(bsr_b.angle / 2) - sin(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * np.dot( + bsr_a.axis, bsr_b.axis + ) + combined_angle = 2 * acos(acos_argument) + + if abs(sin(combined_angle / 2)) < ATOL: + return I(bsr_a.qubit) + + order_of_magnitude = abs(floor(log10(ATOL))) + combined_axis = np.round( + ( + 1 + / sin(combined_angle / 2) + * ( + sin(bsr_a.angle / 2) * cos(bsr_b.angle / 2) * bsr_a.axis.value + + cos(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * bsr_b.axis.value + + sin(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * np.cross(bsr_a.axis, bsr_b.axis) + ) + ), + order_of_magnitude, + ) + + combined_phase = np.round(bsr_a.phase + bsr_b.phase, order_of_magnitude) + + if bsr_a.is_identity(): + generator = bsr_b.generator + arguments = bsr_b.arguments + elif bsr_b.is_identity(): + generator = bsr_a.generator + arguments = bsr_a.arguments + elif bsr_a.generator == bsr_b.generator: + generator = bsr_a.generator + arguments = (bsr_a.qubit,) + if bsr_a.arguments is not None and len(bsr_a.arguments) == 2 and isinstance(bsr_a.arguments[1], Float): + arguments += (Float(combined_angle),) + else: + generator = None + arguments = None + + return try_name_anonymous_bloch( + BlochSphereRotation( + qubit=bsr_a.qubit, + axis=combined_axis, + angle=combined_angle, + phase=combined_phase, + generator=generator, # type: ignore[arg-type] + arguments=arguments, + ) + ) + + +def try_name_anonymous_bloch(bsr: BlochSphereRotation) -> BlochSphereRotation: + """Try converting a given BlochSphereRotation to a default BlochSphereRotation. + It does that by checking if the input BlochSphereRotation is close to a default BlochSphereRotation. + + Returns: + A default BlockSphereRotation if this BlochSphereRotation is close to it, + or the input BlochSphereRotation otherwise. + """ + if not bsr.is_anonymous: + return bsr + for default_bsr_callable in default_bloch_sphere_rotation_set.values(): + try: + default_bsr = default_bsr_callable(*bsr.get_qubit_operands()) + if ( + np.allclose(default_bsr.axis, bsr.axis, atol=ATOL) + and isclose(default_bsr.angle, bsr.angle, rel_tol=ATOL) + and isclose(default_bsr.phase, bsr.phase, rel_tol=ATOL) + ): + return default_bsr + except TypeError: # noqa: PERF203 + pass + return bsr + + +def can_move_statement_before_barrier(instruction: Instruction, barriers: list[Instruction]) -> bool: + """Checks whether an instruction can be moved before a group of 'linked' barriers. + Returns True if none of the qubits used by the instruction are part of any barrier, False otherwise. + """ + instruction_qubit_operands = instruction.get_qubit_operands() + barriers_group_qubit_operands = set(flatten_list([barrier.get_qubit_operands() for barrier in barriers])) + return not any(qubit in barriers_group_qubit_operands for qubit in instruction_qubit_operands) + + +def can_move_before(statement: Statement, statement_group: list[Statement]) -> bool: + """Checks whether a statement can be moved before a group of statements, following the logic below: + - A barrier cannot be moved up. + - A (non-barrier) statement cannot be moved before another (non-barrier) statement. + - A (non-barrier) statement may be moved before a group of 'linked' barriers. + """ + if isinstance(statement, Barrier): + return False + first_statement_from_group = statement_group[0] + if not isinstance(first_statement_from_group, Barrier): + return False + instruction = cast(Instruction, statement) + return can_move_statement_before_barrier(instruction, cast(list[Instruction], statement_group)) + + +def group_linked_barriers(statements: list[Statement]) -> list[list[Statement]]: + """Receives a list of statements. + Returns a list of lists of statements, where each list of statements is + either a single instruction, or a list of 'linked' barriers (consecutive barriers that cannot be split). + """ + ret: list[list[Statement]] = [] + index = -1 + adding_linked_barriers_to_group = False + for statement in statements: + if not (adding_linked_barriers_to_group and isinstance(statement, Barrier)): + index += 1 + ret.append([statement]) + else: + ret[-1].append(statement) + adding_linked_barriers_to_group = isinstance(statement, Barrier) + return ret + + +def rearrange_barriers(ir: IR) -> None: + """Receives an IR. + Builds an enumerated list of lists of statements, where each list of statements is + either a single instruction, or a list of 'linked' barriers (consecutive barriers that cannot be split). + Then sorts that enumerated list of lists so that instructions can be moved before groups of barriers. + And updates the input IR with the flattened list of sorted statements. + """ + statements_groups = group_linked_barriers(ir.statements) + for i, statement_group in enumerate(statements_groups): + statement = statement_group[0] + if not isinstance(statement, Barrier): + assert len(statement_group) == 1 + previous_statement_groups = reversed(list(enumerate(statements_groups[:i]))) + for j, previous_statement_group in previous_statement_groups: + if not can_move_before(statement, previous_statement_group): + statements_groups.insert(j + 1, [statement]) + del statements_groups[i + 1] + break + ir.statements = flatten_list(statements_groups) + + +class Merger(ABC): + @abstractmethod + def merge(self, ir: IR, qubit_register_size: int) -> None: + raise NotImplementedError diff --git a/opensquirrel/passes/merger/single_qubit_gates_merger.py b/opensquirrel/passes/merger/single_qubit_gates_merger.py new file mode 100644 index 00000000..b2c041cf --- /dev/null +++ b/opensquirrel/passes/merger/single_qubit_gates_merger.py @@ -0,0 +1,52 @@ +from typing import cast + +from opensquirrel import I +from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Instruction, Qubit +from opensquirrel.passes.merger.general_merger import Merger, compose_bloch_sphere_rotations + + +class SingleQubitGatesMerger(Merger): + def merge(self, ir: IR, qubit_register_size: int) -> None: + """Merge all consecutive 1-qubit gates in the circuit. + Gates obtained from merging other gates become anonymous gates. + + Args: + circuit: Circuit to perform the merge on. + """ + accumulators_per_qubit: dict[Qubit, BlochSphereRotation] = { + Qubit(qubit_index): I(qubit_index) for qubit_index in range(qubit_register_size) + } + + statement_index = 0 + while statement_index < len(ir.statements): + statement = ir.statements[statement_index] + + # Accumulate consecutive Bloch sphere rotations + instruction: Instruction = cast(Instruction, statement) + if isinstance(instruction, BlochSphereRotation): + already_accumulated = accumulators_per_qubit[instruction.qubit] + composed = compose_bloch_sphere_rotations(instruction, already_accumulated) + accumulators_per_qubit[instruction.qubit] = composed + del ir.statements[statement_index] + continue + + def insert_accumulated_bloch_sphere_rotations(qubits: list[Qubit]) -> None: + nonlocal statement_index + for qubit in qubits: + if not accumulators_per_qubit[qubit].is_identity(): + ir.statements.insert(statement_index, accumulators_per_qubit[qubit]) + accumulators_per_qubit[qubit] = I(qubit) + statement_index += 1 + + # For barrier directives, insert all accumulated Bloch sphere rotations + # For other instructions, insert accumulated Bloch sphere rotations on qubits used by those instructions + # In any case, reset the dictionary entry for the inserted accumulated Bloch sphere rotations + if isinstance(instruction, Barrier): + insert_accumulated_bloch_sphere_rotations([Qubit(i) for i in range(qubit_register_size)]) + else: + insert_accumulated_bloch_sphere_rotations(instruction.get_qubit_operands()) + statement_index += 1 + + for accumulated_bloch_sphere_rotation in accumulators_per_qubit.values(): + if not accumulated_bloch_sphere_rotation.is_identity(): + ir.statements.append(accumulated_bloch_sphere_rotation) diff --git a/opensquirrel/passes/router/__init__.py b/opensquirrel/passes/router/__init__.py new file mode 100644 index 00000000..4870bc21 --- /dev/null +++ b/opensquirrel/passes/router/__init__.py @@ -0,0 +1,7 @@ +from opensquirrel.passes.router.general_router import Router +from opensquirrel.passes.router.routing_checker import RoutingChecker + +__all__ = [ + "Router", + "RoutingChecker", +] diff --git a/opensquirrel/passes/router/general_router.py b/opensquirrel/passes/router/general_router.py new file mode 100644 index 00000000..b6d8958f --- /dev/null +++ b/opensquirrel/passes/router/general_router.py @@ -0,0 +1,9 @@ +from abc import ABC, abstractmethod + +from opensquirrel.ir import IR + + +class Router(ABC): + @abstractmethod + def route(self, ir: IR) -> None: + raise NotImplementedError diff --git a/opensquirrel/passes/router/routing_checker.py b/opensquirrel/passes/router/routing_checker.py new file mode 100644 index 00000000..ef620f74 --- /dev/null +++ b/opensquirrel/passes/router/routing_checker.py @@ -0,0 +1,28 @@ +from typing import cast + +from opensquirrel.ir import IR, Instruction, Qubit +from opensquirrel.passes.router.general_router import Router + + +class RoutingChecker(Router): + def __init__(self, connectivity: dict[str, list[int]]) -> None: + self.connectivity = connectivity + + def route(self, ir: IR) -> None: + non_executable_interactions = [] + for statement in ir.statements: + instruction: Instruction = cast(Instruction, statement) + args = instruction.arguments + if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): + qubit_args = [arg for arg in args if isinstance(arg, Qubit)] + qubit_index_pairs = [(q0.index, q1.index) for q0, q1 in zip(qubit_args[:-1], qubit_args[1:])] + for i, j in qubit_index_pairs: + if j not in self.connectivity.get(str(i), []): + non_executable_interactions.append((i, j)) + + if non_executable_interactions: + error_message = ( + f"The following qubit interactions in the circuit prevent a 1-to-1 mapping:" + f"{set(non_executable_interactions)}" + ) + raise ValueError(error_message) diff --git a/opensquirrel/register_manager.py b/opensquirrel/register_manager.py index 6e904123..90f35a0a 100644 --- a/opensquirrel/register_manager.py +++ b/opensquirrel/register_manager.py @@ -81,7 +81,7 @@ def size(self) -> int: @classmethod def from_ast(cls, ast: cqasm.semantic.Program) -> Self: variables = [v for v in ast.variables if cls.is_of_type(v)] - register_size = sum([v.typ.size for v in variables]) + register_size = sum(v.typ.size for v in variables) variable_name_to_range: dict[str, Range] = {} index_to_variable_name: dict[int, str] = {} diff --git a/opensquirrel/reindexer/__init__.py b/opensquirrel/reindexer/__init__.py index bd1322af..1911e800 100644 --- a/opensquirrel/reindexer/__init__.py +++ b/opensquirrel/reindexer/__init__.py @@ -1,3 +1,3 @@ -from opensquirrel.reindexer.qubit_reindexer import _QubitReindexer, get_reindexed_circuit +from opensquirrel.reindexer.qubit_reindexer import get_reindexed_circuit -__all__ = ["_QubitReindexer", "get_reindexed_circuit"] +__all__ = ["get_reindexed_circuit"] diff --git a/opensquirrel/reindexer/qubit_reindexer.py b/opensquirrel/reindexer/qubit_reindexer.py index 31541b17..7ca14c7e 100644 --- a/opensquirrel/reindexer/qubit_reindexer.py +++ b/opensquirrel/reindexer/qubit_reindexer.py @@ -3,7 +3,19 @@ from collections.abc import Iterable from typing import TYPE_CHECKING -from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, Gate, IRVisitor, MatrixGate, Measure, Reset +from opensquirrel.ir import ( + IR, + Barrier, + BlochSphereRotation, + ControlledGate, + Gate, + Init, + IRVisitor, + MatrixGate, + Measure, + Reset, + Wait, +) from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager if TYPE_CHECKING: @@ -27,12 +39,21 @@ class _QubitReindexer(IRVisitor): def __init__(self, qubit_indices: list[int]) -> None: self.qubit_indices = qubit_indices + def visit_init(self, init: Init) -> Init: + return Init(qubit=self.qubit_indices.index(init.qubit.index)) + + def visit_measure(self, measure: Measure) -> Measure: + return Measure(qubit=self.qubit_indices.index(measure.qubit.index), bit=measure.bit, axis=measure.axis) + def visit_reset(self, reset: Reset) -> Reset: qubit_to_reset = self.qubit_indices.index(reset.qubit.index) return Reset(qubit=qubit_to_reset) - def visit_measure(self, measure: Measure) -> Measure: - return Measure(qubit=self.qubit_indices.index(measure.qubit.index), bit=measure.bit, axis=measure.axis) + def visit_barrier(self, barrier: Barrier) -> Barrier: + return Barrier(qubit=self.qubit_indices.index(barrier.qubit.index)) + + def visit_wait(self, wait: Wait) -> Wait: + return Wait(qubit=self.qubit_indices.index(wait.qubit.index), time=wait.time) def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: return BlochSphereRotation( diff --git a/opensquirrel/utils/__init__.py b/opensquirrel/utils/__init__.py index b159fe59..793af477 100644 --- a/opensquirrel/utils/__init__.py +++ b/opensquirrel/utils/__init__.py @@ -1,3 +1,18 @@ -from opensquirrel.utils.matrix_expander import get_matrix +from opensquirrel.utils.check_mapper import check_mapper +from opensquirrel.utils.identity_filter import filter_out_identities +from opensquirrel.utils.list import flatten_list +from opensquirrel.utils.math import acos, are_axes_consecutive +from opensquirrel.utils.matrix_expander import can1, expand_ket, get_matrix, get_reduced_ket -__all__ = ["get_matrix"] +__all__ = [ + "acos", + "are_axes_consecutive", + "can1", + "check_mapper", + "expand_ket", + "filter_out_identities", + "flatten_list", + "get_matrix", + "get_matrix", + "get_reduced_ket", +] diff --git a/opensquirrel/utils/check_passes/check_mapper.py b/opensquirrel/utils/check_mapper.py similarity index 72% rename from opensquirrel/utils/check_passes/check_mapper.py rename to opensquirrel/utils/check_mapper.py index 81f96262..cc2d3d05 100644 --- a/opensquirrel/utils/check_passes/check_mapper.py +++ b/opensquirrel/utils/check_mapper.py @@ -4,16 +4,29 @@ from copy import deepcopy +from opensquirrel import I from opensquirrel.circuit import Circuit -from opensquirrel.ir import IR, Bit, BlochSphereRotation, Comment, ControlledGate, Measure -from opensquirrel.mapper.general_mapper import Mapper +from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, Measure +from opensquirrel.passes.mapper.general_mapper import Mapper from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager +def _check_scenario(circuit: Circuit, mapper: Mapper) -> None: + """Check if the given scenario can be mapped. + + Args: + circuit: Circuit containing the scenario to check against. + mapper: Mapper to use. + """ + ir_copy = deepcopy(circuit.ir) + circuit.map(mapper) + assert circuit.ir == ir_copy, "A Mapper pass should not change the IR" + + def check_mapper(mapper: Mapper) -> None: """Check if the `mapper` complies with the OpenSquirrel requirements. - If an implementation of ``Mapper`` passes these checks it should be compatible with the ``Circuit.map`` method. + If a ``Mapper`` implementation passes these checks, it should be compatible with the ``Circuit.map`` method. Args: mapper: Mapper to check. @@ -26,21 +39,8 @@ def check_mapper(mapper: Mapper) -> None: _check_scenario(circuit, mapper) ir = IR() - ir.add_comment(Comment("comment")) ir.add_gate(BlochSphereRotation(42, (1, 0, 0), 1, 2)) - ir.add_gate(ControlledGate(42, BlochSphereRotation.identity(100))) - ir.add_measure(Measure(42, Bit(42), (0, 0, 1))) + ir.add_gate(ControlledGate(42, I(100))) + ir.add_non_unitary(Measure(42, 42, (0, 0, 1))) Circuit(register_manager, ir) _check_scenario(circuit, mapper) - - -def _check_scenario(circuit: Circuit, mapper: Mapper) -> None: - """Check if the given scenario can be mapped. - - Args: - circuit: Circuit containing the scenario to check against. - mapper: Mapper to use. - """ - ir_copy = deepcopy(circuit.ir) - circuit.map(mapper) - assert circuit.ir == ir_copy, "A Mapper pass should not change the IR" diff --git a/opensquirrel/utils/check_passes/__init__.py b/opensquirrel/utils/check_passes/__init__.py deleted file mode 100644 index 625f7c22..00000000 --- a/opensquirrel/utils/check_passes/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""Ths subpackage contains compatibility checks for the different compilation passes.""" - -from opensquirrel.utils.check_passes.check_mapper import check_mapper - -__all__ = ["check_mapper"] diff --git a/opensquirrel/utils/list.py b/opensquirrel/utils/list.py new file mode 100644 index 00000000..fa2b7460 --- /dev/null +++ b/opensquirrel/utils/list.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +import functools +import operator +from typing import Any + + +def flatten_list(list_to_flatten: list[list[Any]]) -> list[Any]: + return functools.reduce(operator.iadd, list_to_flatten, []) diff --git a/opensquirrel/utils/math.py b/opensquirrel/utils/math.py new file mode 100644 index 00000000..3727f32c --- /dev/null +++ b/opensquirrel/utils/math.py @@ -0,0 +1,12 @@ +import math + + +def acos(value: float) -> float: + """Fix float approximations like 1.0000000000002, which acos does not like.""" + value = max(min(value, 1.0), -1.0) + return math.acos(value) + + +def are_axes_consecutive(axis_a_index: int, axis_b_index: int) -> bool: + """Check if axis 'a' immediately precedes axis 'b' (in a circular fashion [x, y, z, x...]).""" + return axis_a_index - axis_b_index in (-1, 2) diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py index 40695f50..649c046b 100644 --- a/opensquirrel/utils/matrix_expander.py +++ b/opensquirrel/utils/matrix_expander.py @@ -3,7 +3,6 @@ import cmath import math from collections.abc import Iterable -from typing import cast import numpy as np from numpy.typing import NDArray @@ -17,10 +16,11 @@ IRVisitor, MatrixGate, Qubit, + QubitLike, ) -def get_reduced_ket(ket: int, qubits: Iterable[Qubit]) -> int: +def get_reduced_ket(ket: int, qubits: Iterable[QubitLike]) -> int: """ Given a quantum ket represented by its corresponding base-10 integer, this computes the reduced ket where only the given qubits appear, in order. @@ -56,7 +56,7 @@ def get_reduced_ket(ket: int, qubits: Iterable[Qubit]) -> int: return reduced_ket -def expand_ket(base_ket: int, reduced_ket: int, qubits: Iterable[Qubit]) -> int: +def expand_ket(base_ket: int, reduced_ket: int, qubits: Iterable[QubitLike]) -> int: """ Given a base quantum ket on n qubits and a reduced ket on a subset of those qubits, this computes the expanded ket where the reduction qubits and the other qubits are set based on the reduced ket and the base ket, respectively. @@ -95,8 +95,8 @@ def expand_ket(base_ket: int, reduced_ket: int, qubits: Iterable[Qubit]) -> int: expanded_ket = base_ket for i, qubit in enumerate(qubits): qubit = Qubit(qubit) - expanded_ket &= ~(1 << qubit.index) # Erase bit. - expanded_ket |= ((reduced_ket & (1 << i)) >> i) << qubit.index # Set bit to value from reduced_ket. + expanded_ket &= ~(1 << qubit.index) # erase bit + expanded_ket |= ((reduced_ket & (1 << i)) >> i) << qubit.index # set bit to value from reduced_ket return expanded_ket @@ -120,7 +120,7 @@ def visit_bloch_sphere_rotation(self, rot: BlochSphereRotation) -> NDArray[np.co if result.shape != (1 << self.qubit_register_size, 1 << self.qubit_register_size): msg = "result has incorrect shape" ValueError(msg) - return result + return np.asarray(result, dtype=np.complex128) def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: if gate.control_qubit.index >= self.qubit_register_size: @@ -202,13 +202,13 @@ def get_matrix(gate: Gate, qubit_register_size: int) -> NDArray[np.complex128]: Examples: >>> X = lambda q: BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) - >>> get_matrix(X(Qubit(1)), 2).astype(int) # X q[1] + >>> get_matrix(X(1), 2).astype(int) # X q[1] array([[0, 0, 1, 0], [0, 0, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0]]) - >>> CNOT02 = ControlledGate(Qubit(0), X(Qubit(2))) + >>> CNOT02 = ControlledGate(0, X(2)) >>> get_matrix(CNOT02, 3).astype(int) # CNOT q[0], q[2] array([[1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0], @@ -218,7 +218,7 @@ def get_matrix(gate: Gate, qubit_register_size: int) -> NDArray[np.complex128]: [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0]]) - >>> get_matrix(ControlledGate(Qubit(1), X(Qubit(2))), 3).astype(int) # CNOT q[1], q[2] + >>> get_matrix(ControlledGate(1, X(2)), 3).astype(int) # CNOT q[1], q[2] array([[1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0], @@ -229,4 +229,4 @@ def get_matrix(gate: Gate, qubit_register_size: int) -> NDArray[np.complex128]: [0, 0, 0, 1, 0, 0, 0, 0]]) """ expander = MatrixExpander(qubit_register_size) - return cast(NDArray[np.complex128], gate.accept(expander)) + return np.asarray(gate.accept(expander), dtype=np.complex128) diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py index 006b831b..98cd38a8 100644 --- a/opensquirrel/writer/writer.py +++ b/opensquirrel/writer/writer.py @@ -1,8 +1,17 @@ import inspect -from typing import SupportsInt +from typing import SupportsFloat, SupportsInt from opensquirrel.circuit import Circuit -from opensquirrel.ir import Bit, Comment, Float, Gate, Int, IRVisitor, Measure, Qubit, QubitLike, Reset +from opensquirrel.ir import ( + Bit, + Float, + Gate, + Int, + IRVisitor, + NonUnitary, + Qubit, + QubitLike, +) from opensquirrel.register_manager import RegisterManager @@ -14,11 +23,14 @@ def __init__(self, register_manager: RegisterManager) -> None: self.register_manager = register_manager qubit_register_size = self.register_manager.get_qubit_register_size() qubit_register_name = self.register_manager.get_qubit_register_name() + bit_register_size = self.register_manager.get_bit_register_size() bit_register_name = self.register_manager.get_bit_register_name() - self.output = "version 3.0\n\n{}\n{}\n".format( - f"qubit[{qubit_register_size}] {qubit_register_name}", - f"bit[{bit_register_size}] {bit_register_name}\n" if bit_register_size > 0 else "", + self.output = "version 3.0{}{}{}{}\n\n".format( + "\n\n" if qubit_register_size > 0 or bit_register_size > 0 else "", + (f"qubit[{qubit_register_size}] {qubit_register_name}" if qubit_register_size > 0 else ""), + "\n" if qubit_register_size > 0 and bit_register_size > 0 else "", + (f"bit[{bit_register_size}] {bit_register_name}" if bit_register_size > 0 else ""), ) def visit_bit(self, bit: Bit) -> str: @@ -33,30 +45,28 @@ def visit_int(self, i: SupportsInt) -> str: i = Int(i) return f"{i.value}" - def visit_float(self, f: Float) -> str: + def visit_float(self, f: SupportsFloat) -> str: + f = Float(f) return f"{f.value:.{self.FLOAT_PRECISION}}" - def visit_measure(self, measure: Measure) -> None: - if measure.is_abstract: - self.output += f"{measure.name}\n" - return - bit_argument = measure.arguments[1].accept(self) # type: ignore[index] - qubit_argument = measure.arguments[0].accept(self) # type: ignore[index] - self.output += f"{bit_argument} = {measure.name} {qubit_argument}\n" - - def visit_reset(self, reset: Reset) -> None: - if reset.is_abstract: - self.output += f"{reset.name}\n" - return - qubit_argument = reset.arguments[0].accept(self) # type: ignore[index] - self.output += f"{reset.name} {qubit_argument}\n" + def visit_non_unitary(self, non_unitary: NonUnitary) -> None: + output_instruction = non_unitary.name + qubit_argument = non_unitary.arguments[0].accept(self) # type: ignore[index] + if non_unitary.name == "measure": + bit_argument = non_unitary.arguments[1].accept(self) # type: ignore[index] + output_instruction = f"{bit_argument} = {non_unitary.name}" + else: + params = [param.accept(self) for param in non_unitary.arguments[1::]] # type: ignore[index] + if params: + output_instruction = f"{non_unitary.name}({', '.join(params)})" + self.output += f"{output_instruction} {qubit_argument}\n" def visit_gate(self, gate: Gate) -> None: gate_name = gate.name gate_generator = [] if gate.generator is not None: gate_generator = list(inspect.signature(gate.generator).parameters.keys()) - qubit_function_keys = ["target", "control", "q"] + qubit_function_keys = ["target", "control", "qubit"] if gate.is_anonymous: if "MatrixGate" in gate_name: # In the case of a MatrixGate the newlines should be removed from the array @@ -73,18 +83,15 @@ def visit_gate(self, gate: Gate) -> None: if gate_generator[pos] not in qubit_function_keys: params.append(arg.accept(self)) gate_name += f"({', '.join(params)})" - elif gate_generator[pos] in qubit_function_keys and isinstance(arg, QubitLike.__args__): # type: ignore + elif gate_generator[pos] in qubit_function_keys and isinstance(arg, QubitLike.__args__): # type: ignore[attr-defined] qubit_args.append(Qubit(arg).accept(self)) self.output += f"{gate_name} {', '.join(qubit_args)}\n" - def visit_comment(self, comment: Comment) -> None: - self.output += f"\n/* {comment.str} */\n\n" - def circuit_to_string(circuit: Circuit) -> str: writer_impl = _WriterImpl(circuit.register_manager) - circuit.ir.accept(writer_impl) - return writer_impl.output.rstrip() + "\n" # remove all trailing lines and leave only one + # Remove all trailing lines and leave only one + return writer_impl.output.rstrip() + "\n" diff --git a/poetry.lock b/poetry.lock index 3f3abd7c..b9f8ec69 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "adaptive" -version = "1.3.0" +version = "1.3.1" description = "Parallel active learning of mathematical functions" optional = false python-versions = ">=3.9" files = [ - {file = "adaptive-1.3.0-py3-none-any.whl", hash = "sha256:e18684f5dcf111bf1af0d2df66976918971b9b881a6bb72b7ff0924c0662f2dd"}, - {file = "adaptive-1.3.0.tar.gz", hash = "sha256:7790862b663bf8587f1bbb1ee7a851085765da2967a7d29babe197da401829fd"}, + {file = "adaptive-1.3.1-py3-none-any.whl", hash = "sha256:719362bc7215d631abd9ee307a362dabbfd31a35befdd51d006203b1a85b486f"}, + {file = "adaptive-1.3.1.tar.gz", hash = "sha256:0bfcc906b7381c837148b8e129d98f346a33e7cf805478e10174f62c4011253a"}, ] [package.dependencies] @@ -38,25 +38,25 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.8.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, + {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "appnope" @@ -145,15 +145,25 @@ types-python-dateutil = ">=2.8.10" doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] +[[package]] +name = "asciitree" +version = "0.3.3" +description = "Draws ASCII trees." +optional = false +python-versions = "*" +files = [ + {file = "asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e"}, +] + [[package]] name = "asteval" -version = "1.0.2" +version = "1.0.5" description = "Safe, minimalistic evaluator of python expression using ast module" optional = false python-versions = ">=3.8" files = [ - {file = "asteval-1.0.2-py3-none-any.whl", hash = "sha256:2ece3179809185598d054289e089b8e7706c1a5afa5f7e7c236b3cdae0cf8290"}, - {file = "asteval-1.0.2.tar.gz", hash = "sha256:00e27d9dc565858056d04ebf741f9db4dc4ba319ac3517d094b1608e7f73fa6a"}, + {file = "asteval-1.0.5-py3-none-any.whl", hash = "sha256:082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa"}, + {file = "asteval-1.0.5.tar.gz", hash = "sha256:bac3c8dd6d2b789e959cfec9bb296fb8338eec066feae618c462132701fbc665"}, ] [package.extras] @@ -162,6 +172,21 @@ dev = ["build", "twine"] doc = ["Sphinx"] test = ["coverage", "pytest", "pytest-cov"] +[[package]] +name = "asttokens" +version = "3.0.0" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, +] + +[package.extras] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "async-lru" version = "2.0.4" @@ -178,60 +203,23 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, - {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] -[[package]] -name = "azure-core" -version = "1.30.2" -description = "Microsoft Azure Core Library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "azure-core-1.30.2.tar.gz", hash = "sha256:a14dc210efcd608821aa472d9fb8e8d035d29b68993819147bc290a8ac224472"}, - {file = "azure_core-1.30.2-py3-none-any.whl", hash = "sha256:cf019c1ca832e96274ae85abd3d9f752397194d9fea3b41487290562ac8abe4a"}, -] - -[package.dependencies] -requests = ">=2.21.0" -six = ">=1.11.0" -typing-extensions = ">=4.6.0" - -[package.extras] -aio = ["aiohttp (>=3.0)"] - -[[package]] -name = "azure-identity" -version = "1.17.1" -description = "Microsoft Azure Identity Library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "azure-identity-1.17.1.tar.gz", hash = "sha256:32ecc67cc73f4bd0595e4f64b1ca65cd05186f4fe6f98ed2ae9f1aa32646efea"}, - {file = "azure_identity-1.17.1-py3-none-any.whl", hash = "sha256:db8d59c183b680e763722bfe8ebc45930e6c57df510620985939f7f3191e0382"}, -] - -[package.dependencies] -azure-core = ">=1.23.0" -cryptography = ">=2.5" -msal = ">=1.24.0" -msal-extensions = ">=0.3.0" -typing-extensions = ">=4.0.0" - [[package]] name = "babel" version = "2.16.0" @@ -246,17 +234,6 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -280,21 +257,21 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "6.1.0" +version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, ] [package.dependencies] -six = ">=1.9.0" +tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] +css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "broadbean" @@ -330,94 +307,159 @@ files = [ [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] +[[package]] +name = "cf-xarray" +version = "0.9.4" +description = "A convenience wrapper for using CF attributes on xarray objects" +optional = false +python-versions = ">=3.9" +files = [ + {file = "cf_xarray-0.9.4-py3-none-any.whl", hash = "sha256:9f7acf73fe14bed66680bdb135682656ea8451e1f6c59221bc31a912b62ea46a"}, + {file = "cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb"}, +] + +[package.dependencies] +xarray = "*" + +[package.extras] +all = ["matplotlib", "pint (>=0.18,!=0.24.0)", "pooch", "regex", "rich", "shapely"] + [[package]] name = "cffi" -version = "1.17.0" +version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, - {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, - {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, - {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, - {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, - {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, - {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, - {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, - {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, - {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, - {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, - {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, - {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, - {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, - {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, - {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] pycparser = "*" +[[package]] +name = "cftime" +version = "1.6.4.post1" +description = "Time-handling functionality from netcdf4-python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cftime-1.6.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0baa9bc4850929da9f92c25329aa1f651e2d6f23e237504f337ee9e12a769f5d"}, + {file = "cftime-1.6.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bb6b087f4b2513c37670bccd457e2a666ca489c5f2aad6e2c0e94604dc1b5b9"}, + {file = "cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d9bdeb9174962c9ca00015190bfd693de6b0ec3ec0b3dbc35c693a4f48efdcc"}, + {file = "cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e735cfd544878eb94d0108ff5a093bd1a332dba90f979a31a357756d609a90d5"}, + {file = "cftime-1.6.4.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dcd1b140bf50da6775c56bd7ca179e84bd258b2f159b53eefd5c514b341f2bf"}, + {file = "cftime-1.6.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:e60b8f24b20753f7548f410f7510e28b941f336f84bd34e3cfd7874af6e70281"}, + {file = "cftime-1.6.4.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1bf7be0a0afc87628cb8c8483412aac6e48e83877004faa0936afb5bf8a877ba"}, + {file = "cftime-1.6.4.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0f64ca83acc4e3029f737bf3a32530ffa1fbf53124f5bee70b47548bc58671a7"}, + {file = "cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ebdfd81726b0cfb8b524309224fa952898dfa177c13d5f6af5b18cefbf497d"}, + {file = "cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ea0965a4c87739aebd84fe8eed966e5809d10065eeffd35c99c274b6f8da15"}, + {file = "cftime-1.6.4.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:800a18aea4e8cb2b206450397cb8a53b154798738af3cdd3c922ce1ca198b0e6"}, + {file = "cftime-1.6.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:5dcfc872f455db1f12eabe3c3ba98e93757cd60ed3526a53246e966ccde46c8a"}, + {file = "cftime-1.6.4.post1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a590f73506f4704ba5e154ef55bfbaed5e1b4ac170f3caeb8c58e4f2c619ee4e"}, + {file = "cftime-1.6.4.post1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:933cb10e1af4e362e77f513e3eb92b34a688729ddbf938bbdfa5ac20a7f44ba0"}, + {file = "cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf17a1b36f62e9e73c4c9363dd811e1bbf1170f5ac26d343fb26012ccf482908"}, + {file = "cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e18021f421aa26527bad8688c1acf0c85fa72730beb6efce969c316743294f2"}, + {file = "cftime-1.6.4.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5835b9d622f9304d1c23a35603a0f068739f428d902860f25e6e7e5a1b7cd8ea"}, + {file = "cftime-1.6.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:7f50bf0d1b664924aaee636eb2933746b942417d1f8b82ab6c1f6e8ba0da6885"}, + {file = "cftime-1.6.4.post1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5c89766ebf088c097832ea618c24ed5075331f0b7bf8e9c2d4144aefbf2f1850"}, + {file = "cftime-1.6.4.post1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f27113f7ccd1ca32881fdcb9a4bec806a5f54ae621fc1c374f1171f3ed98ef2"}, + {file = "cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da367b23eea7cf4df071c88e014a1600d6c5bbf22e3393a4af409903fa397e28"}, + {file = "cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0"}, + {file = "cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4"}, + {file = "cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259"}, + {file = "cftime-1.6.4.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9df3e2d49e548c62d1939e923800b08d2ab732d3ac8d75b857edd7982c878552"}, + {file = "cftime-1.6.4.post1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2892b7e7654142d825655f60eb66c3e1af745901890316907071d44cf9a18d8a"}, + {file = "cftime-1.6.4.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4ab54e6c04e68395d454cd4001188fc4ade2fe48035589ed65af80c4527ef08"}, + {file = "cftime-1.6.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:568b69fc52f406e361db62a4d7a219c6fb0ced138937144c3b3a511648dd6c50"}, + {file = "cftime-1.6.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:640911d2629f4a8f81f6bc0163a983b6b94f86d1007449b8cbfd926136cda253"}, + {file = "cftime-1.6.4.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:44e9f8052600803b55f8cb6bcac2be49405c21efa900ec77a9fb7f692db2f7a6"}, + {file = "cftime-1.6.4.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a90b6ef4a3fc65322c212a2c99cec75d1886f1ebaf0ff6189f7b327566762222"}, + {file = "cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652700130dbcca3ae36dbb5b61ff360e62aa09fabcabc42ec521091a14389901"}, + {file = "cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a7fb6cc541a027dab37fdeb695f8a2b21cd7d200be606f81b5abc38f2391e2"}, + {file = "cftime-1.6.4.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc2c0abe2dbd147e1b1e6d0f3de19a5ea8b04956acc204830fd8418066090989"}, + {file = "cftime-1.6.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:0ee2f5af8643aa1b47b7e388763a1a6e0dc05558cd2902cffb9cbcf954397648"}, + {file = "cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f"}, +] + +[package.dependencies] +numpy = {version = ">1.13.3", markers = "python_version < \"3.12.0.rc1\""} + [[package]] name = "chardet" version = "5.2.0" @@ -431,112 +473,114 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.7" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -544,13 +588,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloudpickle" -version = "3.0.0" +version = "3.1.0" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" files = [ - {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, - {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, + {file = "cloudpickle-3.1.0-py3-none-any.whl", hash = "sha256:fe11acda67f61aaaec473e3afe030feb131d78a43461b718185363384f1ba12e"}, + {file = "cloudpickle-3.1.0.tar.gz", hash = "sha256:81a929b6e3c7335c863c771d673d105f02efdb89dfaba0c90495d1c64796601b"}, ] [[package]] @@ -682,83 +726,73 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.1" +version = "7.6.10" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, + {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, + {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, + {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, + {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, + {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, + {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, + {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, + {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, + {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, + {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, + {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, + {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, + {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, + {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, + {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, + {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, + {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, + {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, + {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, + {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, + {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, + {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, + {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, + {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, + {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, + {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, + {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, + {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, + {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, + {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, + {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, + {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, ] [package.dependencies] @@ -767,55 +801,6 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[[package]] -name = "cryptography" -version = "43.0.0" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, - {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, - {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, - {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, - {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, - {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, - {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - [[package]] name = "cycler" version = "0.12.1" @@ -831,6 +816,35 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "dask" +version = "2024.8.0" +description = "Parallel PyData with Task Scheduling" +optional = false +python-versions = ">=3.9" +files = [ + {file = "dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309"}, + {file = "dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee"}, +] + +[package.dependencies] +click = ">=8.1" +cloudpickle = ">=1.5.0" +fsspec = ">=2021.09.0" +importlib-metadata = {version = ">=4.13.0", markers = "python_version < \"3.12\""} +packaging = ">=20.0" +partd = ">=1.4.0" +pyyaml = ">=5.3.1" +toolz = ">=0.10.0" + +[package.extras] +array = ["numpy (>=1.21)"] +complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)", "pyarrow-hotfix"] +dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=2.0)"] +diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] +distributed = ["distributed (==2024.8.0)"] +test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] + [[package]] name = "dataclasses-json" version = "0.6.7" @@ -848,33 +862,37 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.5" +version = "1.8.11" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, - {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, - {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, - {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, - {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, - {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, - {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, - {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, - {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, - {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, - {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, - {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, - {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, - {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, - {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, - {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, - {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, - {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, - {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, - {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, - {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, - {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, + {file = "debugpy-1.8.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2b26fefc4e31ff85593d68b9022e35e8925714a10ab4858fb1b577a8a48cb8cd"}, + {file = "debugpy-1.8.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61bc8b3b265e6949855300e84dc93d02d7a3a637f2aec6d382afd4ceb9120c9f"}, + {file = "debugpy-1.8.11-cp310-cp310-win32.whl", hash = "sha256:c928bbf47f65288574b78518449edaa46c82572d340e2750889bbf8cd92f3737"}, + {file = "debugpy-1.8.11-cp310-cp310-win_amd64.whl", hash = "sha256:8da1db4ca4f22583e834dcabdc7832e56fe16275253ee53ba66627b86e304da1"}, + {file = "debugpy-1.8.11-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:85de8474ad53ad546ff1c7c7c89230db215b9b8a02754d41cb5a76f70d0be296"}, + {file = "debugpy-1.8.11-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ffc382e4afa4aee367bf413f55ed17bd91b191dcaf979890af239dda435f2a1"}, + {file = "debugpy-1.8.11-cp311-cp311-win32.whl", hash = "sha256:40499a9979c55f72f4eb2fc38695419546b62594f8af194b879d2a18439c97a9"}, + {file = "debugpy-1.8.11-cp311-cp311-win_amd64.whl", hash = "sha256:987bce16e86efa86f747d5151c54e91b3c1e36acc03ce1ddb50f9d09d16ded0e"}, + {file = "debugpy-1.8.11-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:84e511a7545d11683d32cdb8f809ef63fc17ea2a00455cc62d0a4dbb4ed1c308"}, + {file = "debugpy-1.8.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce291a5aca4985d82875d6779f61375e959208cdf09fcec40001e65fb0a54768"}, + {file = "debugpy-1.8.11-cp312-cp312-win32.whl", hash = "sha256:28e45b3f827d3bf2592f3cf7ae63282e859f3259db44ed2b129093ca0ac7940b"}, + {file = "debugpy-1.8.11-cp312-cp312-win_amd64.whl", hash = "sha256:44b1b8e6253bceada11f714acf4309ffb98bfa9ac55e4fce14f9e5d4484287a1"}, + {file = "debugpy-1.8.11-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:8988f7163e4381b0da7696f37eec7aca19deb02e500245df68a7159739bbd0d3"}, + {file = "debugpy-1.8.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c1f6a173d1140e557347419767d2b14ac1c9cd847e0b4c5444c7f3144697e4e"}, + {file = "debugpy-1.8.11-cp313-cp313-win32.whl", hash = "sha256:bb3b15e25891f38da3ca0740271e63ab9db61f41d4d8541745cfc1824252cb28"}, + {file = "debugpy-1.8.11-cp313-cp313-win_amd64.whl", hash = "sha256:d8768edcbeb34da9e11bcb8b5c2e0958d25218df7a6e56adf415ef262cd7b6d1"}, + {file = "debugpy-1.8.11-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:ad7efe588c8f5cf940f40c3de0cd683cc5b76819446abaa50dc0829a30c094db"}, + {file = "debugpy-1.8.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:189058d03a40103a57144752652b3ab08ff02b7595d0ce1f651b9acc3a3a35a0"}, + {file = "debugpy-1.8.11-cp38-cp38-win32.whl", hash = "sha256:32db46ba45849daed7ccf3f2e26f7a386867b077f39b2a974bb5c4c2c3b0a280"}, + {file = "debugpy-1.8.11-cp38-cp38-win_amd64.whl", hash = "sha256:116bf8342062246ca749013df4f6ea106f23bc159305843491f64672a55af2e5"}, + {file = "debugpy-1.8.11-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:654130ca6ad5de73d978057eaf9e582244ff72d4574b3e106fb8d3d2a0d32458"}, + {file = "debugpy-1.8.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23dc34c5e03b0212fa3c49a874df2b8b1b8fda95160bd79c01eb3ab51ea8d851"}, + {file = "debugpy-1.8.11-cp39-cp39-win32.whl", hash = "sha256:52d8a3166c9f2815bfae05f386114b0b2d274456980d41f320299a8d9a5615a7"}, + {file = "debugpy-1.8.11-cp39-cp39-win_amd64.whl", hash = "sha256:52c3cf9ecda273a19cc092961ee34eb9ba8687d67ba34cc7b79a521c1c64c4c0"}, + {file = "debugpy-1.8.11-py2.py3-none-any.whl", hash = "sha256:0e22f846f4211383e6a416d04b4c13ed174d24cc5d43f5fd52e7821d0ebc8920"}, + {file = "debugpy-1.8.11.tar.gz", hash = "sha256:6ad2688b69235c43b020e04fecccdf6a96c8943ca9c2fb340b8adc103c655e57"}, ] [[package]] @@ -890,20 +908,20 @@ files = [ [[package]] name = "deepdiff" -version = "8.0.1" +version = "8.1.1" description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." optional = false python-versions = ">=3.8" files = [ - {file = "deepdiff-8.0.1-py3-none-any.whl", hash = "sha256:42e99004ce603f9a53934c634a57b04ad5900e0d8ed0abb15e635767489cbc05"}, - {file = "deepdiff-8.0.1.tar.gz", hash = "sha256:245599a4586ab59bb599ca3517a9c42f3318ff600ded5e80a3432693c8ec3c4b"}, + {file = "deepdiff-8.1.1-py3-none-any.whl", hash = "sha256:b0231fa3afb0f7184e82535f2b4a36636442ed21e94a0cf3aaa7982157e7ebca"}, + {file = "deepdiff-8.1.1.tar.gz", hash = "sha256:dd7bc7d5c8b51b5b90f01b0e2fe23c801fd8b4c6a7ee7e31c5a3c3663fcc7ceb"}, ] [package.dependencies] -orderly-set = "5.2.2" +orderly-set = ">=5.2.3,<6" [package.extras] -cli = ["click (==8.1.7)", "pyyaml (==6.0.1)"] +cli = ["click (==8.1.7)", "pyyaml (==6.0.2)"] optimize = ["orjson"] [[package]] @@ -917,15 +935,32 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +[[package]] +name = "deprecated" +version = "1.2.15" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] + [[package]] name = "dill" -version = "0.3.8" +version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, ] [package.extras] @@ -934,13 +969,24 @@ profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "docopt-ng" +version = "0.9.0" +description = "Jazzband-maintained fork of docopt, the humane command line arguments parser." +optional = false +python-versions = ">=3.7" +files = [ + {file = "docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9"}, + {file = "docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7"}, ] [[package]] @@ -957,15 +1003,40 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.1.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.8" +files = [ + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + +[[package]] +name = "fasteners" +version = "0.19" +description = "A python package that provides useful locks" +optional = false +python-versions = ">=3.6" +files = [ + {file = "fasteners-0.19-py3-none-any.whl", hash = "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237"}, + {file = "fasteners-0.19.tar.gz", hash = "sha256:b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c"}, +] + [[package]] name = "fastjsonschema" -version = "2.20.0" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, - {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] [package.extras] @@ -973,69 +1044,77 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.15.4" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, - {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] -typing = ["typing-extensions (>=4.8)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "fonttools" -version = "4.53.1" +version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, - {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, - {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, - {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, - {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, - {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, - {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, - {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, - {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, - {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, - {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, - {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, - {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, - {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, - {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, - {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, - {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, - {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, - {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, - {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, - {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, - {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, - {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, - {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, - {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, - {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, - {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, - {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, - {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, - {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, - {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, - {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, - {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, - {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, - {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, - {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, - {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, - {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, + {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, + {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, + {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, + {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, + {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, + {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, + {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, + {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, + {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, + {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, + {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, + {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, + {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, + {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] [package.extras] @@ -1063,6 +1142,45 @@ files = [ {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +[[package]] +name = "fsspec" +version = "2024.12.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, + {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + [[package]] name = "ghp-import" version = "2.1.0" @@ -1080,78 +1198,15 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] -[[package]] -name = "google-api-core" -version = "2.19.2" -description = "Google API client core library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "google_api_core-2.19.2-py3-none-any.whl", hash = "sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4"}, - {file = "google_api_core-2.19.2.tar.gz", hash = "sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f"}, -] - -[package.dependencies] -google-auth = ">=2.14.1,<3.0.dev0" -googleapis-common-protos = ">=1.56.2,<2.0.dev0" -proto-plus = ">=1.22.3,<2.0.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" -requests = ">=2.18.0,<3.0.0.dev0" - -[package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] - -[[package]] -name = "google-auth" -version = "2.34.0" -description = "Google Authentication Library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "google_auth-2.34.0-py2.py3-none-any.whl", hash = "sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65"}, - {file = "google_auth-2.34.0.tar.gz", hash = "sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc"}, -] - -[package.dependencies] -cachetools = ">=2.0.0,<6.0" -pyasn1-modules = ">=0.2.1" -rsa = ">=3.1.4,<5" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] -enterprise-cert = ["cryptography", "pyopenssl"] -pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0.dev0)"] - -[[package]] -name = "googleapis-common-protos" -version = "1.65.0" -description = "Common protobufs used in Google APIs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, - {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, -] - -[package.dependencies] -protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" - -[package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] - [[package]] name = "griffe" -version = "1.2.0" +version = "1.5.4" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "griffe-1.2.0-py3-none-any.whl", hash = "sha256:a8b2fcb1ecdc5a412e646b0b4375eb20a5d2eac3a11dd8c10c56967a4097663c"}, - {file = "griffe-1.2.0.tar.gz", hash = "sha256:1c9f6ef7455930f3f9b0c4145a961c90385d1e2cbc496f7796fbff560ec60d31"}, + {file = "griffe-1.5.4-py3-none-any.whl", hash = "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d"}, + {file = "griffe-1.5.4.tar.gz", hash = "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52"}, ] [package.dependencies] @@ -1170,13 +1225,13 @@ files = [ [[package]] name = "h5netcdf" -version = "1.3.0" +version = "1.4.1" description = "netCDF4 via h5py" optional = false python-versions = ">=3.9" files = [ - {file = "h5netcdf-1.3.0-py3-none-any.whl", hash = "sha256:f2df69dcd3665dc9c4d43eb6529dedd113b2508090d12ac973573305a8406465"}, - {file = "h5netcdf-1.3.0.tar.gz", hash = "sha256:a171c027daeb34b24c24a3b6304195b8eabbb6f10c748256ed3cfe19806383cf"}, + {file = "h5netcdf-1.4.1-py3-none-any.whl", hash = "sha256:dd86c78ae69b92b16aa8a3c1ff3a14e7622571b5788dcf6d8b68569035bf71ce"}, + {file = "h5netcdf-1.4.1.tar.gz", hash = "sha256:7c8401ab807ff37c9798edc90d99467595892e6c541a5d5abeb8f53aab5335fe"}, ] [package.dependencies] @@ -1188,36 +1243,41 @@ test = ["netCDF4", "pytest"] [[package]] name = "h5py" -version = "3.11.0" +version = "3.12.1" description = "Read and write HDF5 files from Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, - {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, - {file = "h5py-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77b19a40788e3e362b54af4dcf9e6fde59ca016db2c61360aa30b47c7b7cef00"}, - {file = "h5py-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef4e2f338fc763f50a8113890f455e1a70acd42a4d083370ceb80c463d803972"}, - {file = "h5py-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbd732a08187a9e2a6ecf9e8af713f1d68256ee0f7c8b652a32795670fb481ba"}, - {file = "h5py-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75bd7b3d93fbeee40860fd70cdc88df4464e06b70a5ad9ce1446f5f32eb84007"}, - {file = "h5py-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c416f8eb0daae39dabe71415cb531f95dce2d81e1f61a74537a50c63b28ab3"}, - {file = "h5py-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:083e0329ae534a264940d6513f47f5ada617da536d8dccbafc3026aefc33c90e"}, - {file = "h5py-3.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a76cae64080210389a571c7d13c94a1a6cf8cb75153044fd1f822a962c97aeab"}, - {file = "h5py-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3736fe21da2b7d8a13fe8fe415f1272d2a1ccdeff4849c1421d2fb30fd533bc"}, - {file = "h5py-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6ae84a14103e8dc19266ef4c3e5d7c00b68f21d07f2966f0ca7bdb6c2761fb"}, - {file = "h5py-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:21dbdc5343f53b2e25404673c4f00a3335aef25521bd5fa8c707ec3833934892"}, - {file = "h5py-3.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:754c0c2e373d13d6309f408325343b642eb0f40f1a6ad21779cfa9502209e150"}, - {file = "h5py-3.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:731839240c59ba219d4cb3bc5880d438248533366f102402cfa0621b71796b62"}, - {file = "h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ec9df3dd2018904c4cc06331951e274f3f3fd091e6d6cc350aaa90fa9b42a76"}, - {file = "h5py-3.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:55106b04e2c83dfb73dc8732e9abad69d83a436b5b82b773481d95d17b9685e1"}, - {file = "h5py-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f4e025e852754ca833401777c25888acb96889ee2c27e7e629a19aee288833f0"}, - {file = "h5py-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c4b760082626120031d7902cd983d8c1f424cdba2809f1067511ef283629d4b"}, - {file = "h5py-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67462d0669f8f5459529de179f7771bd697389fcb3faab54d63bf788599a48ea"}, - {file = "h5py-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:d9c944d364688f827dc889cf83f1fca311caf4fa50b19f009d1f2b525edd33a3"}, - {file = "h5py-3.11.0.tar.gz", hash = "sha256:7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9"}, + {file = "h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda"}, + {file = "h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3"}, + {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2"}, + {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307"}, + {file = "h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e"}, + {file = "h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93"}, + {file = "h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef"}, + {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e"}, + {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166"}, + {file = "h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4"}, + {file = "h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed"}, + {file = "h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351"}, + {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834"}, + {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9"}, + {file = "h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc"}, + {file = "h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc"}, + {file = "h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653"}, + {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32"}, + {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f"}, + {file = "h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8"}, + {file = "h5py-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2b8dd64f127d8b324f5d2cd1c0fd6f68af69084e9e47d27efeb9e28e685af3e"}, + {file = "h5py-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4532c7e97fbef3d029735db8b6f5bf01222d9ece41e309b20d63cfaae2fb5c4d"}, + {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdf6d7936fa824acfa27305fe2d9f39968e539d831c5bae0e0d83ed521ad1ac"}, + {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84342bffd1f82d4f036433e7039e241a243531a1d3acd7341b35ae58cdab05bf"}, + {file = "h5py-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:62be1fc0ef195891949b2c627ec06bc8e837ff62d5b911b6e42e38e0f20a897d"}, + {file = "h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf"}, ] [package.dependencies] -numpy = ">=1.17.3" +numpy = ">=1.19.3" [[package]] name = "hickle" @@ -1236,13 +1296,13 @@ numpy = ">=1.8,<1.20 || >1.20" [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -1253,17 +1313,17 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, - {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, ] [package.dependencies] @@ -1271,7 +1331,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -1282,15 +1341,18 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.8" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ - {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, - {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "ifaddr" version = "0.2.0" @@ -1304,32 +1366,36 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.4.0" +version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, - {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "importlib-resources" -version = "6.4.4" +version = "6.5.2" description = "Read resources from Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"}, - {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"}, + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, ] [package.dependencies] @@ -1389,39 +1455,40 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "7.34.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "ipywidgets" @@ -1460,32 +1527,32 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -1494,17 +1561,31 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "joblib" +version = "1.4.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, +] + [[package]] name = "json5" -version = "0.9.25" +version = "0.10.0" description = "A Python implementation of the JSON5 data format." optional = false -python-versions = ">=3.8" +python-versions = ">=3.8.0" files = [ - {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, - {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, + {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, + {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, ] +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] + [[package]] name = "jsonpointer" version = "3.0.0" @@ -1547,13 +1628,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.12.1" +version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] [package.dependencies] @@ -1580,13 +1661,13 @@ notebook = "*" [[package]] name = "jupyter-client" -version = "8.6.2" +version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, - {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, ] [package.dependencies] @@ -1647,13 +1728,13 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.10.0" +version = "0.11.0" description = "Jupyter Event System library" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, - {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, + {file = "jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf"}, + {file = "jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90"}, ] [package.dependencies] @@ -1667,7 +1748,7 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] @@ -1687,13 +1768,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.14.2" +version = "2.15.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, - {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, + {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, + {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, ] [package.dependencies] @@ -1702,7 +1783,7 @@ argon2-cffi = ">=21.1" jinja2 = ">=3.0.3" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.9.0" +jupyter-events = ">=0.11.0" jupyter-server-terminals = ">=0.4.4" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" @@ -1742,13 +1823,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.2.5" +version = "4.3.4" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, - {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, + {file = "jupyterlab-4.3.4-py3-none-any.whl", hash = "sha256:b754c2601c5be6adf87cb5a1d8495d653ffb945f021939f77776acaa94dae952"}, + {file = "jupyterlab-4.3.4.tar.gz", hash = "sha256:f0bb9b09a04766e3423cccc2fc23169aa2ffedcdf8713e9e0fb33cac0b6859d0"}, ] [package.dependencies] @@ -1763,15 +1844,15 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -setuptools = ">=40.1.0" +setuptools = ">=40.8.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] @@ -1825,115 +1906,125 @@ files = [ [[package]] name = "kiwisolver" -version = "1.4.5" +version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] [[package]] @@ -1957,31 +2048,31 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] [[package]] name = "libqasm" -version = "0.6.7" +version = "0.6.9" description = "libqasm Python Package" optional = false python-versions = "*" files = [ - {file = "libqasm-0.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85012c73625ceb44c112a4cab9bd81664118a2b000dd47a47925d6d5711c31b4"}, - {file = "libqasm-0.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4369f7e4f036a1dd77bafcda638dfa2e2b66eda3ef3577ce8a0f650b68103c76"}, - {file = "libqasm-0.6.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc5efadc23d948b2065b405021a85e1aac9186c223bff0e8e96c96815ecf31f4"}, - {file = "libqasm-0.6.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b4e94ca70cc20a0efdc0fd7cf4322948c44c9b5c867174824d625462289a47"}, - {file = "libqasm-0.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:a39edf23f224912a14925134025209aebc60c56ac0819ed03d032760977e7516"}, - {file = "libqasm-0.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad6f4fce0cfd8bd276e8b7ce2ed91da6f34d634c3a4322e257f374e7386b6fb3"}, - {file = "libqasm-0.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a187d7b7121e8b1a51885a7b56470b94be52f9eb201a0d62afb4766f515eda0a"}, - {file = "libqasm-0.6.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecd02d4391cc539fd78459496b92580aa171f0a1660d943c61d162ae58be0d81"}, - {file = "libqasm-0.6.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1650be6510a9a6ce002f33aaa66b34ac5d1e269794c8c4683dc77459f3e61b9e"}, - {file = "libqasm-0.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:947863a5715184a59022cbba05b4518c359c49087cbfa0b27eb5eef19ea69559"}, - {file = "libqasm-0.6.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a04b16c604d5c7212bcd1d43d8ce6a6ef08057a8a5e4e793499c2988424bde5a"}, - {file = "libqasm-0.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed64ba178e33c6a48c04ce50642e751ce289c57703ede0f71304befbbc66fb42"}, - {file = "libqasm-0.6.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c04f44925416f9472af5603cf9b52e1aff4ba2d9509327c8af374c7bc22e27"}, - {file = "libqasm-0.6.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b8a15e27d79007c18e812d5ec42c62053131100cb38a36f1295476ba3407361"}, - {file = "libqasm-0.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:c74c33d4449355be9f909620e734cce0c7e7026ea56688234968e5ec3a0c12eb"}, - {file = "libqasm-0.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3573a244d5b939b3a51c17557ef56fd7bcafd550ba37a11de8e7f38933629565"}, - {file = "libqasm-0.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94228b90493625381fd23a0473c02b135dc6c9727bf26b0c7f7bfec13a822c66"}, - {file = "libqasm-0.6.7-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:161e67e58f7b78f9f53d97dc5d15c529a29c06c5dc554c92e76e70f71001aaca"}, - {file = "libqasm-0.6.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b201ddd0a608b2256f7a2364d3195012bf2e13dd655abb3f078f682676f94b9"}, - {file = "libqasm-0.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:9e7b5064921d1a7e232f5bbf5151fce532972a69135d359c10e5c12bcf7ce9e5"}, + {file = "libqasm-0.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:31da6dbeaf14df4c3c796f1ae09d49bcdd5a52fb85ab8a7aa7475ad099691521"}, + {file = "libqasm-0.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3b66ec559db7ffaea0bd586139e4119fdbfaebd0c7c47ed899bb6744ba7964ef"}, + {file = "libqasm-0.6.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6db57611f5e048b04fede7f6dd102f5d94dfef6e77ac7301185d55673f122dab"}, + {file = "libqasm-0.6.9-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62017c9630f20f3fa775dddae09dc1c70e7c44afeb26fde93c082c38393c5902"}, + {file = "libqasm-0.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:1f5f80f2ca02c16f590d0c02c6065ce400c39bdc7b3406d33934a63d54d5cf82"}, + {file = "libqasm-0.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3cb4a7f75de569a23c43581b6d0e793c6218334b1b4d8d56b1ab8954083a5fd"}, + {file = "libqasm-0.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:06b1227deb4711bd8318abf8bea3f37c1c65bd0003ff4b4b2f286e0a1601a734"}, + {file = "libqasm-0.6.9-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72cccc68793785e55cc16a288c7502781b324830ce868ce59fb09a35e75bfad0"}, + {file = "libqasm-0.6.9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c5ec4d7eccbc06a49591c10101b2c6e5f76901854c9c998b0f216f0f11d2607"}, + {file = "libqasm-0.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:aaea4dad2c3742dc8e5d885363a2670249270f87c9c9030f67ae2b20355eeedb"}, + {file = "libqasm-0.6.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:64b2fe7ce804b26e107ec1e5ddae4c37e311f056331b4fae723933fcd0901d54"}, + {file = "libqasm-0.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:67ecc40f9c6f50dd5db0f1b949f677b3d8126b1bd3836fdf544c1e56d5fc11ba"}, + {file = "libqasm-0.6.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68ff5857a877be0d44ea3d746c936ccc112b10312d686b74d890b8effb000799"}, + {file = "libqasm-0.6.9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:822bbec51dba5cdf2fe865fa74b6a0e01c2c46fefc84c18a3e9159d6f1f1c33b"}, + {file = "libqasm-0.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:84c99d94a9d45c9487f6ff9be31ac849a4c8a704396ae67254db78b384942b7a"}, + {file = "libqasm-0.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49a04ccc5c271b496ecbc83c42beae95b3753f1180e19e242b613314e495874d"}, + {file = "libqasm-0.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c2340455a85603ba8d1fd63f78e79bde1dd2902fed89b5bd40a8a643c15273"}, + {file = "libqasm-0.6.9-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9e1e46d170ebe820e4e1215be56cbd2b83a5963638e2f69cc10269514b32e6d"}, + {file = "libqasm-0.6.9-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ebb0890a90cf9a31bc3d8be9d208aca7f906a7420d7eced54678df2ed72da53"}, + {file = "libqasm-0.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:388c42972ca6700dd64612d6e5d7e1627ca37e1b9ed5e3eb69f85d68b0cb3508"}, ] [package.dependencies] @@ -2011,6 +2102,17 @@ dev = ["build", "check-wheel-contents", "flake8-pyproject", "pre-commit", "twine doc = ["Pillow", "Sphinx", "cairosvg", "corner", "emcee (>=3.0.0)", "ipykernel", "jupyter-sphinx (>=0.2.4)", "matplotlib", "numdifftools", "numexpr", "pandas", "pycairo", "sphinx-gallery (>=0.10)", "sphinxcontrib-svg2pdfconverter", "sympy"] test = ["coverage", "flaky", "pytest", "pytest-cov"] +[[package]] +name = "locket" +version = "1.0.0" +description = "File-based locks for Python on Linux and Windows" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, + {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, +] + [[package]] name = "loky" version = "3.4.1" @@ -2025,6 +2127,160 @@ files = [ [package.dependencies] cloudpickle = "*" +[[package]] +name = "lxml" +version = "5.3.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +files = [ + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.11)"] + [[package]] name = "markdown" version = "3.7" @@ -2069,139 +2325,141 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] name = "marshmallow" -version = "3.22.0" +version = "3.24.2" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "marshmallow-3.22.0-py3-none-any.whl", hash = "sha256:71a2dce49ef901c3f97ed296ae5051135fd3febd2bf43afe0ae9a82143a494d9"}, - {file = "marshmallow-3.22.0.tar.gz", hash = "sha256:4972f529104a220bb8637d595aa4c9762afbe7f7a77d82dc58c1615d70c5823e"}, + {file = "marshmallow-3.24.2-py3-none-any.whl", hash = "sha256:bf3c56db473bb160e5191f1c5e32e3fc8bfb58998eb2b35d6747de023e31f9e7"}, + {file = "marshmallow-3.24.2.tar.gz", hash = "sha256:0822c3701de396b51d3f8ac97319aea5493998ba4e7d0e4c05f6fce7777bf3a2"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.0.2)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "pytz", "simplejson"] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)"] +tests = ["pytest", "simplejson"] [[package]] name = "matplotlib" -version = "3.9.2" +version = "3.9.4" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, - {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, - {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, - {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, - {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, - {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, - {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, - {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, - {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, - {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, - {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, - {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, - {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, - {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, + {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, + {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, + {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, + {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, + {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, + {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, + {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, + {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, + {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, + {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, + {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, + {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, + {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, + {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, + {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, ] [package.dependencies] @@ -2217,7 +2475,7 @@ pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "matplotlib-inline" @@ -2275,15 +2533,18 @@ test = ["functools32 (>=3.2.3-2)", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] [[package]] name = "mistune" -version = "3.0.2" +version = "3.1.0" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, - {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, + {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"}, + {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"}, ] +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} + [[package]] name = "mkdocs" version = "1.6.1" @@ -2378,13 +2639,13 @@ mkdocs = ">=1.0.3" [[package]] name = "mkdocs-material" -version = "9.5.36" +version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"}, - {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"}, + {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, + {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, ] [package.dependencies] @@ -2401,7 +2662,7 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] @@ -2418,13 +2679,13 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.26.1" +version = "0.27.0" description = "Automatic documentation from sources, for MkDocs." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mkdocstrings-0.26.1-py3-none-any.whl", hash = "sha256:29738bfb72b4608e8e55cc50fb8a54f325dc7ebd2014e4e3881a49892d5983cf"}, - {file = "mkdocstrings-0.26.1.tar.gz", hash = "sha256:bb8b8854d6713d5348ad05b069a09f3b79edbc6a0f33a34c6821141adb03fe33"}, + {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, + {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, ] [package.dependencies] @@ -2447,18 +2708,19 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.10.8" +version = "1.13.0" description = "A Python handler for mkdocstrings." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mkdocstrings_python-1.10.8-py3-none-any.whl", hash = "sha256:bb12e76c8b071686617f824029cb1dfe0e9afe89f27fb3ad9a27f95f054dcd89"}, - {file = "mkdocstrings_python-1.10.8.tar.gz", hash = "sha256:5856a59cbebbb8deb133224a540de1ff60bded25e54d8beacc375bb133d39016"}, + {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, + {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, ] [package.dependencies] griffe = ">=0.49" -mkdocstrings = ">=0.25" +mkdocs-autorefs = ">=1.2" +mkdocstrings = ">=0.26" [[package]] name = "mpmath" @@ -2477,83 +2739,61 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] -[[package]] -name = "msal" -version = "1.30.0" -description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." -optional = false -python-versions = ">=3.7" -files = [ - {file = "msal-1.30.0-py3-none-any.whl", hash = "sha256:423872177410cb61683566dc3932db7a76f661a5d2f6f52f02a047f101e1c1de"}, - {file = "msal-1.30.0.tar.gz", hash = "sha256:b4bf00850092e465157d814efa24a18f788284c9a479491024d62903085ea2fb"}, -] - -[package.dependencies] -cryptography = ">=2.5,<45" -PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} -requests = ">=2.0.0,<3" - -[package.extras] -broker = ["pymsalruntime (>=0.13.2,<0.17)"] - -[[package]] -name = "msal-extensions" -version = "1.2.0" -description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." -optional = false -python-versions = ">=3.7" -files = [ - {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, - {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, -] - -[package.dependencies] -msal = ">=1.29,<2" -portalocker = ">=1.4,<3" - [[package]] name = "mypy" -version = "1.11.2" +version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, + {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, + {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, + {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, + {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, + {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, + {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, + {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, + {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, + {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, + {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, + {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, + {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, + {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, + {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, + {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, + {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, + {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, + {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, + {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, + {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, + {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, + {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, + {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, + {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, + {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, + {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" +mypy_extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.6.0" +typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -2571,13 +2811,13 @@ files = [ [[package]] name = "nbclient" -version = "0.10.0" +version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, - {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, + {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, + {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, ] [package.dependencies] @@ -2588,23 +2828,23 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.16.4" +version = "7.16.5" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, - {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, + {file = "nbconvert-7.16.5-py3-none-any.whl", hash = "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547"}, + {file = "nbconvert-7.16.5.tar.gz", hash = "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344"}, ] [package.dependencies] beautifulsoup4 = "*" -bleach = "!=5.0.0" +bleach = {version = "!=5.0.0", extras = ["css"]} defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" @@ -2617,7 +2857,6 @@ nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" -tinycss2 = "*" traitlets = ">=5.1" [package.extras] @@ -2661,6 +2900,53 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +[[package]] +name = "netcdf4" +version = "1.7.2" +description = "Provides an object-oriented python interface to the netCDF version 4 library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "netCDF4-1.7.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5e9b485e3bd9294d25ff7dc9addefce42b3d23c1ee7e3627605277d159819392"}, + {file = "netCDF4-1.7.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:118b476fd00d7e3ab9aa7771186d547da645ae3b49c0c7bdab866793ebf22f07"}, + {file = "netCDF4-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe5b1837ff209185ecfe50bd71884c866b3ee69691051833e410e57f177e059"}, + {file = "netCDF4-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28021c7e886e5bccf9a8ce504c032d1d7f98d86f67495fb7cf2c9564eba04510"}, + {file = "netCDF4-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:7460b638e41c8ce4179d082a81cb6456f0ce083d4d959f4d9e87a95cd86f64cb"}, + {file = "netCDF4-1.7.2-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:09d61c2ddb6011afb51e77ea0f25cd0bdc28887fb426ffbbc661d920f20c9749"}, + {file = "netCDF4-1.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:fd2a16dbddeb8fa7cf48c37bfc1967290332f2862bb82f984eec2007bb120aeb"}, + {file = "netCDF4-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f54f5d39ffbcf1726a1e6fd90cb5fa74277ecea739a5fa0f424636d71beafe24"}, + {file = "netCDF4-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902aa50d70f49d002d896212a171d344c38f7b8ca520837c56c922ac1535c4a3"}, + {file = "netCDF4-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:3291f9ad0c98c49a4dd16aefad1a9abd3a1b884171db6c81bdcee94671cfabe3"}, + {file = "netCDF4-1.7.2-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:e73e3baa0b74afc414e53ff5095748fdbec7fb346eda351e567c23f2f0d247f1"}, + {file = "netCDF4-1.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a51da09258b31776f474c1d47e484fc7214914cdc59edf4cee789ba632184591"}, + {file = "netCDF4-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb95b11804fe051897d1f2044b05d82a1847bc2549631cdd2f655dde7de77a9c"}, + {file = "netCDF4-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d8a848373723f41ef662590b4f5e1832227501c9fd4513e8ad8da58c269977"}, + {file = "netCDF4-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:568ea369e00b581302d77fc5fd0b8f78e520c7e08d0b5af5219ba51f3f1cd694"}, + {file = "netCDF4-1.7.2-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:205a5f1de3ddb993c7c97fb204a923a22408cc2e5facf08d75a8eb89b3e7e1a8"}, + {file = "netCDF4-1.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:96653fc75057df196010818367c63ba6d7e9af603df0a7fe43fcdad3fe0e9e56"}, + {file = "netCDF4-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30d20e56b9ba2c48884eb89c91b63e6c0612b4927881707e34402719153ef17f"}, + {file = "netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6bfd38ba0bde04d56f06c1554714a2ea9dab75811c89450dc3ec57a9d36b80"}, + {file = "netCDF4-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:5c5fbee6134ee1246c397e1508e5297d825aa19221fdf3fa8dc9727ad824d7a5"}, + {file = "netCDF4-1.7.2-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:6bf402c2c7c063474576e5cf89af877d0b0cd097d9316d5bc4fcb22b62f12567"}, + {file = "netCDF4-1.7.2-cp38-cp38-macosx_14_0_arm64.whl", hash = "sha256:5bdf3b34e6fd4210e34fdc5d1a669a22c4863d96f8a20a3928366acae7b3cbbb"}, + {file = "netCDF4-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657774404b9f78a5e4d26506ac9bfe106e4a37238282a70803cc7ce679c5a6cc"}, + {file = "netCDF4-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e896d92f01fbf365e33e2513d5a8c4cfe16ff406aae9b6034e5ba1538c8c7a8"}, + {file = "netCDF4-1.7.2-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:eb87c08d1700fe67c301898cf5ba3a3e1f8f2fbb417fcd0e2ac784846b60b058"}, + {file = "netCDF4-1.7.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:59b403032774c723ee749d7f2135be311bad7d00d1db284bebfab58b9d5cdb92"}, + {file = "netCDF4-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572f71459ef4b30e8554dcc4e1e6f55de515acc82a50968b48fe622244a64548"}, + {file = "netCDF4-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f77e72281acc5f331f82271e5f7f014d46f5ca9bcaa5aafe3e46d66cee21320"}, + {file = "netCDF4-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:d0fa7a9674fae8ae4877e813173c3ff7a6beee166b8730bdc847f517b282ed31"}, + {file = "netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce"}, +] + +[package.dependencies] +certifi = "*" +cftime = "*" +numpy = "*" + +[package.extras] +tests = ["Cython", "packaging", "pytest"] + [[package]] name = "networkx" version = "3.2.1" @@ -2681,18 +2967,18 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "notebook" -version = "7.2.2" +version = "7.3.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.2.2-py3-none-any.whl", hash = "sha256:c89264081f671bc02eec0ed470a627ed791b9156cad9285226b31611d3e9fe1c"}, - {file = "notebook-7.2.2.tar.gz", hash = "sha256:2ef07d4220421623ad3fe88118d687bc0450055570cdd160814a59cf3a1c516e"}, + {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"}, + {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.2.0,<4.3" +jupyterlab = ">=4.3.4,<4.4" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -2720,113 +3006,178 @@ jupyter-server = ">=1.8,<3" test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] [[package]] -name = "numpy" -version = "2.0.2" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, -] - -[[package]] -name = "opencensus" -version = "0.11.4" -description = "A stats collection and distributed tracing framework" +name = "numcodecs" +version = "0.12.1" +description = "A Python package providing buffer compression and transformation codecs for use in data storage and communication applications." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864"}, - {file = "opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2"}, + {file = "numcodecs-0.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d37f628fe92b3699e65831d5733feca74d2e33b50ef29118ffd41c13c677210e"}, + {file = "numcodecs-0.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:941b7446b68cf79f089bcfe92edaa3b154533dcbcd82474f994b28f2eedb1c60"}, + {file = "numcodecs-0.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e79bf9d1d37199ac00a60ff3adb64757523291d19d03116832e600cac391c51"}, + {file = "numcodecs-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82d7107f80f9307235cb7e74719292d101c7ea1e393fe628817f0d635b7384f5"}, + {file = "numcodecs-0.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eeaf42768910f1c6eebf6c1bb00160728e62c9343df9e2e315dc9fe12e3f6071"}, + {file = "numcodecs-0.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:135b2d47563f7b9dc5ee6ce3d1b81b0f1397f69309e909f1a35bb0f7c553d45e"}, + {file = "numcodecs-0.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a191a8e347ecd016e5c357f2bf41fbcb026f6ffe78fff50c77ab12e96701d155"}, + {file = "numcodecs-0.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:21d8267bd4313f4d16f5b6287731d4c8ebdab236038f29ad1b0e93c9b2ca64ee"}, + {file = "numcodecs-0.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2f84df6b8693206365a5b37c005bfa9d1be486122bde683a7b6446af4b75d862"}, + {file = "numcodecs-0.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:760627780a8b6afdb7f942f2a0ddaf4e31d3d7eea1d8498cf0fd3204a33c4618"}, + {file = "numcodecs-0.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c258bd1d3dfa75a9b708540d23b2da43d63607f9df76dfa0309a7597d1de3b73"}, + {file = "numcodecs-0.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e04649ea504aff858dbe294631f098fbfd671baf58bfc04fc48d746554c05d67"}, + {file = "numcodecs-0.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:caf1a1e6678aab9c1e29d2109b299f7a467bd4d4c34235b1f0e082167846b88f"}, + {file = "numcodecs-0.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c17687b1fd1fef68af616bc83f896035d24e40e04e91e7e6dae56379eb59fe33"}, + {file = "numcodecs-0.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29dfb195f835a55c4d490fb097aac8c1bcb96c54cf1b037d9218492c95e9d8c5"}, + {file = "numcodecs-0.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:2f1ba2f4af3fd3ba65b1bcffb717fe65efe101a50a91c368f79f3101dbb1e243"}, + {file = "numcodecs-0.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fbb12a6a1abe95926f25c65e283762d63a9bf9e43c0de2c6a1a798347dfcb40"}, + {file = "numcodecs-0.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f2207871868b2464dc11c513965fd99b958a9d7cde2629be7b2dc84fdaab013b"}, + {file = "numcodecs-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f"}, + {file = "numcodecs-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136"}, + {file = "numcodecs-0.12.1.tar.gz", hash = "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e"}, ] [package.dependencies] -google-api-core = {version = ">=1.0.0,<3.0.0", markers = "python_version >= \"3.6\""} -opencensus-context = ">=0.1.3" -six = ">=1.16,<2.0" +numpy = ">=1.7" + +[package.extras] +docs = ["mock", "numpydoc", "sphinx (<7.0.0)", "sphinx-issues"] +msgpack = ["msgpack"] +test = ["coverage", "flake8", "pytest", "pytest-cov"] +test-extras = ["importlib-metadata"] +zfpy = ["zfpy (>=1.0.0)"] [[package]] -name = "opencensus-context" -version = "0.1.3" -description = "OpenCensus Runtime Context" +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" optional = false -python-versions = "*" +python-versions = ">=3.9" files = [ - {file = "opencensus-context-0.1.3.tar.gz", hash = "sha256:a03108c3c10d8c80bb5ddf5c8a1f033161fa61972a9917f9b9b3a18517f0088c"}, - {file = "opencensus_context-0.1.3-py2.py3-none-any.whl", hash = "sha256:073bb0590007af276853009fac7e4bab1d523c3f03baf4cb4511ca38967c6039"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] -name = "opencensus-ext-azure" -version = "1.1.13" -description = "OpenCensus Azure Monitor Exporter" +name = "numpy" +version = "2.2.1" +description = "Fundamental package for array computing in Python" optional = false -python-versions = "*" +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, + {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, + {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, + {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, + {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, + {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, + {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, + {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, + {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, + {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, + {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, + {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, +] + +[[package]] +name = "opentelemetry-api" +version = "1.29.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" files = [ - {file = "opencensus-ext-azure-1.1.13.tar.gz", hash = "sha256:aec30472177005379ba56a702a097d618c5f57558e1bb6676ec75f948130692a"}, - {file = "opencensus_ext_azure-1.1.13-py2.py3-none-any.whl", hash = "sha256:06001fac6f8588ba00726a3a7c6c7f2fc88bc8ad12a65afdca657923085393dd"}, + {file = "opentelemetry_api-1.29.0-py3-none-any.whl", hash = "sha256:5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8"}, + {file = "opentelemetry_api-1.29.0.tar.gz", hash = "sha256:d04a6cf78aad09614f52964ecb38021e248f5714dc32c2e0d8fd99517b4d69cf"}, ] [package.dependencies] -azure-core = ">=1.12.0,<2.0.0" -azure-identity = ">=1.5.0,<2.0.0" -opencensus = ">=0.11.4,<1.0.0" -psutil = ">=5.6.3" -requests = ">=2.19.0" +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=8.5.0" [[package]] name = "orderly-set" -version = "5.2.2" +version = "5.2.3" description = "Orderly set" optional = false python-versions = ">=3.8" files = [ - {file = "orderly_set-5.2.2-py3-none-any.whl", hash = "sha256:f7a37c95a38c01cdfe41c3ffb62925a318a2286ea0a41790c057fc802aec54da"}, - {file = "orderly_set-5.2.2.tar.gz", hash = "sha256:52a18b86aaf3f5d5a498bbdb27bf3253a4e5c57ab38e5b7a56fa00115cd28448"}, + {file = "orderly_set-5.2.3-py3-none-any.whl", hash = "sha256:d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"}, + {file = "orderly_set-5.2.3.tar.gz", hash = "sha256:571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"}, ] [[package]] @@ -2842,13 +3193,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -2868,40 +3219,53 @@ lint = ["black"] [[package]] name = "pandas" -version = "2.2.2" +version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, - {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, - {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, - {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, - {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, - {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, ] [package.dependencies] @@ -2963,6 +3327,24 @@ files = [ qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["docopt", "pytest"] +[[package]] +name = "partd" +version = "1.4.2" +description = "Appendable key-value storage" +optional = false +python-versions = ">=3.9" +files = [ + {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, + {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, +] + +[package.dependencies] +locket = "*" +toolz = "*" + +[package.extras] +complete = ["blosc", "numpy (>=1.20.0)", "pandas (>=1.3)", "pyzmq"] + [[package]] name = "pathspec" version = "0.12.1" @@ -2976,18 +3358,18 @@ files = [ [[package]] name = "pathvalidate" -version = "3.2.1" +version = "3.2.3" description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "pathvalidate-3.2.1-py3-none-any.whl", hash = "sha256:9a6255eb8f63c9e2135b9be97a5ce08f10230128c4ae7b3e935378b82b22c4c9"}, - {file = "pathvalidate-3.2.1.tar.gz", hash = "sha256:f5d07b1e2374187040612a1fcd2bcb2919f8db180df254c9581bb90bf903377d"}, + {file = "pathvalidate-3.2.3-py3-none-any.whl", hash = "sha256:5eaf0562e345d4b6d0c0239d0f690c3bd84d2a9a3c4c73b99ea667401b27bee1"}, + {file = "pathvalidate-3.2.3.tar.gz", hash = "sha256:59b5b9278e30382d6d213497623043ebe63f10e29055be4419a9c04c721739cb"}, ] [package.extras] -docs = ["Sphinx (>=2.4)", "sphinx-rtd-theme (>=1.2.2)", "urllib3 (<2)"] -readme = ["path (>=13,<17)", "readmemaker (>=1.1.0)"] +docs = ["Sphinx (>=2.4)", "sphinx_rtd_theme (>=1.2.2)", "urllib3 (<2)"] +readme = ["path (>=13,<18)", "readmemaker (>=1.2.0)"] test = ["Faker (>=1.0.8)", "allpairspy (>=2)", "click (>=6.2)", "pytest (>=6.0.1)", "pytest-md-report (>=0.6.2)"] [[package]] @@ -3004,139 +3386,119 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[package]] name = "pillow" -version = "10.4.0" +version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, - {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, - {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, - {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, - {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, - {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, - {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, - {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, - {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, - {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, - {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, - {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, - {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, - {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, - {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, - {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, - {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, - {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, - {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, - {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] typing = ["typing-extensions"] xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "plotly" -version = "5.23.0" +version = "5.24.1" description = "An open-source, interactive data visualization library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "plotly-5.23.0-py3-none-any.whl", hash = "sha256:76cbe78f75eddc10c56f5a4ee3e7ccaade7c0a57465546f02098c0caed6c2d1a"}, - {file = "plotly-5.23.0.tar.gz", hash = "sha256:89e57d003a116303a34de6700862391367dd564222ab71f8531df70279fc0193"}, + {file = "plotly-5.24.1-py3-none-any.whl", hash = "sha256:f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089"}, + {file = "plotly-5.24.1.tar.gz", hash = "sha256:dbc8ac8339d248a4bcc36e08a5659bacfe1b079390b8953533f4eb22169b4bae"}, ] [package.dependencies] @@ -3159,33 +3521,35 @@ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] -name = "portalocker" -version = "2.10.1" -description = "Wraps the portalocker recipe for easy usage" +name = "pooch" +version = "1.8.2" +description = "A friend to fetch your data files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, - {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, + {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"}, + {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"}, ] [package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} +packaging = ">=20.0" +platformdirs = ">=2.5.0" +requests = ">=2.19.0" [package.extras] -docs = ["sphinx (>=1.7.1)"] -redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] +progress = ["tqdm (>=4.41.0,<5.0.0)"] +sftp = ["paramiko (>=2.7.0)"] +xxhash = ["xxhash (>=1.4.3)"] [[package]] name = "prometheus-client" -version = "0.20.0" +version = "0.21.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, - {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, + {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, + {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, ] [package.extras] @@ -3193,83 +3557,47 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] wcwidth = "*" -[[package]] -name = "proto-plus" -version = "1.24.0" -description = "Beautiful, Pythonic protocol buffers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, - {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, -] - -[package.dependencies] -protobuf = ">=3.19.0,<6.0.0dev" - -[package.extras] -testing = ["google-api-core (>=1.31.5)"] - -[[package]] -name = "protobuf" -version = "5.28.0" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "protobuf-5.28.0-cp310-abi3-win32.whl", hash = "sha256:66c3edeedb774a3508ae70d87b3a19786445fe9a068dd3585e0cefa8a77b83d0"}, - {file = "protobuf-5.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:6d7cc9e60f976cf3e873acb9a40fed04afb5d224608ed5c1a105db4a3f09c5b6"}, - {file = "protobuf-5.28.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:532627e8fdd825cf8767a2d2b94d77e874d5ddb0adefb04b237f7cc296748681"}, - {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:018db9056b9d75eb93d12a9d35120f97a84d9a919bcab11ed56ad2d399d6e8dd"}, - {file = "protobuf-5.28.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:6206afcb2d90181ae8722798dcb56dc76675ab67458ac24c0dd7d75d632ac9bd"}, - {file = "protobuf-5.28.0-cp38-cp38-win32.whl", hash = "sha256:eef7a8a2f4318e2cb2dee8666d26e58eaf437c14788f3a2911d0c3da40405ae8"}, - {file = "protobuf-5.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:d001a73c8bc2bf5b5c1360d59dd7573744e163b3607fa92788b7f3d5fefbd9a5"}, - {file = "protobuf-5.28.0-cp39-cp39-win32.whl", hash = "sha256:dde9fcaa24e7a9654f4baf2a55250b13a5ea701493d904c54069776b99a8216b"}, - {file = "protobuf-5.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:853db610214e77ee817ecf0514e0d1d052dff7f63a0c157aa6eabae98db8a8de"}, - {file = "protobuf-5.28.0-py3-none-any.whl", hash = "sha256:510ed78cd0980f6d3218099e874714cdf0d8a95582e7b059b06cabad855ed0a0"}, - {file = "protobuf-5.28.0.tar.gz", hash = "sha256:dde74af0fa774fa98892209992295adbfb91da3fa98c8f67a88afe8f5a349add"}, -] - [[package]] name = "psutil" -version = "6.0.0" +version = "6.1.1" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, - {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, - {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, - {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, - {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, - {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, - {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, - {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, - {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, - {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, + {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, + {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, + {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, + {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, + {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, + {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, + {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, + {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, ] [package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "ptyprocess" @@ -3283,29 +3611,72 @@ files = [ ] [[package]] -name = "pyasn1" -version = "0.6.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, - {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] +[package.extras] +tests = ["pytest"] + [[package]] -name = "pyasn1-modules" -version = "0.4.0" -description = "A collection of ASN.1-based protocols modules" +name = "pyarrow" +version = "18.1.0" +description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, - {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, + {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, + {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56"}, + {file = "pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812"}, + {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854"}, + {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0"}, + {file = "pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a"}, + {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d"}, + {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30"}, + {file = "pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99"}, + {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b"}, + {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c"}, + {file = "pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181"}, + {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc"}, + {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba"}, + {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e"}, + {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7"}, + {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"}, + {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"}, ] -[package.dependencies] -pyasn1 = ">=0.4.6,<0.7.0" +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] [[package]] name = "pycparser" @@ -3320,167 +3691,190 @@ files = [ [[package]] name = "pydantic" -version = "2.8.2" +version = "2.10.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, + {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, + {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" -typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.20.1" +version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, - {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, - {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, - {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, - {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, - {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, - {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, - {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, - {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, - {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, - {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, - {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, - {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, - {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, ] [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] -name = "pygments" -version = "2.18.0" -description = "Pygments is a syntax highlighting package written in Python." +name = "pydap" +version = "3.5" +description = "A pure python implementation of the Data Access Protocol." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pydap-3.5-py3-none-any.whl", hash = "sha256:e157aefdbc26657ef531ecea73907bbf09a503499bfefada2f0ad5f3aaff4021"}, + {file = "pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab"}, ] +[package.dependencies] +beautifulsoup4 = "*" +docopt-ng = "*" +importlib-metadata = "*" +importlib-resources = "*" +Jinja2 = "*" +lxml = "*" +numpy = "*" +requests = "*" +Webob = "*" + [package.extras] -windows-terminal = ["colorama (>=0.4.6)"] +cas = ["lxml"] +docs = ["Pygments", "Sphinx", "nbsphinx", "numpydoc", "pandoc", "sphinx-rtd-theme"] +functions = ["coards", "gsw (==3.0.6)"] +handlers-netcdf = ["netCDF4"] +netcdf = ["netCDF4"] +server = ["PasteDeploy", "gunicorn"] +tests = ["WebTest", "coards", "cryptography", "flake8", "gsw", "gunicorn", "pytest (>=3.6)", "pytest-attrib", "pytest-cov", "requests-mock", "werkzeug (>=2.2.2)"] [[package]] -name = "pyjwt" -version = "2.9.0" -description = "JSON Web Token implementation in Python" +name = "pygments" +version = "2.19.1" +description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ - {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, - {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] -[package.dependencies] -cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} - [package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.10.1" +version = "10.14" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.10.1-py3-none-any.whl", hash = "sha256:6c74ea6c2e2285186a241417480fc2d3cc52941b3ec2dced4014c84dc78c5493"}, - {file = "pymdown_extensions-10.10.1.tar.gz", hash = "sha256:ad277ee4739ced051c3b6328d22ce782358a3bec39bc6ca52815ccbf44f7acdc"}, + {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, + {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, ] [package.dependencies] @@ -3488,17 +3882,17 @@ markdown = ">=3.6" pyyaml = "*" [package.extras] -extra = ["pygments (>=2.12)"] +extra = ["pygments (>=2.19.1)"] [[package]] name = "pyparsing" -version = "3.1.4" +version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.9" files = [ - {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, - {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, + {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, + {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, ] [package.extras] @@ -3506,13 +3900,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyproject-api" -version = "1.7.1" +version = "1.8.0" description = "API to interact with the python pyproject.toml based projects" optional = false python-versions = ">=3.8" files = [ - {file = "pyproject_api-1.7.1-py3-none-any.whl", hash = "sha256:2dc1654062c2b27733d8fd4cdda672b22fe8741ef1dde8e3a998a9547b071eeb"}, - {file = "pyproject_api-1.7.1.tar.gz", hash = "sha256:7ebc6cd10710f89f4cf2a2731710a98abce37ebff19427116ff2174c9236a827"}, + {file = "pyproject_api-1.8.0-py3-none-any.whl", hash = "sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228"}, + {file = "pyproject_api-1.8.0.tar.gz", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496"}, ] [package.dependencies] @@ -3520,8 +3914,8 @@ packaging = ">=24.1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2024.5.6)", "sphinx-autodoc-typehints (>=2.2.1)"] -testing = ["covdefaults (>=2.3)", "pytest (>=8.2.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=70.1)"] +docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.3.3)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=75.1)"] [[package]] name = "pyqt5" @@ -3557,32 +3951,32 @@ files = [ [[package]] name = "pyqt5-sip" -version = "12.15.0" +version = "12.16.1" description = "The sip module support for PyQt5" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "PyQt5_sip-12.15.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:749f7a3ffd6e3d2d5db65ed92c95cbd14490631595c61f0c0672c9238bfb17de"}, - {file = "PyQt5_sip-12.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b4adc529fa4ec05728e14ea55194d907cc51f18d6f2ac5cc9f6eb52ac038aa0f"}, - {file = "PyQt5_sip-12.15.0-cp310-cp310-win32.whl", hash = "sha256:83d247cdc43ef224410b14c97413067ea26356dfa39e9ed0fe702a31e25710b0"}, - {file = "PyQt5_sip-12.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:13f0c6a78e781255863e3e160304648efaf62276b7102741af637b63a6e96930"}, - {file = "PyQt5_sip-12.15.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:855563d4d3b59ce7438bbf2dd32fed2707787defa40f3efe94f204a19ef92b25"}, - {file = "PyQt5_sip-12.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b718a362f4392430903bbb2a4b9bbff9841a16a52f0cfdd5b5bbd9d11457980"}, - {file = "PyQt5_sip-12.15.0-cp311-cp311-win32.whl", hash = "sha256:2575f428de584a12009fd29d00c89df16ed101a3b38beba818dfdcbc4a10709c"}, - {file = "PyQt5_sip-12.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c85be433fbafcb3d417581c0e1b67c8198d23858166e4f938e971c2262c13cdb"}, - {file = "PyQt5_sip-12.15.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:852b75cf208825602480e95ab63314108f872d0da251e9ad3deaaff5a183a6f5"}, - {file = "PyQt5_sip-12.15.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0cd21c3215e3c47fdd5fa7a2dc3dd1e07a7230b0626e905a7217925068c788b9"}, - {file = "PyQt5_sip-12.15.0-cp312-cp312-win32.whl", hash = "sha256:b58eeedc9b2a3037b136bf96915196c391a33be470ed1c0723d7163ef0b727a2"}, - {file = "PyQt5_sip-12.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:24a1d4937332bf0a38dd95bb2ce4d89723df449f6e912b52ef0e107e11fefac1"}, - {file = "PyQt5_sip-12.15.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:91b9538458a3a23e033c213bc879ce64f3d0a33d5a49cbd03e1e584efe307a35"}, - {file = "PyQt5_sip-12.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0c1c727ede7fdc464a1fe2e46109ba836509b2d7187a46fdeae443148ce51d1c"}, - {file = "PyQt5_sip-12.15.0-cp38-cp38-win32.whl", hash = "sha256:dd241de9c569c07bbba62bff1049996e5b52478164f61f430073a87bf6d26d33"}, - {file = "PyQt5_sip-12.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:f600ae6f03e4bff91153c0dc7ebe52f90bd2b6afda58fd580e6990b3b951adc0"}, - {file = "PyQt5_sip-12.15.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c0c543d604116af26694a8a5ba90f510551ff9124d503ae5ee14bb73a61363a3"}, - {file = "PyQt5_sip-12.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:97f2d6e8d9b7b3d3e795d576d7f56e6257f524221f6383b33ded7287763e9f06"}, - {file = "PyQt5_sip-12.15.0-cp39-cp39-win32.whl", hash = "sha256:ed5221c6241981bd98d39504823efb9cbe36841bf8917288f8fe8fc1d5569a41"}, - {file = "PyQt5_sip-12.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:7f88c85702dce80ac2e1a162054f688ed394811d6dd03a5574b3fa8111b0a6db"}, - {file = "PyQt5_sip-12.15.0.tar.gz", hash = "sha256:d23fdfcf363b5cedd9d39f8a9c5710e7d52804f5b08a58e91c638b36eafcb702"}, + {file = "PyQt5_sip-12.16.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:72e8be41f053cd2338d373b70cfa8f725f05c7551e014161ae0484c7ffdb5b3d"}, + {file = "PyQt5_sip-12.16.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:389ea632df16794325652fe1a84d4ea77c7ed0240040979dada725473ad1d875"}, + {file = "PyQt5_sip-12.16.1-cp310-cp310-win32.whl", hash = "sha256:b3bfe33e849818a32164fc19346fc889a47ba8b23f803508eac9a5d9d06f59d9"}, + {file = "PyQt5_sip-12.16.1-cp310-cp310-win_amd64.whl", hash = "sha256:7fd6fbff57ba2cda32f1d5ea49500cff6f29e1cafdf41f40b99ed744bdac14a0"}, + {file = "PyQt5_sip-12.16.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09bfdb5f9adea15a542cbe4b89873a6b290c4f1669f66bb5f1a24993ce8bbdd0"}, + {file = "PyQt5_sip-12.16.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:98b99fcdebbbfc999f4ab10829749151eb371b79201ecd98f20e934c16d0193e"}, + {file = "PyQt5_sip-12.16.1-cp311-cp311-win32.whl", hash = "sha256:67dbdc1b3be045caebfc75ee87966e23c6bee61d94cb634ddd71b634c9089890"}, + {file = "PyQt5_sip-12.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:8afd633d5f35e4e5205680d310800d10d30fcbfb6bb7b852bfaa31097c1be449"}, + {file = "PyQt5_sip-12.16.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f6724c590de3d556c730ebda8b8f906b38373934472209e94d99357b52b56f5f"}, + {file = "PyQt5_sip-12.16.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:633cba509a98bd626def951bb948d4e736635acbd0b7fabd7be55a3a096a8a0b"}, + {file = "PyQt5_sip-12.16.1-cp312-cp312-win32.whl", hash = "sha256:2b35ff92caa569e540675ffcd79ffbf3e7092cccf7166f89e2a8b388db80aa1c"}, + {file = "PyQt5_sip-12.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:a0f83f554727f43dfe92afbf3a8c51e83bb8b78c5f160b635d4359fad681cebe"}, + {file = "PyQt5_sip-12.16.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2349f118dc6f01ee71fe57d8bab9e606ecf241468989abb23b5691d5538d7a69"}, + {file = "PyQt5_sip-12.16.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bbabdcc031e40417333bdd9e59d8add815c8f0663ebfcbcd3024bdeb55f35e9c"}, + {file = "PyQt5_sip-12.16.1-cp313-cp313-win32.whl", hash = "sha256:b6d06f6b49c7cd70db44277e21134390dcabb709da434d63754c9968ff6d98e2"}, + {file = "PyQt5_sip-12.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:e2bd572cfb969089c2813c85d6e1393ec1a0aeecebc53934ba9f062acf440b50"}, + {file = "PyQt5_sip-12.16.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:639d0f3767f17c9b7e2c1161a563f1a8da8dc16a348f9fc24314882c0ba57c5e"}, + {file = "PyQt5_sip-12.16.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c2b99bbd915f7649536b46be6f4740122c0ff1a76dc3dcb0c856c7cc770b3545"}, + {file = "PyQt5_sip-12.16.1-cp39-cp39-win32.whl", hash = "sha256:9f6878df5cca870cd48b406c48136842c02f7b0e2a3b7c47cb84dcddcebc5758"}, + {file = "PyQt5_sip-12.16.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffd748efbc9396a7a72de0d617acfd248c04e02dd28cd80e6bc3bf26214786e7"}, + {file = "pyqt5_sip-12.16.1.tar.gz", hash = "sha256:8c831f8b619811a32369d72339faa50ae53a963f5fdfa4d71f845c63e9673125"}, ] [[package]] @@ -3615,13 +4009,13 @@ cp2110 = ["hidapi"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] @@ -3637,17 +4031,17 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-cov" -version = "5.0.0" +version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, - {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, + {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, + {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, ] [package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} +coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] @@ -3669,35 +4063,41 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" +version = "3.2.1" +description = "JSON Log Formatter for the Python Logging Package" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, + {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"}, + {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"}, ] +[package.dependencies] +typing_extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] name = "pyvisa" -version = "1.13.0" +version = "1.14.1" description = "Python VISA bindings for GPIB, RS232, TCPIP and USB instruments" optional = false python-versions = ">=3.8" files = [ - {file = "PyVISA-1.13.0-py3-none-any.whl", hash = "sha256:805c55a514b1993dd1e0e2b18377f36fb3db6c2cd4953886144307d0c80795ce"}, - {file = "PyVISA-1.13.0.tar.gz", hash = "sha256:89fa008b58465c928655459508513c51e942ca7bf3e2a727da869366e0c8f9c6"}, + {file = "PyVISA-1.14.1-py3-none-any.whl", hash = "sha256:6e4dfc9b6029b4f00d0d4960348c4889c2747aa7f83276950d48a349eab36a45"}, + {file = "PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79"}, ] [package.dependencies] @@ -3705,40 +4105,44 @@ typing-extensions = "*" [[package]] name = "pywin32" -version = "306" +version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] [[package]] name = "pywinpty" -version = "2.0.13" +version = "2.0.14" description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, - {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, - {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, - {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, - {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, - {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, + {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, + {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, + {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"}, + {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"}, + {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"}, + {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"}, ] [[package]] @@ -3960,59 +4364,62 @@ dev = ["anybadge", "pylint (==2.17.5)", "pylint-exit", "pytest", "pytest-cov", " [[package]] name = "qcodes" -version = "0.37.0" +version = "0.46.0" description = "Python-based data acquisition framework developed by the Copenhagen / Delft / Sydney / Microsoft quantum computing consortium" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "qcodes-0.37.0-py3-none-any.whl", hash = "sha256:2e6fab6c62aa51cd3afd55ebebdaaeaf6877c9b1805fa84086f484ba06ce9249"}, - {file = "qcodes-0.37.0.tar.gz", hash = "sha256:cd1aa8ef0d2abb7b03691d5d18a19e75e523cf8849cea092f1f138a1e734c873"}, + {file = "qcodes-0.46.0-py3-none-any.whl", hash = "sha256:6c7de543ef6048d82fad755a8ef5c4e63f866085314e2fb69f1a839bb39d0eff"}, + {file = "qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99"}, ] [package.dependencies] broadbean = ">=0.9.1" +cf-xarray = ">=0.8.4" +dask = ">=2022.1.0" h5netcdf = ">=0.10.0,<0.14.0 || >0.14.0" h5py = ">=3.0.0" importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -ipython = ">=7.31.1,<8.0.0 || >8.0.0" -ipywidgets = ">=7.5.0,<9.0.0" -jsonschema = ">=3.0.0" -lazy-loader = ">=0.1" -matplotlib = ">=3.3.0" +ipykernel = ">=6.6.0" +ipython = ">=8.10.0" +ipywidgets = ">=8.0.0,<9.0.0" +jsonschema = ">=4.9.0" +matplotlib = ">=3.3.3" numpy = ">=1.21.0" -opencensus = ">=0.7.10" -opencensus-ext-azure = ">=1.0.4,<2.0.0" +opentelemetry-api = ">=1.15.0" packaging = ">=20.0" -pandas = ">=1.0.0" +pandas = ">=1.2.0" pillow = ">=9.0.0" -pyvisa = ">=1.11.0,<1.14.0" -rsa = ">=4.7" +pyarrow = ">=11.0.0" +pyvisa = ">=1.11.0,<1.15.0" "ruamel.yaml" = ">=0.16.0,<0.16.6 || >0.16.6" tabulate = ">=0.8.0" -tqdm = ">=4.32.2" -typing-extensions = ">=4.0.0" +tornado = ">=6.3.3" +tqdm = ">=4.59.0" +typing-extensions = ">=4.5.0" uncertainties = ">=3.1.4" -versioningit = ">=2.0.1" -websockets = ">=9.0" -wrapt = ">=1.10.4" -xarray = ">=0.18.0" +versioningit = ">=2.2.1" +websockets = ">=9.1" +wrapt = {version = ">=1.13.2", markers = "python_version < \"3.12\""} +xarray = ">=2022.06.0" [package.extras] -docs = ["PyQt5 (>=5.15.0)", "PyVisa-sim (>=0.4.0)", "autodocsumm (>=0.2.9)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "scipy (>=1.7.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)", "sphinx-favicon (>=0.2)", "sphinx-issues (>=3.0.1)", "sphinx-jsonschema (>=1.19.1)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-towncrier (>=0.3.0a0)", "towncrier (>=22.8.0)"] -qtplot = ["pyqtgraph (>=0.11.0)"] -slack = ["slack-sdk (>=3.4.2)"] -test = ["PyQt5 (>=5.15.0)", "PyVisa-sim (>=0.4.0)", "coverage[toml] (>=6.0.0)", "deepdiff (>=5.0.2)", "hypothesis (>=5.49.0)", "lxml (>=4.4.1)", "lxml-stubs (>=0.4.0)", "mypy (>=0.971)", "pandas-stubs (>=1.2.0.1)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-cov (>=3.0.0)", "pytest-mock (>=3.0.0)", "pytest-rerunfailures (>=10.0)", "pytest-xdist (>=2.0.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)", "types-jsonschema (>=4.16.0)", "types-requests (>=0.1.8)", "types-setuptools (>=57.0.0)", "types-tabulate (>=0.1.0)", "types-tqdm (>=4.64.6)"] +docs = ["PyVisa-sim (>=0.6.0)", "autodocsumm (>=0.2.9)", "jinja2 (>=3.1.3)", "nbsphinx (>=0.8.9)", "qcodes-loop (>=0.1.1)", "scipy (>=1.7.0)", "sphinx (>=7.3.5)", "sphinx-favicon (>=1.0)", "sphinx-issues (>=3.0.1)", "sphinx-jsonschema (>=1.19.1)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-towncrier (>=0.3.0a0)", "towncrier (>=22.8.0)"] +loop = ["qcodes-loop (>=0.1.2)"] +opencensus = ["opencensus (>=0.7.10)", "opencensus-ext-azure (>=1.0.4,<2.0.0)"] +refactor = ["libcst (>=1.2.0)"] +test = ["PyVisa-sim (>=0.6.0)", "coverage[toml] (>=6.0.0)", "deepdiff (>=5.0.2)", "hypothesis (>=6.85.0)", "jinja2 (>=3.1.3)", "libcst (>=1.2.0)", "lxml (>=4.6.0)", "lxml-stubs (>=0.4.0)", "mypy (>=0.971)", "pandas-stubs (>=1.2.0.1)", "pytest (>=7.2.0)", "pytest-asyncio (>=0.19.0)", "pytest-cov (>=3.0.0)", "pytest-mock (>=3.0.0)", "pytest-rerunfailures (>=10.0)", "pytest-xdist (>=2.0.0)", "qcodes-loop (>=0.1.1)", "sphinx (>=4.5.0)", "types-jsonschema (>=4.16.0)", "types-pywin32 (>=305.0.0.7)", "types-requests (>=0.1.8)", "types-setuptools (>=57.0.0)", "types-tabulate (>=0.1.0)", "types-tqdm (>=4.64.6)", "zhinst.qcodes (>=0.5)"] zurichinstruments = ["zhinst-qcodes (>=0.3)"] [[package]] name = "qcodes-loop" -version = "0.1.2" +version = "0.1.3" description = "Features previously in QCoDeS" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "qcodes_loop-0.1.2-py3-none-any.whl", hash = "sha256:0e46b0f474f518935b38374d050920de88c15c632b7ae873171d512b9b2c75c0"}, - {file = "qcodes_loop-0.1.2.tar.gz", hash = "sha256:4e2ccd482e3d9f85dcd81989373880465557610c69fcbb7098aa60a90910ddaf"}, + {file = "qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a"}, + {file = "qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c"}, ] [package.dependencies] @@ -4023,25 +4430,25 @@ lazy-loader = ">=0.1" matplotlib = ">=3.3.0" numpy = ">=1.21.0" pandas = ">=1.0.0" -qcodes = "*" -versioningit = ">=2.0.1" +qcodes = ">=0.42.0" +versioningit = ">=2.2.1" xarray = ">=0.18.0" [package.extras] -docs = ["PyQt5 (>=5.15.0)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0)"] +docs = ["PyQt5 (>=5.15.0)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "requests", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0,<9.0.0)", "urllib3"] qtplot = ["pyqtgraph (>=0.11.0)"] -slack = ["slack-sdk (>=3.4.2)"] -test = ["PyQt5 (>=5.15.0)", "coverage[toml] (>=6.0.0)", "hypothesis (>=5.49.0)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-mock (>=3.0.0)", "pytest-xdist (>=2.0.0)", "slack-sdk (>=3.4.2)"] +slack = ["requests", "slack-sdk (>=3.4.2)", "urllib3"] +test = ["PyQt5 (>=5.15.0)", "coverage[toml] (>=6.0.0)", "hypothesis (>=5.49.0)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-mock (>=3.0.0)", "pytest-xdist (>=2.0.0)", "requests", "slack-sdk (>=3.4.2)", "urllib3"] [[package]] name = "quantify-core" -version = "0.7.5" +version = "0.7.9" description = "Quantify-core is a unified quantum computing, solid-state and pulse sequencing physical experimentation framework." optional = false python-versions = ">=3.8" files = [ - {file = "quantify-core-0.7.5.tar.gz", hash = "sha256:f8743d3cc2ca7f97386653b95d61da10846177fb42048bfab15d7ab10316053d"}, - {file = "quantify_core-0.7.5-py3-none-any.whl", hash = "sha256:f116dd8375bcad2e34945a023d2f5e618f6b6d07212fbf0b14234083e638af38"}, + {file = "quantify_core-0.7.9-py3-none-any.whl", hash = "sha256:9aa4277371058a114d422e0c398efea6fc21024ce89573589d386ef2848d4291"}, + {file = "quantify_core-0.7.9.tar.gz", hash = "sha256:bc0aabe3317577a9bf0d499fc4ac9ae1fcf63e18d0637fe18940e2fe18250f49"}, ] [package.dependencies] @@ -4061,14 +4468,16 @@ pyqt5 = ">5.15.2" pyqtgraph = "*" qcodes = ">=0.37.0" qcodes-loop = "*" +scikit-learn = "*" scipy = ">=1.5.0,<1.6.0 || >1.6.0" +typing-extensions = "*" uncertainties = "*" -xarray = ">=0.19.0" +xarray = {version = ">=0.19.0", extras = ["io"]} [package.extras] dev = ["black", "nbstripout", "pre-commit", "pre-commit-hooks", "pylint", "pyright", "pytest-cov", "pytest-xdist", "quantify-core[docs,test]", "ruff", "scikit-optimize", "sphinx-autobuild"] docs = ["jupyter-sphinx (>=0.4.0)", "myst-nb", "pydata-sphinx-theme", "rich[jupyter]", "scanpydoc", "sphinx", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema (>=1.15)", "sphinx-togglebutton", "sphinxcontrib-bibtex"] -test = ["pytest", "pytest-mock"] +test = ["diff-cover", "pytest", "pytest-mock", "pytest-mpl"] [[package]] name = "quantify-scheduler" @@ -4125,90 +4534,105 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.7.24" +version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, - {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, - {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, - {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, - {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, - {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, - {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, - {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, - {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, - {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, - {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, - {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, - {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, - {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] @@ -4259,158 +4683,145 @@ files = [ [[package]] name = "rich" -version = "13.8.0" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, - {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] ipywidgets = {version = ">=7.5.1,<9", optional = true, markers = "extra == \"jupyter\""} markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.20.0" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, -] - -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -optional = false -python-versions = ">=3.6,<4" -files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] -[package.dependencies] -pyasn1 = ">=0.1.3" - [[package]] name = "ruamel-yaml" -version = "0.18.6" +version = "0.18.10" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" files = [ - {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, - {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, + {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, + {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, ] [package.dependencies] @@ -4422,88 +4833,84 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" -version = "0.2.8" +version = "0.2.12" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, + {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, ] [[package]] name = "ruff" -version = "0.5.7" +version = "0.6.9" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, - {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, - {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, - {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, - {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, - {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, - {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, + {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, + {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, + {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, + {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, + {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, + {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, + {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, ] [[package]] @@ -4517,6 +4924,60 @@ files = [ {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, ] +[[package]] +name = "scikit-learn" +version = "1.6.0" +description = "A set of python modules for machine learning and data mining" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"}, + {file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"}, + {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7a579606c73a0b3d210e33ea410ea9e1af7933fe324cb7e6fbafae4ea5948"}, + {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46d3ca0f11a540b8eaddaf5e38172d8cd65a86cb3e3632161ec96c0cffb774c"}, + {file = "scikit_learn-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be4577769c5dde6e1b53de8e6520f9b664ab5861dd57acee47ad119fd7405d6"}, + {file = "scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285"}, + {file = "scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b"}, + {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a"}, + {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c716d13ba0a2f8762d96ff78d3e0cde90bc9c9b5c13d6ab6bb9b2d6ca6705fd"}, + {file = "scikit_learn-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aafd94bafc841b626681e626be27bf1233d5a0f20f0a6fdb4bee1a1963c6643"}, + {file = "scikit_learn-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:04a5ba45c12a5ff81518aa4f1604e826a45d20e53da47b15871526cda4ff5174"}, + {file = "scikit_learn-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:21fadfc2ad7a1ce8bd1d90f23d17875b84ec765eecbbfc924ff11fb73db582ce"}, + {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30f34bb5fde90e020653bb84dcb38b6c83f90c70680dbd8c38bd9becbad7a127"}, + {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dad624cffe3062276a0881d4e441bc9e3b19d02d17757cd6ae79a9d192a0027"}, + {file = "scikit_learn-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fce7950a3fad85e0a61dc403df0f9345b53432ac0e47c50da210d22c60b6d85"}, + {file = "scikit_learn-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5453b2e87ef8accedc5a8a4e6709f887ca01896cd7cc8a174fe39bd4bb00aef"}, + {file = "scikit_learn-1.6.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5fe11794236fb83bead2af26a87ced5d26e3370b8487430818b915dafab1724e"}, + {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61fe3dcec0d82ae280877a818ab652f4988371e32dd5451e75251bece79668b1"}, + {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44e3a51e181933bdf9a4953cc69c6025b40d2b49e238233f149b98849beb4bf"}, + {file = "scikit_learn-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:a17860a562bac54384454d40b3f6155200c1c737c9399e6a97962c63fce503ac"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:98717d3c152f6842d36a70f21e1468fb2f1a2f8f2624d9a3f382211798516426"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:34e20bfac8ff0ebe0ff20fb16a4d6df5dc4cc9ce383e00c2ab67a526a3c67b18"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba06d75815406091419e06dd650b91ebd1c5f836392a0d833ff36447c2b1bfa"}, + {file = "scikit_learn-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b6916d1cec1ff163c7d281e699d7a6a709da2f2c5ec7b10547e08cc788ddd3ae"}, + {file = "scikit_learn-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66b1cf721a9f07f518eb545098226796c399c64abdcbf91c2b95d625068363da"}, + {file = "scikit_learn-1.6.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b35b60cf4cd6564b636e4a40516b3c61a4fa7a8b1f7a3ce80c38ebe04750bc3"}, + {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a73b1c2038c93bc7f4bf21f6c9828d5116c5d2268f7a20cfbbd41d3074d52083"}, + {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c3fa7d3dd5a0ec2d0baba0d644916fa2ab180ee37850c5d536245df916946bd"}, + {file = "scikit_learn-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:df778486a32518cda33818b7e3ce48c78cef1d5f640a6bc9d97c6d2e71449a51"}, + {file = "scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e"}, +] + +[package.dependencies] +joblib = ">=1.2.0" +numpy = ">=1.19.5" +scipy = ">=1.6.0" +threadpoolctl = ">=3.1.0" + +[package.extras] +benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] +build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] +examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] +install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] +maintenance = ["conda-lock (==2.5.6)"] +tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.5.1)", "scikit-image (>=0.17.2)"] + [[package]] name = "scipy" version = "1.13.1" @@ -4577,33 +5038,33 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "74.0.0" +version = "75.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, - {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, + {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, + {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -4655,19 +5116,38 @@ files = [ [[package]] name = "spirack" -version = "0.2.4" +version = "0.2.5" description = "Drivers for the QuTech SPI-rack" optional = false python-versions = "*" files = [ - {file = "spirack-0.2.4-py3-none-any.whl", hash = "sha256:216188eadfe3daee503c7c67a0a0d7ab334e20fcd0d2226b15a31f5d1cf420e0"}, - {file = "spirack-0.2.4.tar.gz", hash = "sha256:06a84771ac783265af9cf08052394fe3e61b74ea81f6b5f6e8cb8bc898e2a610"}, + {file = "spirack-0.2.5-py3-none-any.whl", hash = "sha256:ac144f0e43c7770281b08836f83c6f68369354397fd1394bb18a87af02d17b85"}, + {file = "spirack-0.2.5.tar.gz", hash = "sha256:c1755286a3d851dd84e0d3e3021383a516748edd4b90a56ddbe7e446b0e1ec30"}, ] [package.dependencies] numpy = "*" pyserial = "*" +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "sympy" version = "1.13.3" @@ -4735,15 +5215,26 @@ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] +[[package]] +name = "threadpoolctl" +version = "3.5.0" +description = "threadpoolctl" +optional = false +python-versions = ">=3.8" +files = [ + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, +] + [[package]] name = "tinycss2" -version = "1.3.0" +version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" files = [ - {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, - {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, ] [package.dependencies] @@ -4755,89 +5246,120 @@ test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] name = "toolz" -version = "0.12.1" +version = "1.0.0" description = "List processing tools and functional utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"}, - {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, + {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, + {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, ] [[package]] name = "tornado" -version = "6.4.1" +version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" files = [ - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, - {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, - {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, - {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] [[package]] name = "tox" -version = "4.20.0" +version = "4.23.2" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.8" files = [ - {file = "tox-4.20.0-py3-none-any.whl", hash = "sha256:21a8005e3d3fe5658a8e36b8ca3ed13a4230429063c5cc2a2fdac6ee5aa0de34"}, - {file = "tox-4.20.0.tar.gz", hash = "sha256:5b78a49b6eaaeab3ae4186415e7c97d524f762ae967c63562687c3e5f0ec23d5"}, + {file = "tox-4.23.2-py3-none-any.whl", hash = "sha256:452bc32bb031f2282881a2118923176445bac783ab97c874b8770ab4c3b76c38"}, + {file = "tox-4.23.2.tar.gz", hash = "sha256:86075e00e555df6e82e74cfc333917f91ecb47ffbc868dcafbd2672e332f4a2c"}, ] [package.dependencies] cachetools = ">=5.5" chardet = ">=5.2" colorama = ">=0.4.6" -filelock = ">=3.15.4" +filelock = ">=3.16.1" packaging = ">=24.1" -platformdirs = ">=4.2.2" +platformdirs = ">=4.3.6" pluggy = ">=1.5" -pyproject-api = ">=1.7.1" +pyproject-api = ">=1.8" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -virtualenv = ">=20.26.3" +typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} +virtualenv = ">=20.26.6" [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-argparse-cli (>=1.17)", "sphinx-autodoc-typehints (>=2.4)", "sphinx-copybutton (>=0.5.2)", "sphinx-inline-tabs (>=2023.4.21)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=24.8)"] -testing = ["build[virtualenv] (>=1.2.2)", "covdefaults (>=2.3)", "detect-test-pollution (>=1.2)", "devpi-process (>=1)", "diff-cover (>=9.1.1)", "distlib (>=0.3.8)", "flaky (>=3.8.1)", "hatch-vcs (>=0.4)", "hatchling (>=1.25)", "psutil (>=6)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-xdist (>=3.6.1)", "re-assert (>=1.1)", "setuptools (>=74.1.2)", "time-machine (>=2.15)", "wheel (>=0.44)"] +test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] [[package]] name = "tqdm" -version = "4.66.5" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -4859,13 +5381,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-python-dateutil" -version = "2.9.0.20240821" +version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, - {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, ] [[package]] @@ -4896,13 +5418,13 @@ typing-extensions = ">=3.7.4" [[package]] name = "tzdata" -version = "2024.1" +version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] [[package]] @@ -4938,13 +5460,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.2.2" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -4971,13 +5493,13 @@ tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} [[package]] name = "virtualenv" -version = "20.26.3" +version = "20.28.1" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, - {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, + {file = "virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb"}, + {file = "virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329"}, ] [package.dependencies] @@ -4991,41 +5513,41 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "5.0.0" +version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" files = [ - {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3216ec994eabb2212df9861f19056ca0d4cd3516d56cb95801933876519bfe"}, - {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb59ad83a1700304fc1ac7bc53ae9e5cbe9d60a52ed9bba8e2e2d782a201bb2b"}, - {file = "watchdog-5.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1228cb097e855d1798b550be8f0e9f0cfbac4384f9a3e91f66d250d03e11294e"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3c177085c3d210d1c73cb4569442bdaef706ebebc423bd7aed9e90fc12b2e553"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01ab36cddc836a0f202c66267daaef92ba5c17c7d6436deff0587bb61234c5c9"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0834c21efa3e767849b09e667274604c7cdfe30b49eb95d794565c53f4db3c1e"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1e26f570dd7f5178656affb24d6f0e22ce66c8daf88d4061a27bfb9ac866b40d"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d146331e6b206baa9f6dd40f72b5783ad2302c240df68e7fce196d30588ccf7b"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c96b1706430839872a3e33b9370ee3f7a0079f6b828129d88498ad1f96a0f45"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:663b096368ed7831ac42259919fdb9e0a1f0a8994d972675dfbcca0225e74de1"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:685931412978d00a91a193d9018fc9e394e565e8e7a0c275512a80e59c6e85f8"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:109daafc5b0f2a98d1fa9475ff9737eb3559d57b18129a36495e20c71de0b44f"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c2b4d90962639ae7cee371ea3a8da506831945d4418eee090c53bc38e6648dc6"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e58eafe9cc5ceebe1562cdb89bacdcd0ef470896e8b0139fe677a5abec243da"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8d747bf6d8fe5ce89cb1a36c3724d1599bd4cde3f90fcba518e6260c7058a52"}, - {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bc16d448a74a929b896ed9578c25756b2125400b19b3258be8d9a681c7ae8e71"}, - {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e6b0e9b8a9dc3865d65888b5f5222da4ba9c4e09eab13cff5e305e7b7e7248f"}, - {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4fe6780915000743074236b21b6c37419aea71112af62237881bc265589fe463"}, - {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0710e9502727f688a7e06d48078545c54485b3d6eb53b171810879d8223c362a"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d76efab5248aafbf8a2c2a63cd7b9545e6b346ad1397af8b862a3bb3140787d8"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:ff4e957c45c446de34c513eadce01d0b65da7eee47c01dce472dd136124552c9"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:16c1aa3377bb1f82c5e24277fcbf4e2cac3c4ce46aaaf7212d53caa9076eb7b7"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:22fcad6168fc43cf0e709bd854be5b8edbb0b260f0a6f28f1ea9baa53c6907f7"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:0120b2fa65732797ffa65fa8ee5540c288aa861d91447df298626d6385a24658"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2aa59fab7ff75281778c649557275ca3085eccbdf825a0e2a5ca3810e977afe5"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:78db0fe0336958fc0e1269545c980b6f33d04d184ba191b2800a8b71d3e971a9"}, - {file = "watchdog-5.0.0-py3-none-win32.whl", hash = "sha256:d1acef802916083f2ad7988efc7decf07e46e266916c0a09d8fb9d387288ea12"}, - {file = "watchdog-5.0.0-py3-none-win_amd64.whl", hash = "sha256:3c2d50fdb86aa6df3973313272f5a17eb26eab29ff5a0bf54b6d34597b4dc4e4"}, - {file = "watchdog-5.0.0-py3-none-win_ia64.whl", hash = "sha256:1d17ec7e022c34fa7ddc72aa41bf28c9d1207ffb193df18ba4f6fde453725b3c"}, - {file = "watchdog-5.0.0.tar.gz", hash = "sha256:990aedb9e2f336b45a70aed9c014450e7c4a70fd99c5f5b1834d57e1453a177e"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, ] [package.extras] @@ -5044,19 +5566,15 @@ files = [ [[package]] name = "webcolors" -version = "24.8.0" +version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, - {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, ] -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["coverage[toml]"] - [[package]] name = "webencodings" version = "0.5.1" @@ -5068,6 +5586,21 @@ files = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] +[[package]] +name = "webob" +version = "1.8.9" +description = "WSGI request and response object" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9"}, + {file = "webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589"}, +] + +[package.extras] +docs = ["Sphinx (>=1.7.5)", "pylons-sphinx-themes"] +testing = ["coverage", "pytest (>=3.1.0)", "pytest-cov", "pytest-xdist"] + [[package]] name = "websocket-client" version = "1.8.0" @@ -5086,97 +5619,80 @@ test = ["websockets"] [[package]] name = "websockets" -version = "13.0.1" +version = "14.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1841c9082a3ba4a05ea824cf6d99570a6a2d8849ef0db16e9c826acb28089e8f"}, - {file = "websockets-13.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c5870b4a11b77e4caa3937142b650fbbc0914a3e07a0cf3131f35c0587489c1c"}, - {file = "websockets-13.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f1d3d1f2eb79fe7b0fb02e599b2bf76a7619c79300fc55f0b5e2d382881d4f7f"}, - {file = "websockets-13.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15c7d62ee071fa94a2fc52c2b472fed4af258d43f9030479d9c4a2de885fd543"}, - {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6724b554b70d6195ba19650fef5759ef11346f946c07dbbe390e039bcaa7cc3d"}, - {file = "websockets-13.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a952fa2ae57a42ba7951e6b2605e08a24801a4931b5644dfc68939e041bc7f"}, - {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:17118647c0ea14796364299e942c330d72acc4b248e07e639d34b75067b3cdd8"}, - {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64a11aae1de4c178fa653b07d90f2fb1a2ed31919a5ea2361a38760192e1858b"}, - {file = "websockets-13.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0617fd0b1d14309c7eab6ba5deae8a7179959861846cbc5cb528a7531c249448"}, - {file = "websockets-13.0.1-cp310-cp310-win32.whl", hash = "sha256:11f9976ecbc530248cf162e359a92f37b7b282de88d1d194f2167b5e7ad80ce3"}, - {file = "websockets-13.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c3c493d0e5141ec055a7d6809a28ac2b88d5b878bb22df8c621ebe79a61123d0"}, - {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:699ba9dd6a926f82a277063603fc8d586b89f4cb128efc353b749b641fcddda7"}, - {file = "websockets-13.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf2fae6d85e5dc384bf846f8243ddaa9197f3a1a70044f59399af001fd1f51d4"}, - {file = "websockets-13.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:52aed6ef21a0f1a2a5e310fb5c42d7555e9c5855476bbd7173c3aa3d8a0302f2"}, - {file = "websockets-13.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8eb2b9a318542153674c6e377eb8cb9ca0fc011c04475110d3477862f15d29f0"}, - {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5df891c86fe68b2c38da55b7aea7095beca105933c697d719f3f45f4220a5e0e"}, - {file = "websockets-13.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac2d146ff30d9dd2fcf917e5d147db037a5c573f0446c564f16f1f94cf87462"}, - {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b8ac5b46fd798bbbf2ac6620e0437c36a202b08e1f827832c4bf050da081b501"}, - {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:46af561eba6f9b0848b2c9d2427086cabadf14e0abdd9fde9d72d447df268418"}, - {file = "websockets-13.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b5a06d7f60bc2fc378a333978470dfc4e1415ee52f5f0fce4f7853eb10c1e9df"}, - {file = "websockets-13.0.1-cp311-cp311-win32.whl", hash = "sha256:556e70e4f69be1082e6ef26dcb70efcd08d1850f5d6c5f4f2bcb4e397e68f01f"}, - {file = "websockets-13.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:67494e95d6565bf395476e9d040037ff69c8b3fa356a886b21d8422ad86ae075"}, - {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f9c9e258e3d5efe199ec23903f5da0eeaad58cf6fccb3547b74fd4750e5ac47a"}, - {file = "websockets-13.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6b41a1b3b561f1cba8321fb32987552a024a8f67f0d05f06fcf29f0090a1b956"}, - {file = "websockets-13.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f73e676a46b0fe9426612ce8caeca54c9073191a77c3e9d5c94697aef99296af"}, - {file = "websockets-13.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f613289f4a94142f914aafad6c6c87903de78eae1e140fa769a7385fb232fdf"}, - {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f52504023b1480d458adf496dc1c9e9811df4ba4752f0bc1f89ae92f4f07d0c"}, - {file = "websockets-13.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:139add0f98206cb74109faf3611b7783ceafc928529c62b389917a037d4cfdf4"}, - {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47236c13be337ef36546004ce8c5580f4b1150d9538b27bf8a5ad8edf23ccfab"}, - {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c44ca9ade59b2e376612df34e837013e2b273e6c92d7ed6636d0556b6f4db93d"}, - {file = "websockets-13.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9bbc525f4be3e51b89b2a700f5746c2a6907d2e2ef4513a8daafc98198b92237"}, - {file = "websockets-13.0.1-cp312-cp312-win32.whl", hash = "sha256:3624fd8664f2577cf8de996db3250662e259bfbc870dd8ebdcf5d7c6ac0b5185"}, - {file = "websockets-13.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0513c727fb8adffa6d9bf4a4463b2bade0186cbd8c3604ae5540fae18a90cb99"}, - {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1ee4cc030a4bdab482a37462dbf3ffb7e09334d01dd37d1063be1136a0d825fa"}, - {file = "websockets-13.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dbb0b697cc0655719522406c059eae233abaa3243821cfdfab1215d02ac10231"}, - {file = "websockets-13.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:acbebec8cb3d4df6e2488fbf34702cbc37fc39ac7abf9449392cefb3305562e9"}, - {file = "websockets-13.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63848cdb6fcc0bf09d4a155464c46c64ffdb5807ede4fb251da2c2692559ce75"}, - {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:872afa52a9f4c414d6955c365b6588bc4401272c629ff8321a55f44e3f62b553"}, - {file = "websockets-13.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e70fec7c54aad4d71eae8e8cab50525e899791fc389ec6f77b95312e4e9920"}, - {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e82db3756ccb66266504f5a3de05ac6b32f287faacff72462612120074103329"}, - {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4e85f46ce287f5c52438bb3703d86162263afccf034a5ef13dbe4318e98d86e7"}, - {file = "websockets-13.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3fea72e4e6edb983908f0db373ae0732b275628901d909c382aae3b592589f2"}, - {file = "websockets-13.0.1-cp313-cp313-win32.whl", hash = "sha256:254ecf35572fca01a9f789a1d0f543898e222f7b69ecd7d5381d8d8047627bdb"}, - {file = "websockets-13.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca48914cdd9f2ccd94deab5bcb5ac98025a5ddce98881e5cce762854a5de330b"}, - {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b74593e9acf18ea5469c3edaa6b27fa7ecf97b30e9dabd5a94c4c940637ab96e"}, - {file = "websockets-13.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:132511bfd42e77d152c919147078460c88a795af16b50e42a0bd14f0ad71ddd2"}, - {file = "websockets-13.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:165bedf13556f985a2aa064309baa01462aa79bf6112fbd068ae38993a0e1f1b"}, - {file = "websockets-13.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e801ca2f448850685417d723ec70298feff3ce4ff687c6f20922c7474b4746ae"}, - {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30d3a1f041360f029765d8704eae606781e673e8918e6b2c792e0775de51352f"}, - {file = "websockets-13.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67648f5e50231b5a7f6d83b32f9c525e319f0ddc841be0de64f24928cd75a603"}, - {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4f0426d51c8f0926a4879390f53c7f5a855e42d68df95fff6032c82c888b5f36"}, - {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ef48e4137e8799998a343706531e656fdec6797b80efd029117edacb74b0a10a"}, - {file = "websockets-13.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:249aab278810bee585cd0d4de2f08cfd67eed4fc75bde623be163798ed4db2eb"}, - {file = "websockets-13.0.1-cp38-cp38-win32.whl", hash = "sha256:06c0a667e466fcb56a0886d924b5f29a7f0886199102f0a0e1c60a02a3751cb4"}, - {file = "websockets-13.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1f3cf6d6ec1142412d4535adabc6bd72a63f5f148c43fe559f06298bc21953c9"}, - {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1fa082ea38d5de51dd409434edc27c0dcbd5fed2b09b9be982deb6f0508d25bc"}, - {file = "websockets-13.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a365bcb7be554e6e1f9f3ed64016e67e2fa03d7b027a33e436aecf194febb63"}, - {file = "websockets-13.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10a0dc7242215d794fb1918f69c6bb235f1f627aaf19e77f05336d147fce7c37"}, - {file = "websockets-13.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59197afd478545b1f73367620407b0083303569c5f2d043afe5363676f2697c9"}, - {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d20516990d8ad557b5abeb48127b8b779b0b7e6771a265fa3e91767596d7d97"}, - {file = "websockets-13.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1a2e272d067030048e1fe41aa1ec8cfbbaabce733b3d634304fa2b19e5c897f"}, - {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ad327ac80ba7ee61da85383ca8822ff808ab5ada0e4a030d66703cc025b021c4"}, - {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:518f90e6dd089d34eaade01101fd8a990921c3ba18ebbe9b0165b46ebff947f0"}, - {file = "websockets-13.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:68264802399aed6fe9652e89761031acc734fc4c653137a5911c2bfa995d6d6d"}, - {file = "websockets-13.0.1-cp39-cp39-win32.whl", hash = "sha256:a5dc0c42ded1557cc7c3f0240b24129aefbad88af4f09346164349391dea8e58"}, - {file = "websockets-13.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b448a0690ef43db5ef31b3a0d9aea79043882b4632cfc3eaab20105edecf6097"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:faef9ec6354fe4f9a2c0bbb52fb1ff852effc897e2a4501e25eb3a47cb0a4f89"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:03d3f9ba172e0a53e37fa4e636b86cc60c3ab2cfee4935e66ed1d7acaa4625ad"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d450f5a7a35662a9b91a64aefa852f0c0308ee256122f5218a42f1d13577d71e"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f55b36d17ac50aa8a171b771e15fbe1561217510c8768af3d546f56c7576cdc"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14b9c006cac63772b31abbcd3e3abb6228233eec966bf062e89e7fa7ae0b7333"}, - {file = "websockets-13.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b79915a1179a91f6c5f04ece1e592e2e8a6bd245a0e45d12fd56b2b59e559a32"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f40de079779acbcdbb6ed4c65af9f018f8b77c5ec4e17a4b737c05c2db554491"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80e4ba642fc87fa532bac07e5ed7e19d56940b6af6a8c61d4429be48718a380f"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a02b0161c43cc9e0232711eff846569fad6ec836a7acab16b3cf97b2344c060"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6aa74a45d4cdc028561a7d6ab3272c8b3018e23723100b12e58be9dfa5a24491"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00fd961943b6c10ee6f0b1130753e50ac5dcd906130dcd77b0003c3ab797d026"}, - {file = "websockets-13.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d93572720d781331fb10d3da9ca1067817d84ad1e7c31466e9f5e59965618096"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:71e6e5a3a3728886caee9ab8752e8113670936a193284be9d6ad2176a137f376"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c4a6343e3b0714e80da0b0893543bf9a5b5fa71b846ae640e56e9abc6fbc4c83"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a678532018e435396e37422a95e3ab87f75028ac79570ad11f5bf23cd2a7d8c"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6716c087e4aa0b9260c4e579bb82e068f84faddb9bfba9906cb87726fa2e870"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33505534f3f673270dd67f81e73550b11de5b538c56fe04435d63c02c3f26b5"}, - {file = "websockets-13.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acab3539a027a85d568c2573291e864333ec9d912675107d6efceb7e2be5d980"}, - {file = "websockets-13.0.1-py3-none-any.whl", hash = "sha256:b80f0c51681c517604152eb6a572f5a9378f877763231fddb883ba2f968e8817"}, - {file = "websockets-13.0.1.tar.gz", hash = "sha256:4d6ece65099411cfd9a48d13701d7438d9c34f479046b34c50ff60bb8834e43e"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, + {file = "websockets-14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434"}, + {file = "websockets-14.1-cp310-cp310-win32.whl", hash = "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10"}, + {file = "websockets-14.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac"}, + {file = "websockets-14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23"}, + {file = "websockets-14.1-cp311-cp311-win32.whl", hash = "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e"}, + {file = "websockets-14.1-cp311-cp311-win_amd64.whl", hash = "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d"}, + {file = "websockets-14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05"}, + {file = "websockets-14.1-cp312-cp312-win32.whl", hash = "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0"}, + {file = "websockets-14.1-cp312-cp312-win_amd64.whl", hash = "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b"}, + {file = "websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a"}, + {file = "websockets-14.1-cp313-cp313-win32.whl", hash = "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6"}, + {file = "websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6"}, + {file = "websockets-14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc"}, + {file = "websockets-14.1-cp39-cp39-win32.whl", hash = "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4"}, + {file = "websockets-14.1-cp39-cp39-win_amd64.whl", hash = "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7"}, + {file = "websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1"}, + {file = "websockets-14.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5"}, + {file = "websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e"}, + {file = "websockets-14.1.tar.gz", hash = "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8"}, ] [[package]] @@ -5192,13 +5708,13 @@ files = [ [[package]] name = "wirerope" -version = "0.4.7" +version = "0.4.8" description = "'Turn functions and methods into fully controllable objects'" optional = false python-versions = "*" files = [ - {file = "wirerope-0.4.7-py2.py3-none-any.whl", hash = "sha256:332973a3be6898f02fd0e73b2e20414c5102cc6c811d75856a938206677495c8"}, - {file = "wirerope-0.4.7.tar.gz", hash = "sha256:f3961039218276283c5037da0fa164619def0327595f10892d562a61a8603990"}, + {file = "wirerope-0.4.8-py2.py3-none-any.whl", hash = "sha256:99e54b9bd9d3a8e18199b87e2c5edf58d7f64e3f7e2f5bb041034025f03a4e68"}, + {file = "wirerope-0.4.8.tar.gz", hash = "sha256:fa172d09eff7534563f315e38712b5fa3b88a1aa3467b539a7510f2e427a7af4"}, ] [package.dependencies] @@ -5206,85 +5722,80 @@ six = ">=1.11.0" [package.extras] doc = ["sphinx"] -test = ["pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] +test = ["pytest (>=4.6.7)", "pytest-checkdocs (>=1.2.5)", "pytest-checkdocs (>=2.9.0)", "pytest-cov (>=2.6.1)"] [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, + {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, + {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, + {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, + {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, + {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, + {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, + {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, + {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, + {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, + {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, + {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, + {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, + {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, + {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, + {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, + {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, + {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, + {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, + {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, + {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, + {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, + {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, + {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] [[package]] @@ -5299,9 +5810,17 @@ files = [ ] [package.dependencies] +cftime = {version = "*", optional = true, markers = "extra == \"io\""} +fsspec = {version = "*", optional = true, markers = "extra == \"io\""} +h5netcdf = {version = "*", optional = true, markers = "extra == \"io\""} +netCDF4 = {version = "*", optional = true, markers = "extra == \"io\""} numpy = ">=1.23" packaging = ">=23.1" pandas = ">=2.0" +pooch = {version = "*", optional = true, markers = "extra == \"io\""} +pydap = {version = "*", optional = true, markers = "python_version < \"3.10\" and extra == \"io\""} +scipy = {version = "*", optional = true, markers = "extra == \"io\""} +zarr = {version = "*", optional = true, markers = "extra == \"io\""} [package.extras] accel = ["bottleneck", "flox", "numbagg", "opt-einsum", "scipy"] @@ -5443,6 +5962,27 @@ files = [ {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, ] +[[package]] +name = "zarr" +version = "2.18.2" +description = "An implementation of chunked, compressed, N-dimensional arrays for Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38"}, + {file = "zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47"}, +] + +[package.dependencies] +asciitree = "*" +fasteners = {version = "*", markers = "sys_platform != \"emscripten\""} +numcodecs = ">=0.10.0" +numpy = ">=1.23" + +[package.extras] +docs = ["numcodecs[msgpack]", "numpydoc", "pydata-sphinx-theme", "sphinx", "sphinx-automodapi", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +jupyter = ["ipytree (>=0.2.2)", "ipywidgets (>=8.0.0)", "notebook"] + [[package]] name = "zhinst" version = "21.8.20515" @@ -5510,13 +6050,13 @@ zhinst = ">=20.01" [[package]] name = "zipp" -version = "3.20.1" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, - {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] @@ -5530,4 +6070,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "de0d26bb8808d4ad0848d4b743e7ab1a3796d703fa8455f918ba247a5bd797b4" +content-hash = "55f8af08f29ff5940544e0a265cf98cdda37e30f47a91db824bcab877177240e" diff --git a/pyproject.toml b/pyproject.toml index d4d4c478..0b29e91d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,28 +30,28 @@ packages = [ [tool.poetry.dependencies] python = "^3.9" numpy = [ - { version = "1.24", python = "<3.9" }, - { version = ">=1.26", python = "^3.9" }, + { version = "^1.26", python = "<3.10" }, + { version = "^2.0", python = "^3.10" }, ] -libqasm = "0.6.7" +libqasm = "0.6.9" networkx = "^3.0.0" [tool.poetry.group.dev.dependencies] coverage = {extras = ["toml"], version = "^7.3.2"} pytest = {extras = ["toml"], version = ">=7.4.3,<9.0.0"} -pytest-cov = ">=4.1,<6.0" +pytest-cov = ">=4.1,<7.0" mypy = "^1.7.0" -ruff = "^0.5.0" +ruff = ">=0.5,<0.7" tox = "^4.16.0" sympy = "^1.13.1" -IPython = "^7.12.0" +IPython = ">=7.12,<9.0" [tool.poetry.group.docs] optional = true [tool.poetry.group.docs.dependencies] mkdocs = {extras = ["python"], version = "^1.5.3"} -mkdocstrings = {extras = ["python"], version = ">=0.24,<0.27"} +mkdocstrings = {extras = ["python"], version = ">=0.24,<0.28"} mkdocs_gen_files = {extras = ["python"], version = "^0.5.0"} mkdocs-material = "^9.4.12" mkdocs-literate-nav = "^0.6.1" @@ -104,6 +104,7 @@ line-length = 120 target-version = "py39" [tool.ruff.lint] +preview = true select = [ "A", # flake8-builtins "ANN", # flake8-annotations @@ -129,7 +130,7 @@ select = [ "ISC", # flake8-implicit-str-concat "ICN", # flake8-import-conventions "LOG", # flake8-logging - #"N", # pep8-naming + "N", # pep8-naming "NPY", # NumPy-specific rules "PD", # pandas-vet "PERF", # Perflint @@ -139,6 +140,7 @@ select = [ "FURB", # refurb "RET", # flake8-return "RUF", # Ruff-specific rules + "RUF022", "S", # flake8-bandit "SIM", # flake8-simplify "SLF", # flake8-self @@ -153,9 +155,10 @@ select = [ "YTT", # flake8-2020 ] ignore = [ + "A005", # module shadowing a Python builtin module "ANN101", # self should not be typed "ANN102", # cls should not be typed - "ANN401", # typing.Any is can be usefull (for example in __eq__) + "ANN401", # typing.Any can be useful (for example in __eq__) "COM812", # Conflicts with ruff format "ISC001", # Possible conflicts with ruff format "W605", # deprecated in Python 3.6 @@ -165,15 +168,16 @@ pydocstyle.convention = "google" flake8-type-checking.exempt-modules = ["typing", "typing_extensions", "numpy", "networkx", "collections"] [tool.ruff.lint.extend-per-file-ignores] +"*.py" = [ + "S101", # asserts allowed everywhere +] "test/**/*.py" = [ - "S101", # asserts allowed in tests "FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize() "D", # No doc requirements in tests - "SLF001", # Testing private functions is ok + "SLF001", # Testing private functions is OK ] "check_*.py" = [ - "S101", # asserts allowed in check functions - "SLF001", # Checking private functions is ok + "SLF001", # Checking private functions is OK ] [tool.mypy] diff --git a/test/decomposer/test_aba_decomposer.py b/test/decomposer/test_aba_decomposer.py new file mode 100644 index 00000000..c40c3249 --- /dev/null +++ b/test/decomposer/test_aba_decomposer.py @@ -0,0 +1,47 @@ +import itertools +from typing import Callable + +import numpy as np +import pytest + +from opensquirrel.ir import BlochSphereRotation +from opensquirrel.passes.decomposer import Decomposer, aba_decomposer as aba +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement + +ABA_DECOMPOSER_LIST = [ + aba.XYXDecomposer, + aba.XZXDecomposer, + aba.YXYDecomposer, + aba.YZYDecomposer, + aba.ZXZDecomposer, + aba.ZYZDecomposer, +] + + +@pytest.mark.parametrize("aba_decomposer", ABA_DECOMPOSER_LIST) +def test_specific_bloch_rotation(aba_decomposer: Callable[..., Decomposer]) -> None: + decomposer = aba_decomposer() + axis = [-0.53825, -0.65289, -0.53294] + angle = 1.97871 + + arbitrary_operation = BlochSphereRotation(qubit=0, axis=axis, angle=angle, phase=0) + decomposed_arbitrary_operation = decomposer.decompose(arbitrary_operation) + check_gate_replacement(arbitrary_operation, decomposed_arbitrary_operation) + + +@pytest.mark.parametrize("aba_decomposer", ABA_DECOMPOSER_LIST) +def test_all_octants_of_bloch_sphere_rotation(aba_decomposer: Callable[..., Decomposer]) -> None: + decomposer = aba_decomposer() + steps = 5 + phase_steps = 3 + coordinates = np.linspace(-1, 1, num=steps) + angles = np.linspace(-2 * np.pi, 2 * np.pi, num=steps) + phases = np.linspace(-np.pi, np.pi, num=phase_steps) + axes = [[x, y, z] for x, y, z in list(itertools.permutations(coordinates, 3)) if [x, y, z] != [0, 0, 0]] + + for axis in axes: + for angle in angles: + for phase in phases: + arbitrary_operation = BlochSphereRotation(qubit=0, axis=axis, angle=angle, phase=phase) + decomposed_arbitrary_operation = decomposer.decompose(arbitrary_operation) + check_gate_replacement(arbitrary_operation, decomposed_arbitrary_operation) diff --git a/test/decomposer/test_cnot2cz_decomposer.py b/test/decomposer/test_cnot2cz_decomposer.py new file mode 100644 index 00000000..570aa575 --- /dev/null +++ b/test/decomposer/test_cnot2cz_decomposer.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel.default_instructions import CNOT, CR, CZ, SWAP, CRk, H, Ry, X +from opensquirrel.ir import ControlledGate, Gate +from opensquirrel.passes.decomposer import CNOT2CZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> CNOT2CZDecomposer: + return CNOT2CZDecomposer() + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (H(0), [H(0)]), + (Ry(0, 2.345), [Ry(0, 2.345)]), + ], + ids=["Hadamard", "rotation_gate"], +) +def test_ignores_1q_gates(decomposer: CNOT2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CR(0, 1, math.pi), [CR(0, 1, math.pi)]), + (CRk(0, 1, 2), [CRk(0, 1, 2)]), + (CZ(0, 1), [CZ(0, 1)]), + (SWAP(0, 1), [SWAP(0, 1)]), + ], + ids=["CR_gate", "CRk_gate", "CZ_gate", "SWAP_gate"], +) +def test_ignores_2q_gates(decomposer: CNOT2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +def test_ignores_double_controlled(decomposer: CNOT2CZDecomposer) -> None: + gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [gate] + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [Ry(1, -math.pi / 2), CZ(0, 1), Ry(1, math.pi / 2)]), + (CNOT(1, 0), [Ry(0, -math.pi / 2), CZ(1, 0), Ry(0, math.pi / 2)]), + ], + ids=["CNOT_0_1", "CNOT_1_0"], +) +def test_decomposes_CNOT(decomposer: CNOT2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: # noqa: N802 + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == expected_result diff --git a/test/decomposer/test_cnot_decomposer.py b/test/decomposer/test_cnot_decomposer.py index 1046263d..0ff4d08a 100644 --- a/test/decomposer/test_cnot_decomposer.py +++ b/test/decomposer/test_cnot_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CZ, SWAP, H, Ry, Rz, X -from opensquirrel.ir import ControlledGate, Float, Gate +from opensquirrel import CNOT, CZ, H, Ry, Rz, X +from opensquirrel.ir import ControlledGate, Gate +from opensquirrel.passes.decomposer import CNOTDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -15,22 +15,12 @@ def decomposer_fixture() -> CNOTDecomposer: return CNOTDecomposer() -@pytest.mark.parametrize( - ("gate", "expected_result"), - [(H(0), [H(0)]), (Rz(0, Float(2.345)), [Rz(0, Float(2.345))])], -) +@pytest.mark.parametrize(("gate", "expected_result"), [(H(0), [H(0)]), (Rz(0, 2.345), [Rz(0, 2.345)])]) def test_ignores_1q_gates(decomposer: CNOTDecomposer, gate: Gate, expected_result: list[Gate]) -> None: check_gate_replacement(gate, expected_result) assert decomposer.decompose(gate) == expected_result -def test_ignores_matrix_gate(decomposer: CNOTDecomposer) -> None: - gate = SWAP(4, 3) - decomposed_gate = decomposer.decompose(gate) - check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [gate] - - def test_ignores_double_controlled(decomposer: CNOTDecomposer) -> None: gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) decomposed_gate = decomposer.decompose(gate) @@ -38,21 +28,15 @@ def test_ignores_double_controlled(decomposer: CNOTDecomposer) -> None: assert decomposed_gate == [gate] -def test_preserves_CNOT(decomposer: CNOTDecomposer) -> None: +def test_preserves_CNOT(decomposer: CNOTDecomposer) -> None: # noqa: N802 gate = CNOT(0, 1) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) assert decomposed_gate == [CNOT(0, 1)] -def test_CZ(decomposer: CNOTDecomposer) -> None: +def test_CZ(decomposer: CNOTDecomposer) -> None: # noqa: N802 gate = CZ(0, 1) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [ - Rz(1, Float(math.pi)), - Ry(1, Float(math.pi / 2)), - CNOT(0, 1), - Ry(1, Float(-math.pi / 2)), - Rz(1, Float(math.pi)), - ] + assert decomposed_gate == [Rz(1, math.pi), Ry(1, math.pi / 2), CNOT(0, 1), Ry(1, -math.pi / 2), Rz(1, math.pi)] diff --git a/test/decomposer/test_mckay_decomposer.py b/test/decomposer/test_mckay_decomposer.py index ef7f22e5..6aebd72c 100644 --- a/test/decomposer/test_mckay_decomposer.py +++ b/test/decomposer/test_mckay_decomposer.py @@ -2,12 +2,13 @@ import math +import numpy as np import pytest -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer -from opensquirrel.default_gates import CNOT, CR, X90, H, I, Rz, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, X90, Y90, H, I, Rz, S, Sdag, X, Y, Z, mX90, mY90 +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import McKayDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -17,17 +18,18 @@ def decomposer_fixture() -> McKayDecomposer: @pytest.mark.parametrize( ("gate", "expected_result"), - [(CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))])], + [(CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)])], ) def test_ignores_2q_gates(decomposer: McKayDecomposer, gate: Gate, expected_result: list[Gate]) -> None: check_gate_replacement(gate, expected_result) assert decomposer.decompose(gate) == expected_result -def test_identity_empty_decomposition(decomposer: McKayDecomposer) -> None: +def test_identity_decomposition(decomposer: McKayDecomposer) -> None: gate = I(0) decomposed_gate = decomposer.decompose(gate) - assert decomposed_gate == [] + expected_result = [I(0)] + assert decomposed_gate == expected_result def test_x(decomposer: McKayDecomposer) -> None: @@ -42,38 +44,133 @@ def test_y(decomposer: McKayDecomposer) -> None: gate = Y(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, Float(math.pi)), X90(0), X90(0)] + assert decomposed_gate == [Rz(0, math.pi), X90(0), X90(0)] def test_z(decomposer: McKayDecomposer) -> None: gate = Z(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, Float(math.pi))] + assert decomposed_gate == [Rz(0, math.pi)] def test_rz(decomposer: McKayDecomposer) -> None: - gate = Rz(0, Float(math.pi / 2)) + gate = Rz(0, math.pi / 2) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, Float(math.pi / 2))] + assert decomposed_gate == [Rz(0, math.pi / 2)] def test_hadamard(decomposer: McKayDecomposer) -> None: gate = H(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, Float(math.pi / 2)), X90(0), Rz(0, Float(math.pi / 2))] - - -def test_arbitrary(decomposer: McKayDecomposer) -> None: - arbitrary_operation = BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324) - decomposed_arbitrary_operation = decomposer.decompose(arbitrary_operation) - check_gate_replacement(arbitrary_operation, decomposed_arbitrary_operation) - assert decomposed_arbitrary_operation == [ - Rz(0, Float(0.018644578210707863)), - X90(0), - Rz(0, Float(2.520651583905213)), - X90(0), - Rz(0, Float(2.2329420137988887)), - ] + assert decomposed_gate == [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)] + + +def test_all_octants_of_bloch_sphere_rotation(decomposer: McKayDecomposer) -> None: + steps = 6 + phase_steps = 3 + coordinates = np.linspace(-1, 1, num=steps) + angles = np.linspace(-2 * np.pi, 2 * np.pi, num=steps) + phases = np.linspace(-np.pi, np.pi, num=phase_steps) + axes = [[i, j, z] for i in coordinates for j in coordinates for z in coordinates] + + for angle in angles: + for axis in axes: + for phase in phases: + arbitrary_operation = BlochSphereRotation(qubit=0, axis=axis, angle=angle, phase=phase) + decomposed_arbitrary_operation = decomposer.decompose(arbitrary_operation) + check_gate_replacement(arbitrary_operation, decomposed_arbitrary_operation) + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (I(0), [I(0)]), + (X(0), [X90(0), X90(0)]), + (Y(0), [Rz(0, math.pi), X90(0), X90(0)]), + (Z(0), [Rz(0, math.pi)]), + ( + BlochSphereRotation( + qubit=0, axis=[1 / math.sqrt(3), 1 / math.sqrt(3), 1 / math.sqrt(3)], angle=2 * math.pi / 3, phase=0 + ), + [X90(0), Rz(0, math.pi / 2)], + ), + ( + BlochSphereRotation(qubit=0, axis=[1, 1, 1], angle=-2 * math.pi / 3, phase=0), + [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)], + ), + ( + BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=2 * math.pi / 3, phase=0), + [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi)], + ), + ( + BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=-2 * math.pi / 3, phase=0), + [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)], + ), + (BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=2 * math.pi / 3, phase=0), [Rz(0, math.pi / 2), X90(0)]), + ( + BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=-2 * math.pi / 3, phase=0), + [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0)], + ), + (BlochSphereRotation(qubit=0, axis=[1, 1, -1], angle=2 * math.pi / 3, phase=0), [Rz(0, -math.pi / 2), X90(0)]), + ( + BlochSphereRotation( + qubit=0, axis=[1 / math.sqrt(3), 1 / math.sqrt(3), -1 / math.sqrt(3)], angle=-2 * math.pi / 3, phase=0 + ), + [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)], + ), + (X90(0), [X90(0)]), + (mX90(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), + (Y90(0), [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi / 2)]), + (mY90(0), [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)]), + (S(0), [Rz(0, math.pi / 2)]), + (Sdag(0), [Rz(0, -math.pi / 2)]), + (H(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), + ( + BlochSphereRotation(qubit=0, axis=[1, 1, 0], angle=math.pi, phase=math.pi / 2), + [Rz(0, -3 * math.pi / 4), X90(0), X90(0), Rz(0, -math.pi / 4)], + ), + (BlochSphereRotation(qubit=0, axis=[0, 1, 1], angle=math.pi, phase=math.pi / 2), [X90(0), Rz(0, math.pi)]), + ( + BlochSphereRotation(qubit=0, axis=[-1, 1, 0], angle=math.pi, phase=math.pi / 2), + [Rz(0, 3 * math.pi / 4), X90(0), X90(0), Rz(0, math.pi / 4)], + ), + ( + BlochSphereRotation(qubit=0, axis=[1, 0, -1], angle=math.pi, phase=math.pi / 2), + [Rz(0, -math.pi / 2), X90(0), Rz(0, -math.pi / 2)], + ), + (BlochSphereRotation(qubit=0, axis=[0, -1, 1], angle=math.pi, phase=math.pi / 2), [Rz(0, math.pi), X90(0)]), + ], + ids=[ + "I", + "X", + "Y", + "Z", + "C1", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "X90", + "mX90", + "Y90", + "mY90", + "Z90", + "mZ90", + "H1", + "H2", + "H3", + "H4", + "H5", + "H6", + ], +) +def test_single_qubit_clifford_gates(decomposer: McKayDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + decomposed_gates = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gates) + assert decomposed_gates == expected_result diff --git a/test/decomposer/test_swap2cnot_decomposer.py b/test/decomposer/test_swap2cnot_decomposer.py new file mode 100644 index 00000000..b56d887a --- /dev/null +++ b/test/decomposer/test_swap2cnot_decomposer.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +import math +from typing import TYPE_CHECKING + +import pytest + +from opensquirrel.default_instructions import CNOT, CR, CZ, SWAP, CRk, H, Ry +from opensquirrel.passes.decomposer import SWAP2CNOTDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> SWAP2CNOTDecomposer: + return SWAP2CNOTDecomposer() + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (H(0), [H(0)]), + (Ry(0, 2.345), [Ry(0, 2.345)]), + ], + ids=["Hadamard", "rotation_gate"], +) +def test_ignores_1q_gates(decomposer: SWAP2CNOTDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(0, 1, math.pi), [CR(0, 1, math.pi)]), + (CRk(0, 1, 2), [CRk(0, 1, 2)]), + (CZ(0, 1), [CZ(0, 1)]), + ], + ids=["CNOT_gate", "CR_gate", "CRk_gate", "CZ_gate"], +) +def test_ignores_2q_gates(decomposer: SWAP2CNOTDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (SWAP(0, 1), [CNOT(0, 1), CNOT(1, 0), CNOT(0, 1)]), + (SWAP(1, 0), [CNOT(1, 0), CNOT(0, 1), CNOT(1, 0)]), + ], + ids=["SWAP_0_1", "SWAP_1_0"], +) +def test_decomposes_SWAP(decomposer: SWAP2CNOTDecomposer, gate: Gate, expected_result: list[Gate]) -> None: # noqa: N802 + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == expected_result diff --git a/test/decomposer/test_xyx_decomposer.py b/test/decomposer/test_xyx_decomposer.py index 4fe8481f..300954b5 100644 --- a/test/decomposer/test_xyx_decomposer.py +++ b/test/decomposer/test_xyx_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import XYXDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Ry, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import XYXDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,16 +25,16 @@ def test_identity(decomposer: XYXDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (S(0), [Rx(0, Float(-math.pi / 2)), Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2))]), - (Y(0), [Ry(0, Float(math.pi))]), - (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), - (X(0), [Rx(0, Float(math.pi))]), - (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), - (H(0), [Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (S(0), [Rx(0, -math.pi / 2), Ry(0, math.pi / 2), Rx(0, math.pi / 2)]), + (Y(0), [Ry(0, math.pi)]), + (Ry(0, 0.9), [Ry(0, 0.9)]), + (X(0), [Rx(0, math.pi)]), + (Rx(0, 0.123), [Rx(0, 0.123)]), + (H(0), [Ry(0, math.pi / 2), Rx(0, math.pi)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Rx(0, Float(-1.140443520488592)), Ry(0, Float(-1.030183660156084)), Rx(0, Float(0.8251439260060653))], + [Rx(0, -1.140443520488592), Ry(0, -1.030183660156084), Rx(0, 0.8251439260060653)], ), ], ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], diff --git a/test/decomposer/test_xzx_decomposer.py b/test/decomposer/test_xzx_decomposer.py index 69b68581..cb480f4d 100644 --- a/test/decomposer/test_xzx_decomposer.py +++ b/test/decomposer/test_xzx_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import XZXDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Rz, S, X, Z -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Rz, S, X, Z +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import XZXDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,16 +25,16 @@ def test_identity(decomposer: XZXDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (S(0), [Rz(0, Float(math.pi / 2))]), - (Z(0), [Rz(0, Float(math.pi))]), - (Rz(0, Float(0.9)), [Rz(0, Float(0.9))]), - (X(0), [Rx(0, Float(math.pi))]), - (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), - (H(0), [Rx(0, Float(math.pi / 2)), Rz(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (S(0), [Rz(0, math.pi / 2)]), + (Z(0), [Rz(0, math.pi)]), + (Rz(0, 0.9), [Rz(0, 0.9)]), + (X(0), [Rx(0, math.pi)]), + (Rx(0, 0.123), [Rx(0, 0.123)]), + (H(0), [Rx(0, math.pi / 2), Rz(0, math.pi / 2), Rx(0, math.pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Rx(0, Float(0.43035280630630446)), Rz(0, Float(-1.030183660156084)), Rx(0, Float(-0.7456524007888308))], + [Rx(0, 0.43035280630630446), Rz(0, -1.030183660156084), Rx(0, -0.7456524007888308)], ), ], ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], diff --git a/test/decomposer/test_yxy_decomposer.py b/test/decomposer/test_yxy_decomposer.py index aa982e78..5c32ca68 100644 --- a/test/decomposer/test_yxy_decomposer.py +++ b/test/decomposer/test_yxy_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import YXYDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Ry, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import YXYDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,16 +25,16 @@ def test_identity(decomposer: YXYDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (S(0), [Ry(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2)), Ry(0, Float(-math.pi / 2))]), - (Y(0), [Ry(0, Float(math.pi))]), - (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), - (X(0), [Rx(0, Float(math.pi))]), - (Rx(0, Float(0.123)), [Rx(0, Float(0.123))]), - (H(0), [Ry(0, Float(math.pi / 4)), Rx(0, Float(math.pi)), Ry(0, Float(-math.pi / 4))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (S(0), [Ry(0, math.pi / 2), Rx(0, math.pi / 2), Ry(0, -math.pi / 2)]), + (Y(0), [Ry(0, math.pi)]), + (Ry(0, 0.9), [Ry(0, 0.9)]), + (X(0), [Rx(0, math.pi)]), + (Rx(0, 0.123), [Rx(0, 0.123)]), + (H(0), [Ry(0, math.pi / 4), Rx(0, math.pi), Ry(0, -math.pi / 4)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Ry(0, Float(0.9412144817800217)), Rx(0, Float(-0.893533136099803)), Ry(0, Float(-1.5568770630164868))], + [Ry(0, 0.9412144817800217), Rx(0, -0.893533136099803), Ry(0, -1.5568770630164868)], ), ], ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], diff --git a/test/decomposer/test_yzy_decomposer.py b/test/decomposer/test_yzy_decomposer.py index 53dbfc07..7ab2628c 100644 --- a/test/decomposer/test_yzy_decomposer.py +++ b/test/decomposer/test_yzy_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import YZYDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, X, Y +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import YZYDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,19 +25,16 @@ def test_identity(decomposer: YZYDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (S(0), [Rz(0, Float(math.pi / 2))]), - (Y(0), [Ry(0, Float(math.pi))]), - (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), - (X(0), [Ry(0, Float(-math.pi / 2)), Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))]), - ( - Rx(0, Float(0.123)), - [Ry(0, Float(-math.pi / 2)), Rz(0, Float(0.12300000000000022)), Ry(0, Float(math.pi / 2))], - ), - (H(0), [Ry(0, Float(-math.pi / 4)), Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 4))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (S(0), [Rz(0, math.pi / 2)]), + (Y(0), [Ry(0, math.pi)]), + (Ry(0, 0.9), [Ry(0, 0.9)]), + (X(0), [Ry(0, -math.pi / 2), Rz(0, math.pi), Ry(0, math.pi / 2)]), + (Rx(0, 0.123), [Ry(0, -math.pi / 2), Rz(0, 0.12300000000000022), Ry(0, math.pi / 2)]), + (H(0), [Ry(0, -math.pi / 4), Rz(0, math.pi), Ry(0, math.pi / 4)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Ry(0, Float(-0.6295818450148737)), Rz(0, Float(-0.893533136099803)), Ry(0, Float(0.013919263778408464))], + [Ry(0, -0.6295818450148737), Rz(0, -0.893533136099803), Ry(0, 0.013919263778408464)], ), ], ids=["CNOT", "CR", "S", "Y", "Ry", "X", "Rx", "H", "arbitrary"], diff --git a/test/decomposer/test_zxz_decomposer.py b/test/decomposer/test_zxz_decomposer.py index 7beb7c7d..a2086c7c 100644 --- a/test/decomposer/test_zxz_decomposer.py +++ b/test/decomposer/test_zxz_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import ZXZDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import ZXZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,17 +25,17 @@ def test_identity(decomposer: ZXZDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (X(0), [Rx(0, Float(math.pi))]), - (Rx(0, Float(0.9)), [Rx(0, Float(0.9))]), - (Y(0), [Rz(0, Float(-math.pi / 2)), Rx(0, Float(math.pi)), Rz(0, Float(math.pi / 2))]), - (Ry(0, Float(0.9)), [Rz(0, Float(-math.pi / 2)), Rx(0, Float(0.9000000000000004)), Rz(0, Float(math.pi / 2))]), - (Z(0), [Rz(0, Float(math.pi))]), - (Rz(0, Float(0.123)), [Rz(0, Float(0.123))]), - (H(0), [Rz(0, Float(math.pi / 2)), Rx(0, Float(math.pi / 2)), Rz(0, Float(math.pi / 2))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (X(0), [Rx(0, math.pi)]), + (Rx(0, 0.9), [Rx(0, 0.9)]), + (Y(0), [Rz(0, -math.pi / 2), Rx(0, math.pi), Rz(0, math.pi / 2)]), + (Ry(0, 0.9), [Rz(0, -math.pi / 2), Rx(0, 0.9000000000000004), Rz(0, math.pi / 2)]), + (Z(0), [Rz(0, math.pi)]), + (Rz(0, 0.123), [Rz(0, 0.123)]), + (H(0), [Rz(0, math.pi / 2), Rx(0, math.pi / 2), Rz(0, math.pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Rz(0, Float(-1.5521517485841891)), Rx(0, Float(-0.6209410696845807)), Rz(0, Float(0.662145687003993))], + [Rz(0, -1.5521517485841891), Rx(0, -0.6209410696845807), Rz(0, 0.662145687003993)], ), ], ids=["CNOT", "CR", "X", "Rx", "Y", "Ry", "Z", "Rz", "H", "arbitrary"], @@ -46,6 +46,20 @@ def test_zxz_decomposer(decomposer: ZXZDecomposer, gate: Gate, expected_result: assert decomposer.decompose(gate) == expected_result +@pytest.mark.parametrize( + "gate", + [ + Ry(0, -math.pi / 2), + BlochSphereRotation(0, axis=[0.0, 1.0, 0.0], angle=-math.pi / 2, phase=0.0), + BlochSphereRotation(0, axis=[0.0, -1.0, 0.0], angle=math.pi / 2, phase=0.0), + ], + ids=["Ry(-pi/2)", "BSR_1 of Ry(-pi/2)", "BSR_2 of Ry(-pi/2)"], +) +def test_specific_gate(decomposer: ZXZDecomposer, gate: Gate) -> None: + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + + def test_find_unused_index() -> None: zxz_decomp = ZXZDecomposer() missing_index = zxz_decomp._find_unused_index() diff --git a/test/decomposer/test_zyz_decomposer.py b/test/decomposer/test_zyz_decomposer.py index f523c2b5..ed0b715e 100644 --- a/test/decomposer/test_zyz_decomposer.py +++ b/test/decomposer/test_zyz_decomposer.py @@ -4,10 +4,10 @@ import pytest -from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement -from opensquirrel.default_gates import CNOT, CR, H, I, Rx, Ry, Rz, S, Sdag, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, Sdag, X, Y, Z +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import ZYZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @pytest.fixture(name="decomposer") @@ -25,17 +25,17 @@ def test_identity(decomposer: ZYZDecomposer) -> None: ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(2, 3, Float(2.123)), [CR(2, 3, Float(2.123))]), - (X(0), [S(0), Ry(0, Float(math.pi)), Sdag(0)]), - (Rx(0, Float(0.9)), [S(0), Ry(0, Float(0.9)), Sdag(0)]), - (Y(0), [Ry(0, Float(math.pi))]), - (Ry(0, Float(0.9)), [Ry(0, Float(0.9))]), - (Z(0), [Rz(0, Float(math.pi))]), - (Rz(0, Float(0.123)), [Rz(0, Float(0.123))]), - (H(0), [Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))]), + (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), + (X(0), [S(0), Ry(0, math.pi), Sdag(0)]), + (Rx(0, 0.9), [S(0), Ry(0, 0.9), Sdag(0)]), + (Y(0), [Ry(0, math.pi)]), + (Ry(0, 0.9), [Ry(0, 0.9)]), + (Z(0), [Rz(0, math.pi)]), + (Rz(0, 0.123), [Rz(0, 0.123)]), + (H(0), [Rz(0, math.pi), Ry(0, math.pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), - [Rz(0, Float(0.018644578210710527)), Ry(0, Float(-0.6209410696845807)), Rz(0, Float(-0.9086506397909061))], + [Rz(0, 0.018644578210710527), Ry(0, -0.6209410696845807), Rz(0, -0.9086506397909061)], ), ], ids=["CNOT", "CR", "X", "Rx", "Y", "Ry", "Z", "Rz", "H", "arbitrary"], diff --git a/test/docs/test_tutorial.py b/test/docs/test_tutorial.py index c9ce109a..71c497e9 100644 --- a/test/docs/test_tutorial.py +++ b/test/docs/test_tutorial.py @@ -2,10 +2,10 @@ import pytest -from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.decomposer.aba_decomposer import ZYZDecomposer -from opensquirrel.default_gates import CNOT, CZ, H, Ry, Rz -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Float, MatrixGate, QubitLike, named_gate +from opensquirrel import CNOT, CZ, Circuit, CircuitBuilder, H, Ry, Rz +from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate, QubitLike, named_gate +from opensquirrel.passes.decomposer import ZYZDecomposer +from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger def test_circuit_from_string() -> None: @@ -43,7 +43,7 @@ def test_circuit_from_string() -> None: def test_circuit_builder() -> None: builder = CircuitBuilder(qubit_register_size=2) - builder.Ry(0, Float(0.23)).CNOT(0, 1) + builder.Ry(0, 0.23).CNOT(0, 1) qc = builder.to_circuit() assert ( @@ -112,7 +112,7 @@ def test_circuit_builder_qft() -> None: ) -def test_CNOT_strong_type_error_string() -> None: +def test_CNOT_strong_type_error_string() -> None: # noqa: N802 with pytest.raises(OSError, match=r".* with argument pack .*") as e_info: Circuit.from_string( """ @@ -129,10 +129,10 @@ def test_CNOT_strong_type_error_string() -> None: def test_anonymous_gate() -> None: builder = CircuitBuilder(1) for _ in range(4): - builder.Rx(0, Float(math.pi / 4)) + builder.Rx(0, math.pi / 4) qc = builder.to_circuit() - qc.merge_single_qubit_gates() + qc.merge(merger=SingleQubitGatesMerger()) assert ( str(qc) @@ -140,7 +140,7 @@ def test_anonymous_gate() -> None: qubit[1] q -Anonymous gate: BlochSphereRotation(Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) +Rx(3.1415927) q[0] """ ) @@ -187,7 +187,7 @@ def test_predefined_decomposition() -> None: X q[0:2] // Note that this notation is expanded in OpenSquirrel. CNOT q[0], q[1] - Ry q[2], 6.78 + Ry(6.78) q[2] """ ) qc.replace( @@ -224,7 +224,7 @@ def test_error_predefined_decomposition() -> None: X q[0:2] CNOT q[0], q[1] - Ry q[2], 6.78 + Ry(6.78) q[2] """ ) with pytest.raises(ValueError, match=r"replacement for gate .*") as e_info: @@ -235,7 +235,7 @@ def test_error_predefined_decomposition() -> None: def test_zyz_decomposer() -> None: builder = CircuitBuilder(qubit_register_size=1) - builder.H(0).Z(0).Y(0).Rx(0, Float(math.pi / 3)) + builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) qc = builder.to_circuit() qc.decompose(decomposer=ZYZDecomposer()) @@ -256,4 +256,4 @@ def test_zyz_decomposer() -> None: """ ) - assert ZYZDecomposer().decompose(H(0)) == [Rz(0, Float(math.pi)), Ry(0, Float(math.pi / 2))] + assert ZYZDecomposer().decompose(H(0)) == [Rz(0, math.pi), Ry(0, math.pi / 2)] diff --git a/test/example/tutorials/test_decompositions.py b/test/example/tutorials/test_decompositions.py index fdc99dbc..d7c12e3b 100644 --- a/test/example/tutorials/test_decompositions.py +++ b/test/example/tutorials/test_decompositions.py @@ -3,12 +3,9 @@ import sympy as sp from IPython.display import display +from opensquirrel import H, Rx, Rz from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.decomposer.aba_decomposer import XZXDecomposer, ZYZDecomposer -from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer -from opensquirrel.default_gates import H, Rx, Rz -from opensquirrel.ir import Float +from opensquirrel.passes.decomposer import CNOTDecomposer, McKayDecomposer, XZXDecomposer, ZYZDecomposer class TestDecomposition: @@ -36,7 +33,7 @@ def test_sympy_display(self) -> None: sp.Eq(rhs_simplified.b, q.b), sp.Eq(rhs_simplified.c, q.c), sp.Eq(rhs_simplified.d, q.d), - ) + ) # type: ignore[no-untyped-call] sp.trigsimp(sp.Eq(rhs_simplified.a, q.a).subs(sp.cos(theta2 / 2), nz * sp.sin(alpha / 2) / sp.sin(p / 2))) @@ -60,7 +57,7 @@ def test_aba_decomposer_input_circuit_creation(self) -> None: builder.H(0) builder.Z(0) builder.Y(0) - builder.Rx(0, Float(math.pi / 3)) + builder.Rx(0, math.pi / 3) # Convert the builder object into a circuit circuit = builder.to_circuit() @@ -82,7 +79,7 @@ def test_zyz_decomposer(self) -> None: builder.H(0) builder.Z(0) builder.Y(0) - builder.Rx(0, Float(math.pi / 3)) + builder.Rx(0, math.pi / 3) # Convert the builder object into a circuit circuit = builder.to_circuit() @@ -103,18 +100,14 @@ def test_zyz_decomposer(self) -> None: Rz(-1.5707963) q[0] """ ) - assert XZXDecomposer().decompose(H(0)) == [ - Rx(0, Float(math.pi / 2)), - Rz(0, Float(math.pi / 2)), - Rx(0, Float(math.pi / 2)), - ] + assert XZXDecomposer().decompose(H(0)) == [Rx(0, math.pi / 2), Rz(0, math.pi / 2), Rx(0, math.pi / 2)] def test_mckay_decomposer(self) -> None: builder = CircuitBuilder(qubit_register_size=1) builder.H(0) builder.Z(0) builder.X(0) - builder.Rx(0, Float(math.pi / 3)) + builder.Rx(0, math.pi / 3) # Convert the builder object into a circuit circuit = builder.to_circuit() @@ -155,8 +148,8 @@ def test_mckay_decomposer(self) -> None: def test_cnot_decomposer(self) -> None: builder = CircuitBuilder(qubit_register_size=2) builder.CZ(0, 1) - builder.CR(0, 1, Float(math.pi / 3)) - builder.CR(1, 0, Float(math.pi / 2)) + builder.CR(0, 1, math.pi / 3) + builder.CR(1, 0, math.pi / 2) # Convert the builder object into a circuit circuit = builder.to_circuit() @@ -179,11 +172,11 @@ def test_cnot_decomposer(self) -> None: qubit[2] q -Rz(-3.1415927) q[1] +Rz(3.1415927) q[1] Ry(1.5707963) q[1] CNOT q[0], q[1] Ry(-1.5707963) q[1] -Rz(3.1415927) q[1] +Rz(-3.1415927) q[1] Rz(0.52359878) q[1] CNOT q[0], q[1] Rz(-0.52359878) q[1] diff --git a/test/exporter/test_cqasmv1_exporter.py b/test/exporter/test_cqasmv1_exporter.py new file mode 100644 index 00000000..a1fca593 --- /dev/null +++ b/test/exporter/test_cqasmv1_exporter.py @@ -0,0 +1,288 @@ +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.exceptions import UnsupportedGateError +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate, MatrixGate +from opensquirrel.passes.exporter import ExportFormat + + +def test_cqasm_v3_to_cqasm_v1() -> None: + cqasm_v3_string = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + init q + I q[0] + barrier q[1] + H q[0] + reset q + CNOT q[0], q[1] + wait(3) q + Rx(5.123) q[0] + b = measure q + """ + ) + cqasm_v1_string = cqasm_v3_string.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 2 + +prep_z q[0] +prep_z q[1] +i q[0] +barrier q[1] +h q[0] +prep_z q[0] +prep_z q[1] +cnot q[0], q[1] +wait q[0], 3 +wait q[1], 3 +rx q[0], 5.123 +measure_z q[0] +measure_z q[1] +""" + ) + + +def test_version_statement() -> None: + qc = Circuit.from_string("""version 3.0""") + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 +""" + ) + + +def test_qubit_statement() -> None: + builder = CircuitBuilder(3) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 3 +""" + ) + + +def test_circuit_to_string_after_circuit_modification() -> None: + builder = CircuitBuilder(3) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 3 +""" + ) + + builder.H(0) + builder.CNOT(0, 1) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 3 + +h q[0] +cnot q[0], q[1] +""" + ) + + +def test_float_precision() -> None: + builder = CircuitBuilder(3) + builder.Rx(0, 1.6546514861321684321654) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 3 + +rx q[0], 1.6546515 +""" + ) + + +def test_measure() -> None: + builder = CircuitBuilder(2, 2) + builder.H(0) + builder.measure(0, 0) + builder.measure(0, 1) + builder.measure(1, 0) + builder.measure(1, 1) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 2 + +h q[0] +measure_z q[0] +measure_z q[0] +measure_z q[1] +measure_z q[1] +""" + ) + + +def test_init() -> None: + builder = CircuitBuilder(1, 1) + builder.init(0) + builder.H(0) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 1 + +prep_z q[0] +h q[0] +""" + ) + + +def test_reset() -> None: + builder = CircuitBuilder(1, 1) + builder.H(0) + builder.reset(0) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 1 + +h q[0] +prep_z q[0] +""" + ) + + +def test_all_instructions() -> None: + builder = CircuitBuilder(2, 2) + builder.init(0).reset(1).barrier(0).wait(1, 3) + builder.I(0).X(0).Y(0).Z(0) + builder.Rx(0, 1.234).Ry(0, -1.234).Rz(0, 1.234) + builder.X90(0).Y90(0) + builder.mX90(0).mY90(0) + builder.S(0).Sdag(0).T(0).Tdag(0) + builder.CZ(0, 1).CNOT(1, 0).SWAP(0, 1) + builder.measure(0, 0).measure(1, 1) + qc = builder.to_circuit() + cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + assert ( + cqasm_v1_string + == """version 1.0 + +qubits 2 + +prep_z q[0] +prep_z q[1] +barrier q[0] +wait q[1], 3 +i q[0] +x q[0] +y q[0] +z q[0] +rx q[0], 1.234 +ry q[0], -1.234 +rz q[0], 1.234 +x90 q[0] +y90 q[0] +mx90 q[0] +my90 q[0] +s q[0] +sdag q[0] +t q[0] +tdag q[0] +cz q[0], q[1] +cnot q[1], q[0] +swap q[0], q[1] +measure_z q[0] +measure_z q[1] +""" + ) + + +@pytest.mark.parametrize( + "gate", + [ + BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23), + ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23)), + MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]), + ], +) +def test_anonymous_gates(gate: Gate) -> None: + builder = CircuitBuilder(2) + builder.ir.add_gate(gate) + with pytest.raises(UnsupportedGateError, match="not supported"): # noqa: PT012 + qc = builder.to_circuit() + qc.export(fmt=ExportFormat.CQASM_V1) + + +@pytest.mark.parametrize( + ("program", "expected_output"), + [ + ( + "version 3.0; qubit[1] q; barrier q[0];", + "version 1.0\n\nqubits 1\n\nbarrier q[0]\n", + ), + ( + "version 3.0; qubit[3] q; barrier q[0:2]", + "version 1.0\n\nqubits 3\n\nbarrier q[0, 1, 2]\n", + ), + ( + "version 3.0; qubit[1] q; barrier q[0, 0]", + "version 1.0\n\nqubits 1\n\nbarrier q[0, 0]\n", + ), + ( + "version 3.0; qubit[6] q; barrier q[0:2, 5, 3, 4, 1]", + "version 1.0\n\nqubits 6\n\nbarrier q[0, 1, 2, 5, 3, 4, 1]\n", + ), + ( + "version 3.0; qubit[5] q; barrier q[0]; H q[1]; barrier q[1:2]; X q[2]; barrier q[3:4, 1]; Y q[3];" + "barrier q[0]; barrier q[2]", + "version 1.0\n\nqubits 5\n\nbarrier q[0]\nh q[1]\nbarrier q[1, 2]\nx q[2]\nbarrier q[3, 4, 1]\ny q[3]\n" + "barrier q[0, 2]\n", + ), + ( + "version 3.0; qubit[3] q; barrier q[0]; barrier q[1]; X q[2]; barrier q[1]; X q[2]", + "version 1.0\n\nqubits 3\n\nbarrier q[0, 1]\nx q[2]\nbarrier q[1]\nx q[2]\n", + ), + ( + "version 3.0; qubit[20] q; barrier q[14]; barrier q[9:12]; X q[2]; barrier q[19]", + "version 1.0\n\nqubits 20\n\nbarrier q[14, 9, 10, 11, 12]\nx q[2]\nbarrier q[19]\n", + ), + ], + ids=[ + "no_group", + "single_group", + "repeated_index", + "preserve_order", + "with_instructions", + "group_consecutive_barriers", + "double_digit_register_size", + ], +) +def test_barrier_groups(program: str, expected_output: str) -> None: + qc = Circuit.from_string(program) + output = qc.export(fmt=ExportFormat.CQASM_V1) + assert output == expected_output diff --git a/test/exporter/test_quantify_scheduler_exporter.py b/test/exporter/test_quantify_scheduler_exporter.py index 6d321562..f6916bed 100644 --- a/test/exporter/test_quantify_scheduler_exporter.py +++ b/test/exporter/test_quantify_scheduler_exporter.py @@ -9,13 +9,12 @@ import pytest -from opensquirrel import CircuitBuilder +from opensquirrel import CircuitBuilder, H from opensquirrel.common import ATOL -from opensquirrel.default_gates import CCZ, SWAP, H from opensquirrel.exceptions import ExporterError -from opensquirrel.exporter import quantify_scheduler_exporter -from opensquirrel.exporter.quantify_scheduler_exporter import FIXED_POINT_DEG_PRECISION -from opensquirrel.ir import Bit, BlochSphereRotation, Float, Gate +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.exporter import quantify_scheduler_exporter +from opensquirrel.passes.exporter.quantify_scheduler_exporter import FIXED_POINT_DEG_PRECISION class FloatEq(float): @@ -26,12 +25,12 @@ def __eq__(self, other: Any) -> bool: class MockedQuantifyScheduler: def __enter__(self) -> tuple[Any, Any]: self.patch_qs = unittest.mock.patch( - "opensquirrel.exporter.quantify_scheduler_exporter.quantify_scheduler", + "opensquirrel.passes.exporter.quantify_scheduler_exporter.quantify_scheduler", create=True, ) self.patch_qs_gates = unittest.mock.patch( - "opensquirrel.exporter.quantify_scheduler_exporter.quantify_scheduler_gates", + "opensquirrel.passes.exporter.quantify_scheduler_exporter.quantify_scheduler_gates", create=True, ) @@ -52,11 +51,11 @@ def test_export(self) -> None: builder.X(0) builder.CZ(0, 1) builder.reset(0) - builder.Rz(1, Float(2.34)) - builder.Ry(2, Float(1.23)) - builder.measure(0, Bit(0)) - builder.measure(1, Bit(1)) - builder.measure(2, Bit(2)) + builder.Rz(1, 2.34) + builder.Ry(2, 1.23) + builder.measure(0, 0) + builder.measure(1, 1) + builder.measure(2, 2) circuit = builder.to_circuit() with MockedQuantifyScheduler() as (mock_quantify_scheduler, mock_quantify_scheduler_gates): @@ -77,7 +76,7 @@ def test_export(self) -> None: ), ], ) - mock_quantify_scheduler_gates.Reset.assert_called_once_with(qubit="q[0]") + mock_quantify_scheduler_gates.Reset.assert_called_once_with("q[0]") mock_quantify_scheduler_gates.CZ.assert_called_once_with(qC="q[0]", qT="q[1]") mock_quantify_scheduler_gates.Rz.assert_called_once_with( theta=FloatEq(round(math.degrees(2.34), FIXED_POINT_DEG_PRECISION)), @@ -87,8 +86,8 @@ def test_export(self) -> None: @pytest.mark.parametrize( "gate", - [H(0), SWAP(0, 1), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34), CCZ(0, 1, 2)], - ids=["H", "SWAP", "BSR", "CCZ"], + [H(0), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34)], + ids=["H", "BSR"], ) def test_gates_not_supported(self, gate: Gate) -> None: builder = CircuitBuilder(3) diff --git a/test/ir_equality_test_base.py b/test/ir_equality_test_base.py index f8eb10de..b353b140 100644 --- a/test/ir_equality_test_base.py +++ b/test/ir_equality_test_base.py @@ -1,7 +1,7 @@ from __future__ import annotations from collections.abc import Callable -from typing import Any +from typing import TYPE_CHECKING import numpy as np from numpy.typing import NDArray @@ -9,6 +9,9 @@ from opensquirrel import Circuit, circuit_matrix_calculator from opensquirrel.common import are_matrices_equivalent_up_to_global_phase +if TYPE_CHECKING: + from opensquirrel.ir import IR + def check_equivalence_up_to_global_phase(matrix_a: NDArray[np.complex128], matrix_b: NDArray[np.complex128]) -> None: assert are_matrices_equivalent_up_to_global_phase(matrix_a, matrix_b) @@ -16,7 +19,7 @@ def check_equivalence_up_to_global_phase(matrix_a: NDArray[np.complex128], matri def modify_circuit_and_check( circuit: Circuit, - action: Callable[[Circuit], Any], + action: Callable[[IR, int], None], expected_circuit: Circuit | None = None, ) -> None: """ @@ -28,7 +31,7 @@ def modify_circuit_and_check( # Store matrix before decompositions. expected_matrix = circuit_matrix_calculator.get_circuit_matrix(circuit) - action(circuit) + action(circuit.ir, circuit.qubit_register_size) # Get matrix after decompositions. actual_matrix = circuit_matrix_calculator.get_circuit_matrix(circuit) diff --git a/test/mapper/test_general_mapper.py b/test/mapper/test_general_mapper.py index 901d202d..b0b5d815 100644 --- a/test/mapper/test_general_mapper.py +++ b/test/mapper/test_general_mapper.py @@ -3,9 +3,8 @@ import pytest from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.ir import Bit -from opensquirrel.mapper import HardcodedMapper, Mapper -from opensquirrel.mapper.mapping import Mapping +from opensquirrel.passes.mapper import HardcodedMapper, Mapper +from opensquirrel.passes.mapper.mapping import Mapping class TestMapper: @@ -34,8 +33,7 @@ def circuit_fixture(self) -> Circuit: builder.H(0) builder.CNOT(0, 1) builder.CNOT(1, 2) - builder.comment("Qubit[1]") - builder.measure(0, Bit(0)) + builder.measure(0, 0) return builder.to_circuit() @pytest.fixture(name="remapped_circuit") @@ -44,8 +42,7 @@ def remapped_circuit_fixture(self) -> Circuit: builder.H(1) builder.CNOT(1, 0) builder.CNOT(0, 2) - builder.comment("Qubit[1]") - builder.measure(1, Bit(0)) + builder.measure(1, 0) return builder.to_circuit() def test_circuit_map(self, circuit: Circuit, remapped_circuit: Circuit) -> None: diff --git a/test/mapper/test_mapping.py b/test/mapper/test_mapping.py index 303489a4..5596746d 100644 --- a/test/mapper/test_mapping.py +++ b/test/mapper/test_mapping.py @@ -1,6 +1,6 @@ import pytest -from opensquirrel.mapper.mapping import Mapping +from opensquirrel.passes.mapper.mapping import Mapping class TestMapping: diff --git a/test/mapper/test_qubit_remapper.py b/test/mapper/test_qubit_remapper.py index 4b70452d..137f9040 100644 --- a/test/mapper/test_qubit_remapper.py +++ b/test/mapper/test_qubit_remapper.py @@ -2,12 +2,12 @@ from opensquirrel import CircuitBuilder from opensquirrel.circuit import Circuit -from opensquirrel.mapper.mapping import Mapping -from opensquirrel.mapper.qubit_remapper import get_remapped_ir, remap_ir +from opensquirrel.passes.mapper.mapping import Mapping +from opensquirrel.passes.mapper.qubit_remapper import get_remapped_ir, remap_ir class TestRemapper: - @pytest.fixture() + @pytest.fixture def circuit_3(self) -> Circuit: builder = CircuitBuilder(3) builder.H(0) @@ -15,7 +15,7 @@ def circuit_3(self) -> Circuit: builder.H(2) return builder.to_circuit() - @pytest.fixture() + @pytest.fixture def circuit_3_remapped(self) -> Circuit: builder = CircuitBuilder(3) builder.H(2) @@ -23,7 +23,7 @@ def circuit_3_remapped(self) -> Circuit: builder.H(0) return builder.to_circuit() - @pytest.fixture() + @pytest.fixture def circuit_4(self) -> Circuit: builder = CircuitBuilder(4) builder.H(0) @@ -32,7 +32,7 @@ def circuit_4(self) -> Circuit: builder.Y(3) return builder.to_circuit() - @pytest.fixture() + @pytest.fixture def circuit_4_remapped(self) -> Circuit: builder = CircuitBuilder(4) builder.H(3) @@ -41,11 +41,11 @@ def circuit_4_remapped(self) -> Circuit: builder.Y(2) return builder.to_circuit() - @pytest.fixture() + @pytest.fixture def mapping_3(self) -> Mapping: return Mapping([2, 1, 0]) - @pytest.fixture() + @pytest.fixture def mapping_4(self) -> Mapping: return Mapping([3, 1, 0, 2]) diff --git a/test/mapper/test_simple_mappers.py b/test/mapper/test_simple_mappers.py index 96df46ed..27eacbf0 100644 --- a/test/mapper/test_simple_mappers.py +++ b/test/mapper/test_simple_mappers.py @@ -2,9 +2,9 @@ import pytest -from opensquirrel.mapper import HardcodedMapper, IdentityMapper -from opensquirrel.mapper.mapping import Mapping -from opensquirrel.utils.check_passes import check_mapper +from opensquirrel.passes.mapper import HardcodedMapper, IdentityMapper +from opensquirrel.passes.mapper.mapping import Mapping +from opensquirrel.utils import check_mapper class TestIdentityMapper: diff --git a/test/merger/test_general_merger.py b/test/merger/test_general_merger.py new file mode 100644 index 00000000..4b2bac9f --- /dev/null +++ b/test/merger/test_general_merger.py @@ -0,0 +1,142 @@ +import math + +import pytest + +from opensquirrel import Circuit, CircuitBuilder, H, I, Rx, Ry, X +from opensquirrel.ir import BlochSphereRotation, Float +from opensquirrel.passes.merger.general_merger import compose_bloch_sphere_rotations, rearrange_barriers + + +def test_compose_bloch_sphere_rotations_same_axis() -> None: + a = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.4) + b = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=-0.3) + composed = compose_bloch_sphere_rotations(a, b) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.1) + + +def test_compose_bloch_sphere_rotations_different_axis() -> None: + # Visualizing this in 3D is difficult... + a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=math.pi / 2) + b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-math.pi / 2) + c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=math.pi / 2) + composed = compose_bloch_sphere_rotations(a, compose_bloch_sphere_rotations(b, c)) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=math.pi) + + +@pytest.mark.parametrize( + ("bsr_a", "bsr_b", "expected_result"), + [ + (I(0), Rx(0, theta=math.pi), Rx(0, theta=math.pi)), + (Rx(0, theta=math.pi), I(0), Rx(0, theta=math.pi)), + (X(0), X(0), I(0)), + (H(0), H(0), I(0)), + (Rx(0, theta=math.pi), Rx(0, theta=math.pi), I(0)), + (Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi)), + (Rx(0, theta=math.pi), Ry(0, theta=math.pi / 2), BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)), + ], + ids=[ + "[bsr_a == I]", + "[bsr_b == I]", + "[bsr_a.generator == bsr_b.generator] X * X == I", + "[bsr_a.generator == bsr_b.generator] H * H == I", + "[bsr_a.generator == bsr_b.generator] Rx(pi) * Rx(pi) == I", + "[bsr_a.generator == bsr_b.generator] Rx(pi/2) * Rx(pi/2) = Rx(pi) ~ X", + "[bsr_a.generator != bsr_b.generator] Rx(pi) * Ry(pi/2) ~ H", + ], +) +def test_compose_bloch_sphere_rotations( + bsr_a: BlochSphereRotation, bsr_b: BlochSphereRotation, expected_result: BlochSphereRotation +) -> None: + assert compose_bloch_sphere_rotations(bsr_a, bsr_b) == expected_result + + +@pytest.mark.parametrize( + ("circuit", "expected_result"), + [ + ( + CircuitBuilder(2).H(0).barrier(0).H(1).barrier(1).H(0).Rx(0, Float(math.pi / 3)).barrier(0).to_circuit(), + """version 3.0 + +qubit[2] q + +H q[0] +H q[1] +barrier q[0] +H q[0] +Rx(1.0471976) q[0] +barrier q[1] +barrier q[0] +""", + ), + ( + CircuitBuilder(2).X(0).barrier(0).X(1).barrier(1).CNOT(0, 1).barrier(1).X(1).to_circuit(), + """version 3.0 + +qubit[2] q + +X q[0] +X q[1] +barrier q[0] +barrier q[1] +CNOT q[0], q[1] +barrier q[1] +X q[1] +""", + ), + ( + CircuitBuilder(2).X(0).X(1).barrier(0).barrier(1).X(0).to_circuit(), + """version 3.0 + +qubit[2] q + +X q[0] +X q[1] +barrier q[0] +barrier q[1] +X q[0] +""", + ), + ( + CircuitBuilder(4) + .H(0) + .barrier(0) + .H(1) + .barrier(1) + .H(2) + .barrier(2) + .H(3) + .barrier(3) + .CNOT(0, 3) + .barrier(0) + .barrier(1) + .barrier(3) + .to_circuit(), + """version 3.0 + +qubit[4] q + +H q[0] +H q[1] +H q[2] +H q[3] +barrier q[0] +barrier q[1] +barrier q[2] +barrier q[3] +CNOT q[0], q[3] +barrier q[0] +barrier q[1] +barrier q[3] +""", + ), + ], + ids=[ + "anonymous_gate", + "CNOT_cannot_go_through_a_group_of_linked_barriers", + "X_cannot_go_through_a_group_of_linked_barriers", + "circuit_with_4_qubits", + ], +) +def test_rearrange_barriers(circuit: Circuit, expected_result: str) -> None: + rearrange_barriers(circuit.ir) + assert str(circuit) == expected_result diff --git a/test/merger/test_merger.py b/test/merger/test_merger.py deleted file mode 100644 index 72ed0cd3..00000000 --- a/test/merger/test_merger.py +++ /dev/null @@ -1,171 +0,0 @@ -import math - -from opensquirrel import CircuitBuilder -from opensquirrel.default_gates import Ry, Rz -from opensquirrel.ir import Bit, BlochSphereRotation, Float, Qubit -from opensquirrel.merger import general_merger -from opensquirrel.merger.general_merger import compose_bloch_sphere_rotations -from test.ir_equality_test_base import modify_circuit_and_check - - -def test_compose_bloch_sphere_rotations_same_axis() -> None: - a = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.4) - b = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=-0.3) - composed = compose_bloch_sphere_rotations(a, b) - assert composed == BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.1) - - -def test_compose_bloch_sphere_rotations_different_axis() -> None: - # Visualizing this in 3D is difficult... - a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=math.pi / 2) - b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-math.pi / 2) - c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=math.pi / 2) - composed = compose_bloch_sphere_rotations(a, compose_bloch_sphere_rotations(b, c)) - assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=math.pi) - - -def test_single_gate() -> None: - builder1 = CircuitBuilder(1) - builder1.Ry(0, Float(1.2345)) - circuit = builder1.to_circuit() - - builder2 = CircuitBuilder(1) - builder2.Ry(0, Float(1.2345)) - expected_circuit = builder2.to_circuit() - - modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) - - # Check that when no fusion happens, generator and arguments of gates are preserved. - assert isinstance(circuit.ir.statements[0], BlochSphereRotation) - assert circuit.ir.statements[0].generator == Ry - assert circuit.ir.statements[0].arguments == (Qubit(0), Float(1.2345)) - - -def test_two_hadamards() -> None: - builder = CircuitBuilder(4) - builder.H(2) - builder.H(2) - circuit = builder.to_circuit() - - expected_circuit = CircuitBuilder(4).to_circuit() - - modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) - - -def test_two_hadamards_different_qubits() -> None: - builder1 = CircuitBuilder(4) - builder1.H(0) - builder1.H(2) - circuit = builder1.to_circuit() - - builder2 = CircuitBuilder(4) - builder2.H(0) - builder2.H(2) - expected_circuit = builder2.to_circuit() - - modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) - - -def test_merge_different_qubits() -> None: - builder1 = CircuitBuilder(4) - builder1.Ry(0, Float(math.pi / 2)) - builder1.Rx(0, Float(math.pi)) - builder1.Rz(1, Float(1.2345)) - builder1.Ry(2, Float(1)) - builder1.Ry(2, Float(3.234)) - circuit = builder1.to_circuit() - - builder2 = CircuitBuilder(4) - builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase - builder2.Rz(1, Float(1.2345)) - builder2.Ry(2, Float(4.234)) - expected_circuit = builder2.to_circuit() - - modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) - - assert isinstance(circuit.ir.statements[0], BlochSphereRotation) - assert circuit.ir.statements[0].is_anonymous # When fusion happens, the resulting gate is anonymous. - - assert isinstance(circuit.ir.statements[1], BlochSphereRotation) - assert circuit.ir.statements[1].generator == Rz # Otherwise it keeps the same generator and arguments. - assert circuit.ir.statements[1].arguments == (Qubit(1), Float(1.2345)) - - assert isinstance(circuit.ir.statements[2], BlochSphereRotation) - assert circuit.ir.statements[2].is_anonymous - - -def test_merge_and_flush() -> None: - builder1 = CircuitBuilder(4) - builder1.Ry(0, Float(math.pi / 2)) - builder1.Rz(1, Float(1.5)) - builder1.Rx(0, Float(math.pi)) - builder1.Rz(1, Float(-2.5)) - builder1.CNOT(0, 1) - builder1.Ry(0, Float(3.234)) - circuit = builder1.to_circuit() - - builder2 = CircuitBuilder(4) - builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase - builder2.Rz(1, Float(-1.0)) - builder2.CNOT(0, 1) - builder2.Ry(0, Float(3.234)) - expected_circuit = builder2.to_circuit() - - modify_circuit_and_check(circuit, general_merger.merge_single_qubit_gates, expected_circuit) - - assert isinstance(circuit.ir.statements[0], BlochSphereRotation) - assert circuit.ir.statements[0].is_anonymous - - assert isinstance(circuit.ir.statements[3], BlochSphereRotation) - assert circuit.ir.statements[3].generator == Ry - assert circuit.ir.statements[3].arguments == (Qubit(0), Float(3.234)) - - -def test_merge_y90_x_to_h() -> None: - builder = CircuitBuilder(1) - builder.Y90(0) - builder.X(0) - qc = builder.to_circuit() - - builder2 = CircuitBuilder(1) - builder2.H(0) - expected_qc = builder2.to_circuit() - modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) - - -def test_no_merge_across_measure() -> None: - builder = CircuitBuilder(2, 2) - builder.H(0) - builder.measure(0, Bit(0)) - builder.H(0) - builder.H(1) - builder.measure(0, Bit(1)) - builder.H(1) - qc = builder.to_circuit() - - builder2 = CircuitBuilder(2, 2) - builder2.H(0) - builder2.measure(0, Bit(0)) - builder2.H(0) - builder2.measure(0, Bit(1)) - expected_qc = builder2.to_circuit() - modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) - - -def test_no_merge_across_reset() -> None: - builder = CircuitBuilder(2) - builder.H(0) - builder.reset(0) - builder.H(0) - builder.H(1) - builder.reset(0) - builder.H(1) - qc = builder.to_circuit() - - builder2 = CircuitBuilder(2) - builder2.H(0) - builder2.reset(0) - builder2.H(0) - builder2.reset(0) - expected_qc = builder2.to_circuit() - modify_circuit_and_check(qc, general_merger.merge_single_qubit_gates, expected_qc) diff --git a/test/merger/test_single_qubit_gates_merger.py b/test/merger/test_single_qubit_gates_merger.py new file mode 100644 index 00000000..e75f5584 --- /dev/null +++ b/test/merger/test_single_qubit_gates_merger.py @@ -0,0 +1,264 @@ +import math + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.ir import BlochSphereRotation, Float +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.passes.merger.general_merger import rearrange_barriers +from test.ir_equality_test_base import modify_circuit_and_check + + +@pytest.fixture(name="merger") +def merger_fixture() -> SingleQubitGatesMerger: + return SingleQubitGatesMerger() + + +def test_single_gate(merger: SingleQubitGatesMerger) -> None: + builder1 = CircuitBuilder(1) + builder1.Ry(0, 1.2345) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(1) + builder2.Ry(0, 1.2345) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, merger.merge, expected_circuit) + + +def test_two_hadamards(merger: SingleQubitGatesMerger) -> None: + builder = CircuitBuilder(4) + builder.H(2) + builder.H(2) + circuit = builder.to_circuit() + + expected_circuit = CircuitBuilder(4).to_circuit() + + modify_circuit_and_check(circuit, merger.merge, expected_circuit) + + +def test_two_hadamards_different_qubits(merger: SingleQubitGatesMerger) -> None: + builder1 = CircuitBuilder(4) + builder1.H(0) + builder1.H(2) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.H(0) + builder2.H(2) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, merger.merge, expected_circuit) + + +def test_merge_different_qubits(merger: SingleQubitGatesMerger) -> None: + builder1 = CircuitBuilder(4) + builder1.Ry(0, math.pi / 2) + builder1.Rx(0, math.pi) + builder1.Rz(1, 1.2345) + builder1.Ry(2, 1) + builder1.Ry(2, 3.234) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.Rz(1, 1.2345) + builder2.Ry(2, Float(4.234)) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, merger.merge, expected_circuit) + + +def test_merge_and_flush(merger: SingleQubitGatesMerger) -> None: + builder1 = CircuitBuilder(4) + builder1.Ry(0, math.pi / 2) + builder1.Rz(1, 1.5) + builder1.Rx(0, math.pi) + builder1.Rz(1, -2.5) + builder1.CNOT(0, 1) + builder1.Ry(0, 3.234) + circuit = builder1.to_circuit() + + builder2 = CircuitBuilder(4) + builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.Rz(1, -1.0) + builder2.CNOT(0, 1) + builder2.Ry(0, 3.234) + expected_circuit = builder2.to_circuit() + + modify_circuit_and_check(circuit, merger.merge, expected_circuit) + + +def test_merge_y90_x_to_h(merger: SingleQubitGatesMerger) -> None: + builder = CircuitBuilder(1) + builder.Y90(0) + builder.X(0) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(1) + builder2.H(0) + expected_qc = builder2.to_circuit() + + modify_circuit_and_check(qc, merger.merge, expected_qc) + + +def test_no_merge_across_measure(merger: SingleQubitGatesMerger) -> None: + builder = CircuitBuilder(2, 2) + builder.H(0) + builder.measure(0, 0) + builder.H(0) + builder.H(1) + builder.measure(0, 1) + builder.H(1) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(2, 2) + builder2.H(0) + builder2.measure(0, 0) + builder2.H(0) + builder2.measure(0, 1) + expected_qc = builder2.to_circuit() + + modify_circuit_and_check(qc, merger.merge, expected_qc) + + +def test_no_merge_across_reset(merger: SingleQubitGatesMerger) -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.reset(0) + builder.H(0) + builder.H(1) + builder.reset(0) + builder.H(1) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(2) + builder2.H(0) + builder2.reset(0) + builder2.H(0) + builder2.reset(0) + expected_qc = builder2.to_circuit() + + modify_circuit_and_check(qc, merger.merge, expected_qc) + + +def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.wait(0, 3) + builder.H(0) + builder.H(1) + builder.wait(0, 3) + builder.H(1) + qc = builder.to_circuit() + + builder2 = CircuitBuilder(2) + builder2.H(0) + builder2.wait(0, 3) + builder2.H(0) + builder2.wait(0, 3) + expected_qc = builder2.to_circuit() + modify_circuit_and_check(qc, merger.merge, expected_qc) + + +@pytest.mark.parametrize( + ("circuit", "expected_result"), + [ + ( + ( + CircuitBuilder(2) + .H(1) + .Rz(1, Float(2.332)) + .H(0) + .Rx(0, Float(1.423)) + .barrier(0) + .barrier(1) + .H(1) + .Rz(1, Float(2.332)) + .H(0) + .Rx(1, Float(1.423)) + .barrier(0) + .barrier(1) + .to_circuit() + ), + """version 3.0 + +qubit[2] q + +Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.60376 -0.52053 0.60376], angle=-2.18173, phase=1.5708) +Anonymous gate: BlochSphereRotation(Qubit[1], axis=[0.36644 0.85525 0.36644], angle=-1.72653, phase=1.5708) +barrier q[0] +barrier q[1] +H q[0] +Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.28903 -0.42028 -0.86013], angle=1.66208, phase=1.5708) +barrier q[0] +barrier q[1] +""", + ), + ( + CircuitBuilder(3) + .H(0) + .Ry(0, Float(2)) + .barrier(2) + .barrier(0) + .barrier(1) + .H(0) + .H(1) + .Ry(1, Float(2)) + .barrier(1) + .H(2) + .barrier(2) + .barrier(0) + .barrier(1) + .to_circuit(), + """version 3.0 + +qubit[3] q + +Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +barrier q[2] +barrier q[0] +barrier q[1] +H q[0] +Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +H q[2] +barrier q[1] +barrier q[2] +barrier q[0] +barrier q[1] +""", + ), + ( + CircuitBuilder(2) + .H(0) + .Ry(0, Float(2)) + .barrier(1) + .barrier(0) + .barrier(1) + .H(0) + .H(1) + .Ry(1, Float(2)) + .barrier(1) + .to_circuit(), + """version 3.0 + +qubit[2] q + +Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +barrier q[1] +barrier q[0] +barrier q[1] +H q[0] +Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +barrier q[1] +""", + ), + ], + ids=["generic_case", "circuit_with_irregular_barrier_order", "repeating_barrier"], +) +def test_rearrange_barriers_after_merge_single_qubit_gates( + circuit: Circuit, expected_result: str, merger: SingleQubitGatesMerger +) -> None: + circuit.merge(merger=merger) + rearrange_barriers(circuit.ir) + assert str(circuit) == expected_result diff --git a/test/parser/libqasm/test_libqasm.py b/test/parser/libqasm/test_libqasm.py index f2d62235..cc115d86 100644 --- a/test/parser/libqasm/test_libqasm.py +++ b/test/parser/libqasm/test_libqasm.py @@ -1,17 +1,14 @@ +import math + import pytest -from opensquirrel.default_gates import CNOT, CR, CRk, H, I, Ry, X, default_gate_aliases, default_gate_set -from opensquirrel.ir import Float +from opensquirrel import CNOT, CR, CRk, H, I, Ry, X +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate from opensquirrel.parser.libqasm.parser import Parser -@pytest.fixture(name="parser") -def parser_fixture() -> Parser: - return Parser(gate_set=default_gate_set, gate_aliases=default_gate_aliases) - - -def test_simple(parser: Parser) -> None: - circuit = parser.circuit_from_string( +def test_simple() -> None: + circuit = Parser().circuit_from_string( """ version 3.0 @@ -19,20 +16,20 @@ def test_simple(parser: Parser) -> None: H q[0] I q[0] -Ry q[1], 1.234 +Ry(1.234) q[1] CNOT q[0], q[1] -CR q[1], q[0], 5.123 -CRk q[0], q[1], 23 +CR(5.123) q[1], q[0] +CRk(23) q[0], q[1] """, ) assert circuit.qubit_register_size == 2 assert circuit.qubit_register_name == "q" - assert circuit.ir.statements == [H(0), I(0), Ry(1, Float(1.234)), CNOT(0, 1), CR(1, 0, Float(5.123)), CRk(0, 1, 23)] + assert circuit.ir.statements == [H(0), I(0), Ry(1, 1.234), CNOT(0, 1), CR(1, 0, 5.123), CRk(0, 1, 23)] -def test_sgmq(parser: Parser) -> None: - circuit = parser.circuit_from_string( +def test_sgmq() -> None: + circuit = Parser().circuit_from_string( """ version 3.0 @@ -40,41 +37,106 @@ def test_sgmq(parser: Parser) -> None: H q[5:9] X q[13,17] -CRk q[0, 3], q[1, 4], 23 +CRk(23) q[0, 3], q[1, 4] """, ) assert circuit.qubit_register_size == 20 assert circuit.qubit_register_name == "q" - assert circuit.ir.statements == [H(5), H(6), H(7), H(8), H(9), X(13), X(17), CRk(0, 1, 23), CRk(3, 4, 23)] + assert circuit.ir.statements == [ + H(5), + H(6), + H(7), + H(8), + H(9), + X(13), + X(17), + CRk(0, 1, 23), + CRk(3, 4, 23), + ] + + +def test_error() -> None: + with pytest.raises( + IOError, + match="Error at :1:30..31: failed to resolve variable 'q'", + ): + Parser().circuit_from_string("version 3.0; qubit[20] qu; H q[5]") -def test_error(parser: Parser) -> None: - with pytest.raises(IOError, match="Error at :1:30..31: failed to resolve variable 'q'"): - parser.circuit_from_string("version 3.0; qubit[20] qu; H q[5]") +@pytest.mark.parametrize( + ("circuit_string", "expected_output"), + [ + ( + "version 3.0\nqubit q\n", + "version 3.0\n\nqubit[1] q\n", + ), + ( + "version 3.0\nqubit q\nbit b\n", + "version 3.0\n\nqubit[1] q\nbit[1] b\n", + ), + ( + "version 3.0\nbit b\n", + "version 3.0\n\nbit[1] b\n", + ), + ( + "version 3.0", + "version 3.0\n", + ), + ( + "version 3.0; qubit q", + "version 3.0\n\nqubit[1] q\n", + ), + ( + "version 3.0; qubit q; bit b", + "version 3.0\n\nqubit[1] q\nbit[1] b\n", + ), + ( + "version 3.0; bit b", + "version 3.0\n\nbit[1] b\n", + ), + ], + ids=[ + "only_qubit", + "qubit_and_bit", + "only_bit", + "empty_declaration", + "semicolon_qubit", + "semicolon_qubit_and_bit", + "semicolon_bit", + ], +) +def test_simplest(circuit_string: str, expected_output: str) -> None: + circuit = Parser().circuit_from_string(circuit_string) + assert str(circuit) == expected_output @pytest.mark.parametrize( - ("error_message", "circuit_string"), + ("circuit_string", "expected_result"), [ ( - r"parsing error: Error at :1:26\.\.27: " - r"failed to resolve instruction 'H' with argument pack \(qubit, int\)", - "version 3.0; qubit[1] q; H q[0], 1", + "version 3.0; qubit q; inv.X q", + [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * -1, phase=math.pi / 2 * -1)], + ), + ( + "version 3.0; qubit q; pow(2).Rx(pi) q", + [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * 2, phase=0)], ), ( - r"parsing error: Error at :1:26\.\.30: " - r"failed to resolve instruction 'CNOT' with argument pack \(qubit, int\)", - "version 3.0; qubit[1] q; CNOT q[0], 1", + "version 3.0; qubit q; pow(2).inv.X q", + [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * -2, phase=math.pi / 2 * -2)], ), ( - r"parsing error: Error at :1:26\.\.28: " - r"failed to resolve instruction 'Ry' with argument pack \(qubit, float, int\)", - "version 3.0; qubit[3] q; Ry q[0], 1.23, 1", + "version 3.0; qubit[2] q; ctrl.pow(2).inv.X q[0], q[1]", + [ + ControlledGate( + 0, BlochSphereRotation(qubit=1, axis=(1, 0, 0), angle=math.pi * -2, phase=math.pi / 2 * -2) + ) + ], ), ], - ids=["H[q,i]", "CNOT[q,i]", "Ry[q,f,i]"], + ids=["inv", "pow_2_Rx", "pow_2_inv", "ctrl_pow_2_inv"], ) -def test_wrong_gate_argument_number_or_types(parser: Parser, error_message: str, circuit_string: str) -> None: - with pytest.raises(IOError, match=error_message): - parser.circuit_from_string(circuit_string) +def test_gate_modifiers(circuit_string: str, expected_result: list[Gate]) -> None: + circuit = Parser().circuit_from_string(circuit_string) + assert circuit.ir.statements == expected_result diff --git a/test/reindexer/test_qubit_reindexer.py b/test/reindexer/test_qubit_reindexer.py index 226533f7..58e231cc 100644 --- a/test/reindexer/test_qubit_reindexer.py +++ b/test/reindexer/test_qubit_reindexer.py @@ -4,9 +4,8 @@ import pytest -from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.default_gates import Y90, X -from opensquirrel.ir import Bit, BlochSphereRotation, ControlledGate, Gate, MatrixGate, Measure +from opensquirrel import Y90, Circuit, CircuitBuilder, X +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate, MatrixGate, Measure from opensquirrel.reindexer.qubit_reindexer import get_reindexed_circuit @@ -23,7 +22,7 @@ def replacement_gates_1() -> list[Gate]: def replacement_gates_2() -> list[Gate | Measure]: return [ - Measure(1, Bit(1)), + Measure(1, 1), BlochSphereRotation(3, axis=(0, 0, 1), angle=math.pi), MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [0, 3]), ControlledGate(1, X(2)), @@ -32,7 +31,7 @@ def replacement_gates_2() -> list[Gate | Measure]: def circuit_2_reindexed() -> Circuit: builder = CircuitBuilder(4, 4) - builder.measure(0, Bit(0)) + builder.measure(0, 0) builder.ir.add_gate(BlochSphereRotation(2, axis=(0, 0, 1), angle=math.pi)) builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [1, 2])) builder.ir.add_gate(ControlledGate(0, X(3))) diff --git a/test/router/test_routing_checker.py b/test/router/test_routing_checker.py new file mode 100644 index 00000000..6823059e --- /dev/null +++ b/test/router/test_routing_checker.py @@ -0,0 +1,52 @@ +# Tests for routing checker pass + +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.router.routing_checker import RoutingChecker + + +@pytest.fixture(name="router") +def router_fixture() -> RoutingChecker: + connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} + return RoutingChecker(connectivity) + + +@pytest.fixture +def circuit1() -> Circuit: + builder = CircuitBuilder(5) + builder.H(0) + builder.CNOT(0, 1) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(2, 4) + builder.CNOT(3, 4) + return builder.to_circuit() + + +@pytest.fixture +def circuit2() -> Circuit: + builder = CircuitBuilder(5) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(0, 3) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(1, 3) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + return builder.to_circuit() + + +def test_routing_checker_possible_1to1_mapping(router: RoutingChecker, circuit1: Circuit) -> None: + try: + router.route(circuit1.ir) + except ValueError: + pytest.fail("route() raised ValueError unexpectedly") + + +def test_routing_checker_impossible_1to1_mapping(router: RoutingChecker, circuit2: Circuit) -> None: + with pytest.raises(ValueError, match="The following qubit interactions in the circuit prevent a 1-to-1 mapping:.*"): + router.route(circuit2.ir) diff --git a/test/test_circuit_builder.py b/test/test_circuit_builder.py index 7ef3b085..3e6c1f60 100644 --- a/test/test_circuit_builder.py +++ b/test/test_circuit_builder.py @@ -1,15 +1,16 @@ +import math + import pytest +from opensquirrel import CNOT, CZ, SWAP, H, I, Rx, Ry, Rz, X, Y, Z from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.default_gates import CNOT, H, I -from opensquirrel.ir import Bit, Comment, Measure +from opensquirrel.ir import Barrier, Init, Instruction, Measure, Reset, Wait class TestCircuitBuilder: def test_simple(self) -> None: builder = CircuitBuilder(2) - builder.comment("A single line comment.") builder.H(0) builder.CNOT(0, 1) @@ -18,44 +19,31 @@ def test_simple(self) -> None: assert circuit.qubit_register_size == 2 assert circuit.qubit_register_name == "q" assert circuit.ir.statements == [ - Comment("A single line comment."), H(0), CNOT(0, 1), ] - def test_identity(self) -> None: - builder = CircuitBuilder(1) - builder.I(0) - + @pytest.mark.parametrize( + ("builder", "expected_result"), + [ + (CircuitBuilder(2, 2).I(0).X(0).Y(0).Z(0), [I(0), X(0), Y(0), Z(0)]), + (CircuitBuilder(2, 2).Rx(0, -1).Ry(1, 1).Rz(0, math.pi), [Rx(0, -1), Ry(1, 1), Rz(0, math.pi)]), + (CircuitBuilder(2, 2).CZ(0, 1).CNOT(1, 0).SWAP(0, 1), [CZ(0, 1), CNOT(1, 0), SWAP(0, 1)]), + (CircuitBuilder(2, 2).measure(0, 0).measure(1, 1), [Measure(0, 0), Measure(1, 1)]), + (CircuitBuilder(2, 2).init(0).init(1), [Init(0), Init(1)]), + (CircuitBuilder(2, 2).reset(0).reset(1), [Reset(0), Reset(1)]), + (CircuitBuilder(2, 2).barrier(0).barrier(1), [Barrier(0), Barrier(1)]), + (CircuitBuilder(2, 2).wait(0, 1).wait(1, 2), [Wait(0, 1), Wait(1, 2)]), + ], + ids=["Pauli_gates", "rotation_gates", "two-qubit_gates", "measure", "init", "reset", "barrier", "wait"], + ) + def test_instructions(self, builder: CircuitBuilder, expected_result: list[Instruction]) -> None: circuit = builder.to_circuit() - - assert circuit.qubit_register_size == 1 - assert circuit.qubit_register_name == "q" - assert circuit.ir.statements == [I(0)] - - def test_single_measure(self) -> None: - builder = CircuitBuilder(1, 1) - builder.measure(0, Bit(0)) - - circuit = builder.to_circuit() - - assert circuit.qubit_register_size == 1 - assert circuit.qubit_register_name == "q" - assert circuit.ir.statements == [Measure(0, Bit(0))] - - def test_circuit_measure(self) -> None: - builder = CircuitBuilder(2, 2) - - builder.H(0) - builder.CNOT(0, 1) - builder.measure(0, Bit(0)) - builder.measure(1, Bit(1)) - - circuit = builder.to_circuit() - assert circuit.qubit_register_size == 2 assert circuit.qubit_register_name == "q" - assert circuit.ir.statements == [H(0), CNOT(0, 1), Measure(0, Bit(0)), Measure(1, Bit(1))] + assert circuit.bit_register_size == 2 + assert circuit.bit_register_name == "b" + assert circuit.ir.statements == expected_result def test_chain(self) -> None: builder = CircuitBuilder(3) @@ -73,11 +61,11 @@ def test_gate_index_error(self) -> None: def test_measure_index_error(self) -> None: builder = CircuitBuilder(2, 1) with pytest.raises(IndexError, match="bit index is out of bounds"): - builder.H(0).measure(0, Bit(10)).to_circuit() + builder.H(0).measure(0, 10).to_circuit() def test_unknown_instruction(self) -> None: builder = CircuitBuilder(3) - with pytest.raises(ValueError, match="unknown instruction `unknown`"): + with pytest.raises(ValueError, match="unknown instruction 'unknown'"): builder.unknown(0) def test_wrong_number_of_arguments(self) -> None: diff --git a/test/test_init.py b/test/test_init.py new file mode 100644 index 00000000..783b4a60 --- /dev/null +++ b/test/test_init.py @@ -0,0 +1,32 @@ +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.ir import Init + + +@pytest.mark.parametrize( + ("cqasm_string", "expected_result"), + [ + ( + "version 3.0; qubit[2] q; init q[1]; init q[0]", + "version 3.0\n\nqubit[2] q\n\ninit q[1]\ninit q[0]\n", + ), + ( + "version 3.0; qubit[4] q; init q[2:3]; init q[1, 0]", + "version 3.0\n\nqubit[4] q\n\ninit q[2]\ninit q[3]\ninit q[1]\ninit q[0]\n", + ), + ], + ids=["init", "init sgmq"], +) +def test_init_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: + qc = Circuit.from_string(cqasm_string) + assert str(qc) == expected_result + + +def test_init_in_circuit_builder() -> None: + builder = CircuitBuilder(2) + builder.init(0).init(1) + qc = builder.to_circuit() + assert qc.qubit_register_size == 2 + assert qc.qubit_register_name == "q" + assert qc.ir.statements == [Init(0), Init(1)] diff --git a/test/test_integration.py b/test/test_integration.py index d1d19d8e..5d66d5f2 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -1,19 +1,25 @@ # This integration test also serves as example and code documentation. +from __future__ import annotations import importlib.util import pytest from opensquirrel.circuit import Circuit -from opensquirrel.decomposer.aba_decomposer import XYXDecomposer, XZXDecomposer, ZYZDecomposer -from opensquirrel.decomposer.cnot_decomposer import CNOTDecomposer -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer -from opensquirrel.default_gates import CNOT, CZ, H -from opensquirrel.exporter.export_format import ExportFormat from opensquirrel.ir import Measure - - -def test_Spin2_backend() -> None: +from opensquirrel.passes.decomposer import ( + CNOT2CZDecomposer, + CNOTDecomposer, + McKayDecomposer, + SWAP2CNOTDecomposer, + XYXDecomposer, +) +from opensquirrel.passes.exporter import ExportFormat +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.passes.router import RoutingChecker + + +def test_spin2plus_backend() -> None: qc = Circuit.from_string( """ version 3.0 @@ -24,92 +30,101 @@ def test_Spin2_backend() -> None: /* This is a multi- line comment block */ - qubit[4] q + qubit[2] q bit[4] b - H q[0:2] + H q[0:1] Rx(1.5789) q[0] Ry(-0.2) q[0] Rz(1.5707963) q[0] CNOT q[1], q[0] - CR(2.123) q[2], q[3] - CRk(2) q[0], q[2] - b = measure q + CR(2.123) q[0], q[1] + CRk(2) q[0], q[1] + SWAP q[0], q[1] + b[1,3] = measure q """, ) + # Check whether the above algorithm can be mapped to a dummy chip topology + connectivity = {"0": [1], "1": [0]} + + qc.route(router=RoutingChecker(connectivity=connectivity)) + + qc.decompose(decomposer=SWAP2CNOTDecomposer()) + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates qc.decompose(decomposer=CNOTDecomposer()) # Replace CNOT gates with CZ gates - qc.replace( - CNOT, - lambda control, target: [ - H(target), - CZ(control, target), - H(target), - ], - ) + qc.decompose(decomposer=CNOT2CZDecomposer()) - # Merge single-qubit gates and decompose with McKay decomposition. - qc.merge_single_qubit_gates() + # Merge single-qubit gates + qc.merge(merger=SingleQubitGatesMerger()) + + # Decompose single-qubit gates to spin backend native gates with McKay decomposer qc.decompose(decomposer=McKayDecomposer()) assert ( str(qc) == """version 3.0 -qubit[4] q +qubit[2] q bit[4] b Rz(1.5707963) q[1] X90 q[1] Rz(1.5707963) q[1] -Rz(0.0081037174) q[0] -X90 q[0] -Rz(1.5707964) q[0] +Rz(1.5789) q[0] X90 q[0] -Rz(-1.3707963) q[0] +Rz(-2.9415926) q[0] CZ q[1], q[0] -Rz(1.5707963) q[2] -X90 q[2] -Rz(1.5707963) q[2] -Rz(1.0615) q[3] -X90 q[3] -Rz(1.5707963) q[3] -X90 q[3] -CZ q[2], q[3] -Rz(1.5707963) q[3] -X90 q[3] -Rz(2.0800926) q[3] -X90 q[3] -Rz(1.5707963) q[3] -CZ q[2], q[3] -Rz(1.5707963) q[0] +Rz(-1.5707963) q[0] X90 q[0] Rz(1.5707963) q[0] -Rz(1.8468982) q[2] -X90 q[2] -Rz(1.5707963) q[2] -X90 q[2] -CZ q[0], q[2] -Rz(1.5707963) q[2] -X90 q[2] -Rz(2.3561945) q[2] -X90 q[2] -Rz(1.5707963) q[2] -CZ q[0], q[2] +Rz(2.6322964) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(2.0800926) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(1.0615) q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(2.3561946) q[1] +X90 q[1] +Rz(1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(2.3561946) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] Rz(0.78539816) q[0] -b[0] = measure q[0] -b[1] = measure q[1] -Rz(1.5707963) q[2] -X90 q[2] -Rz(1.5707963) q[2] -b[2] = measure q[2] -Rz(1.5707963) q[3] -X90 q[3] -Rz(1.5707963) q[3] -b[3] = measure q[3] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(1.5707963) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +b[1] = measure q[0] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +b[3] = measure q[1] """ ) @@ -127,26 +142,21 @@ def test_hectoqubit_backend() -> None: CNOT q[0], q[1] CRk(4) q[0], q[1] H q[0] - b[0:1] = measure q[0:1] - """, + b[1:2] = measure q[0:1] + """ ) # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates qc.decompose(decomposer=CNOTDecomposer()) # Replace CNOT gates with CZ gates - qc.replace( - CNOT, - lambda control, target: [ - H(target), - CZ(control, target), - H(target), - ], - ) + qc.decompose(decomposer=CNOT2CZDecomposer()) + + # Merge single-qubit gates + qc.merge(merger=SingleQubitGatesMerger()) - # Merge single-qubit gates and decompose with the Rz-Ry-Rz decomposer. - qc.merge_single_qubit_gates() - qc.decompose(decomposer=ZYZDecomposer()) + # Decompose single-qubit gates to HectoQubit backend native gates with the XYX decomposer + qc.decompose(decomposer=XYXDecomposer()) if importlib.util.find_spec("quantify_scheduler") is None: with pytest.raises( @@ -155,7 +165,7 @@ def test_hectoqubit_backend() -> None: ): qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) else: - exported_schedule = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + exported_schedule, bit_string_mapping = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) assert exported_schedule.name == "Exported OpenSquirrel circuit" @@ -165,25 +175,21 @@ def test_hectoqubit_backend() -> None: ] assert operations == [ - "Rz(180, 'q[1]')", + "Rxy(180, 0, 'q[1]')", "Rxy(90, 90, 'q[1]')", + "Rxy(180, 0, 'q[1]')", "CZ (q[0], q[1])", - "Rz(180, 'q[1]')", + "Rxy(180, 0, 'q[1]')", "Rxy(90, 90, 'q[1]')", "CZ (q[0], q[1])", - "Rz(90, 'q[1]')", - "Rxy(11.25, 90, 'q[1]')", - "Rz(-90, 'q[1]')", + "Rxy(-11.25, 0, 'q[1]')", "CZ (q[0], q[1])", - "Rz(90, 'q[1]')", - "Rxy(-11.25, 90, 'q[1]')", - "Rz(-90, 'q[1]')", + "Rxy(11.25, 0, 'q[1]')", "CZ (q[0], q[1])", - "Rz(11.25, 'q[0]')", + "Rxy(180, 0, 'q[0]')", "Rxy(-90, 90, 'q[0]')", - "Rz(180, 'q[0]')", + "Rxy(11.25, 0, 'q[0]')", "Measure q[0]", - "Rz(180, 'q[1]')", "Rxy(90, 90, 'q[1]')", "Measure q[1]", ] @@ -195,133 +201,138 @@ def test_hectoqubit_backend() -> None: if operation.data["gate_info"]["operation_type"] == "measure" ] + ir_acq_index_record = [0] * qc.qubit_register_size + ir_bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * qc.bit_register_size for i, ir_measure in enumerate(ir_measures): - assert qs_measures[i]["acq_channel_override"] == ir_measure.qubit.index - assert qs_measures[i]["acq_index"] == ir_measure.qubit.index + qubit_index = ir_measure.qubit.index + ir_acq_index = ir_acq_index_record[qubit_index] + ir_bit_string_mapping[ir_measure.bit.index] = (ir_acq_index, qubit_index) + assert qs_measures[i]["acq_channel_override"] == qubit_index + assert qs_measures[i]["acq_index"] == ir_acq_index assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" + ir_acq_index_record[qubit_index] += 1 + + assert len(bit_string_mapping) == qc.bit_register_size + assert bit_string_mapping == ir_bit_string_mapping -def test_hectoqubit_circuit_xyx() -> None: +def test_hectoqubit_backend_allxy() -> None: qc = Circuit.from_string( """ version 3.0 qubit[3] q - bit[3] b + bit[10] b - H q[1] - CZ q[0], q[1] - CNOT q[0], q[1] - CRk(4) q[0], q[1] - H q[0] - b[0:1] = measure q[0:1] - """, - ) + reset q - # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer()) + Rx(0.0) q[0] + Rx(0.0) q[0] + b[0] = measure q[0] - # Replace CNOT gates with CZ gates - qc.replace( - CNOT, - lambda control, target: [ - H(target), - CZ(control, target), - H(target), - ], - ) + Rx(3.141592653589793) q[1] + Rx(3.141592653589793) q[1] + b[1] = measure q[1] - # Merge single-qubit gates and decompose with the Rx-Ry-Rx decomposer. - qc.merge_single_qubit_gates() - qc.decompose(decomposer=XYXDecomposer()) - assert ( - str(qc) - == """version 3.0 + Ry(3.141592653589793) q[0] + Ry(3.141592653589793) q[0] + b[2] = measure q[0] -qubit[3] q -bit[3] b + Rx(3.141592653589793) q[2] + Ry(3.141592653589793) q[2] + b[3] = measure q[2] -Ry(1.5707963) q[1] -Rx(3.1415927) q[1] -CZ q[0], q[1] -Ry(1.5707963) q[1] -Rx(3.1415927) q[1] -CZ q[0], q[1] -Rx(0.1963496) q[1] -CZ q[0], q[1] -Rx(-0.1963496) q[1] -CZ q[0], q[1] -Rx(-3.1415927) q[0] -Ry(-1.5707963) q[0] -Rx(0.1963496) q[0] -b[0] = measure q[0] -Ry(1.5707963) q[1] -Rx(3.1415927) q[1] -b[1] = measure q[1] -""" - ) + Ry(3.141592653589793) q[0] + Rx(3.141592653589793) q[0] + b[4] = measure q[0] + Rx(3.141592653589793) q[0] + Rx(0.0) q[0] + Ry(3.141592653589793) q[2] + Rx(0.0) q[2] + Rx(1.5707963267948966) q[1] + Rx(1.5707963267948966) q[1] -def test_HectoQubit_circuit_xzx() -> None: - qc = Circuit.from_string( + b[6] = measure q[2] + b[5] = measure q[0] + b[8] = measure q[0] + b[7] = measure q[1] + + b[9] = measure q[0] """ - version 3.0 + ) - qubit[3] q - bit[3] b + # No compilation passes are performed - H q[1] - CZ q[0], q[1] - CNOT q[0], q[1] - CRk(4) q[0], q[1] - H q[0] - b[0:1] = measure q[0:1] - """, - ) + if importlib.util.find_spec("quantify_scheduler") is None: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on " "your system", + ): + qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + else: + exported_schedule, bit_string_mapping = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) - # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer()) + assert exported_schedule.name == "Exported OpenSquirrel circuit" - # Replace CNOT gates with CZ gates - qc.replace( - CNOT, - lambda control, target: [ - H(target), - CZ(control, target), - H(target), - ], - ) + operations = [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] - # Merge single-qubit gates and decompose with the Rx-Ry-Rx decomposer. - qc.merge_single_qubit_gates() - qc.decompose(decomposer=XZXDecomposer()) + assert operations == [ + "Reset q[0]", + "Reset q[1]", + "Reset q[2]", + "Rxy(0, 0, 'q[0]')", + "Rxy(0, 0, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[1]')", + "Rxy(180, 0, 'q[1]')", + "Measure q[1]", + "Rxy(180, 90, 'q[0]')", + "Rxy(180, 90, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[2]')", + "Rxy(180, 90, 'q[2]')", + "Measure q[2]", + "Rxy(180, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[0]')", + "Rxy(0, 0, 'q[0]')", + "Rxy(180, 90, 'q[2]')", + "Rxy(0, 0, 'q[2]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Measure q[2]", + "Measure q[0]", + "Measure q[0]", + "Measure q[1]", + "Measure q[0]", + ] - assert ( - str(qc) - == """version 3.0 + qs_measures = [ + operation.data["gate_info"] + for operation in exported_schedule.operations.values() + if operation.data["gate_info"]["operation_type"] == "measure" + ] -qubit[3] q -bit[3] b + ir_measures = [instruction for instruction in qc.ir.statements if isinstance(instruction, Measure)] -Rx(1.5707963) q[1] -Rz(1.5707963) q[1] -Rx(1.5707963) q[1] -CZ q[0], q[1] -Rx(1.5707963) q[1] -Rz(1.5707963) q[1] -Rx(1.5707963) q[1] -CZ q[0], q[1] -Rx(0.1963496) q[1] -CZ q[0], q[1] -Rx(-0.1963496) q[1] -CZ q[0], q[1] -Rx(-1.5707964) q[0] -Rz(-1.5707963) q[0] -Rx(-1.3744467) q[0] -b[0] = measure q[0] -Rx(1.5707963) q[1] -Rz(1.5707963) q[1] -Rx(1.5707963) q[1] -b[1] = measure q[1] -""" - ) + ir_acq_index_record = [0] * qc.qubit_register_size + ir_bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * qc.bit_register_size + for i, ir_measurement in enumerate(ir_measures): + qubit_index = ir_measurement.qubit.index + ir_acq_index = ir_acq_index_record[qubit_index] + ir_bit_string_mapping[ir_measurement.bit.index] = ( + ir_acq_index, + qubit_index, + ) + assert qs_measures[i]["acq_channel_override"] == qubit_index + assert qs_measures[i]["acq_index"] == ir_acq_index + assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" + ir_acq_index_record[qubit_index] += 1 + + assert len(bit_string_mapping) == qc.bit_register_size + assert bit_string_mapping == ir_bit_string_mapping diff --git a/test/test_ir.py b/test/test_ir.py index 2bb97db4..9acb0ed9 100644 --- a/test/test_ir.py +++ b/test/test_ir.py @@ -6,11 +6,13 @@ import numpy as np import pytest -from numpy.typing import ArrayLike +from numpy.typing import NDArray +from opensquirrel import I from opensquirrel.common import ATOL from opensquirrel.ir import ( Axis, + AxisLike, Bit, BlochSphereRotation, ControlledGate, @@ -43,7 +45,7 @@ def test_axis_getter(self, axis: Axis) -> None: (Axis(0, 1, 0), [0, 1, 0]), ], ) - def test_axis_setter_no_error(self, axis: Axis, new_axis: ArrayLike, expected_axis: ArrayLike) -> None: + def test_axis_setter_no_error(self, axis: Axis, new_axis: AxisLike, expected_axis: list[float]) -> None: axis.value = new_axis # type: ignore[assignment] np.testing.assert_array_equal(axis, expected_axis) @@ -58,6 +60,7 @@ def test_axis_setter_no_error(self, axis: Axis, new_axis: ArrayLike, expected_ax ValueError, "axis requires an ArrayLike of length 3, but received an ArrayLike of length 4", ), + ([0, 0, 0], ValueError, "axis requires at least one element to be non-zero"), ], ) def test_axis_setter_with_error( @@ -92,6 +95,63 @@ def test_eq_true(self, axis: Axis, other: Any) -> None: def test_eq_false(self, axis: Axis, other: Any) -> None: assert axis != other + @pytest.mark.parametrize( + ("axis", "expected"), + [ + ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), + ([0, 0, 0], ValueError), + ([1, 2], ValueError), + ([1, 2, 3, 4], ValueError), + ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), + (["a", "b", "c"], TypeError), + ], + ) + def test_constructor(self, axis: AxisLike, expected: Any) -> None: + if isinstance(expected, type) and issubclass(expected, Exception): + with pytest.raises(expected): + Axis(axis) + else: + assert isinstance(expected, np.ndarray) + obj = Axis(axis) + np.testing.assert_array_equal(obj.value, expected) + + @pytest.mark.parametrize( + ("axis", "expected"), + [ + ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), + ([0, 0, 0], ValueError), + ([1, 2], ValueError), + ([1, 2, 3, 4], ValueError), + ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), + (["a", "b", "c"], TypeError), + ], + ) + def test_parse(self, axis: AxisLike, expected: Any) -> None: + if isinstance(expected, type) and issubclass(expected, Exception): + with pytest.raises(expected): + Axis.parse(axis) + else: + assert isinstance(expected, np.ndarray) + obj = Axis.parse(axis) + np.testing.assert_array_equal(obj, expected) + + @pytest.mark.parametrize( + ("axis", "expected"), + [ + (np.array([1, 0, 0], dtype=np.float64), np.array([1, 0, 0], dtype=np.float64)), + (np.array([0, 1, 0], dtype=np.float64), np.array([0, 1, 0], dtype=np.float64)), + (np.array([0, 0, 1], dtype=np.float64), np.array([0, 0, 1], dtype=np.float64)), + ( + np.array([1, 1, 1], dtype=np.float64), + np.array([1 / np.sqrt(3), 1 / np.sqrt(3), 1 / np.sqrt(3)], dtype=np.float64), + ), + ], + ) + def test_normalize(self, axis: AxisLike, expected: NDArray[np.float64]) -> None: + obj = Axis.normalize(np.array(axis, dtype=np.float64)) + assert isinstance(expected, np.ndarray) + np.testing.assert_array_almost_equal(obj, expected) + class TestIR: def test_cnot_equality(self) -> None: @@ -179,19 +239,19 @@ def test_hash_difference_bit_qubit(self) -> None: class TestMeasure: @pytest.fixture(name="measure") def measure_fixture(self) -> Measure: - return Measure(42, Bit(42), axis=(0, 0, 1)) + return Measure(42, 42, axis=(0, 0, 1)) def test_repr(self, measure: Measure) -> None: expected_repr = "Measure(qubit=Qubit[42], bit=Bit[42], axis=Axis[0. 0. 1.])" assert repr(measure) == expected_repr def test_equality(self, measure: Measure) -> None: - measure_eq = Measure(42, Bit(42), axis=(0, 0, 1)) + measure_eq = Measure(42, 42, axis=(0, 0, 1)) assert measure == measure_eq @pytest.mark.parametrize( "other_measure", - [Measure(43, Bit(43), axis=(0, 0, 1)), Measure(42, Bit(42), axis=(1, 0, 0)), "test"], + [Measure(43, 43, axis=(0, 0, 1)), Measure(42, 42, axis=(1, 0, 0)), "test"], ids=["qubit", "axis", "type"], ) def test_inequality(self, measure: Measure, other_measure: Measure | str) -> None: @@ -209,10 +269,6 @@ class TestBlochSphereRotation: def gate_fixture(self) -> BlochSphereRotation: return BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau) - def test_identity(self) -> None: - expected_result = BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=0, phase=0) - assert BlochSphereRotation.identity(42) == expected_result - @pytest.mark.parametrize( "other_gate", [ @@ -245,7 +301,7 @@ def test_get_qubit_operands(self, gate: BlochSphereRotation) -> None: assert gate.get_qubit_operands() == [Qubit(42)] def test_is_identity(self, gate: BlochSphereRotation) -> None: - assert BlochSphereRotation.identity(42).is_identity() + assert I(42).is_identity() assert not gate.is_identity() @@ -320,7 +376,7 @@ def test_init(self, value: SupportsInt) -> None: class TestBit: def test_type_error(self) -> None: - with pytest.raises(TypeError, match="index must be an int"): + with pytest.raises(TypeError, match="index must be a BitLike"): Bit("f") # type: ignore def test_init(self) -> None: diff --git a/test/test_measure.py b/test/test_measure.py index c7a31f8b..b1d64b5c 100644 --- a/test/test_measure.py +++ b/test/test_measure.py @@ -1,5 +1,6 @@ from opensquirrel import Circuit -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.passes.decomposer import McKayDecomposer +from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger def test_measure() -> None: @@ -112,7 +113,7 @@ def test_measure_order() -> None: b[1, 0] = measure q[1, 0] """, ) - qc.merge_single_qubit_gates() + qc.merge(merger=SingleQubitGatesMerger()) qc.decompose(decomposer=McKayDecomposer()) assert ( str(qc) @@ -147,7 +148,7 @@ def test_multiple_qubit_bit_definitions_and_mid_circuit_measure_instructions() - b0 = measure q0 """, ) - qc.merge_single_qubit_gates() + qc.merge(merger=SingleQubitGatesMerger()) qc.decompose(decomposer=McKayDecomposer()) assert ( str(qc) diff --git a/test/test_registers.py b/test/test_registers.py index d8a85bc5..a356f25b 100644 --- a/test/test_registers.py +++ b/test/test_registers.py @@ -1,5 +1,6 @@ from opensquirrel import Circuit -from opensquirrel.decomposer.mckay_decomposer import McKayDecomposer +from opensquirrel.passes.decomposer import McKayDecomposer +from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger def test_qubit_variable_b_and_bit_variable_q() -> None: @@ -18,7 +19,7 @@ def test_qubit_variable_b_and_bit_variable_q() -> None: q[0] = measure b[0] """, ) - qc.merge_single_qubit_gates() + qc.merge(merger=SingleQubitGatesMerger()) qc.decompose(decomposer=McKayDecomposer()) assert ( str(qc) diff --git a/test/test_replacer.py b/test/test_replacer.py index f38375b3..0f0b5e39 100644 --- a/test/test_replacer.py +++ b/test/test_replacer.py @@ -1,14 +1,11 @@ from __future__ import annotations -import math - import pytest -from opensquirrel import CircuitBuilder -from opensquirrel.decomposer import Decomposer -from opensquirrel.decomposer.general_decomposer import check_gate_replacement, decompose, replace -from opensquirrel.default_gates import CNOT, Y90, H, I, Ry, Rz, X, Z, sqrtSWAP -from opensquirrel.ir import BlochSphereRotation, Float, Gate +from opensquirrel import CNOT, Y90, CircuitBuilder, H, I, X +from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.passes.decomposer import Decomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement, decompose, replace class TestCheckGateReplacement: @@ -39,51 +36,6 @@ def test_wrong_qubit(self, gate: Gate, replacement_gates: list[Gate], error_msg: with pytest.raises(ValueError, match=error_msg): check_gate_replacement(gate, replacement_gates) - def test_cnot_as_sqrt_swap(self) -> None: - # https://en.wikipedia.org/wiki/Quantum_logic_gate#/media/File:Qcircuit_CNOTsqrtSWAP2.svg - c = 0 - t = 1 - check_gate_replacement( - CNOT(control=c, target=t), - [ - Ry(t, Float(math.pi / 2)), - sqrtSWAP(c, t), - Z(c), - sqrtSWAP(c, t), - Rz(c, Float(-math.pi / 2)), - Rz(t, Float(-math.pi / 2)), - Ry(t, Float(-math.pi / 2)), - ], - ) - - with pytest.raises(ValueError, match="replacement for gate CNOT does not preserve the quantum state"): - check_gate_replacement( - CNOT(control=c, target=t), - [ - Ry(t, Float(math.pi / 2)), - sqrtSWAP(c, t), - Z(c), - sqrtSWAP(c, t), - Rz(c, Float(-math.pi / 2 + 0.01)), - Rz(t, Float(-math.pi / 2)), - Ry(t, Float(-math.pi / 2)), - ], - ) - - with pytest.raises(ValueError, match="replacement for gate CNOT does not seem to operate on the right qubits"): - check_gate_replacement( - CNOT(control=c, target=t), - [ - Ry(t, Float(math.pi / 2)), - sqrtSWAP(c, t), - Z(c), - sqrtSWAP(c, 2), - Rz(c, Float(-math.pi / 2 + 0.01)), - Rz(t, Float(-math.pi / 2)), - Ry(t, Float(-math.pi / 2)), - ], - ) - def test_large_number_of_qubits(self) -> None: # If we were building the whole circuit matrix, this would run out of memory. check_gate_replacement(H(9234687), [Y90(9234687), X(9234687)]) @@ -123,7 +75,6 @@ def decompose(self, g: Gate) -> list[Gate]: def test_replace(self) -> None: builder1 = CircuitBuilder(3) builder1.H(0) - builder1.comment("Test comment.") circuit = builder1.to_circuit() replace(circuit.ir, H, lambda q: [Y90(q), X(q)]) @@ -131,7 +82,6 @@ def test_replace(self) -> None: builder2 = CircuitBuilder(3) builder2.Y90(0) builder2.X(0) - builder2.comment("Test comment.") expected_circuit = builder2.to_circuit() assert expected_circuit == circuit diff --git a/test/test_reset.py b/test/test_reset.py index 3ec34c20..244c5918 100644 --- a/test/test_reset.py +++ b/test/test_reset.py @@ -1,117 +1,32 @@ -from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.ir import Bit - - -def test_reset() -> None: - qc = Circuit.from_string( - """ - version 3.0 - - qubit[2] q - bit[2] b - H q[0] - CNOT q[0], q[1] - - reset q[0] - b = measure q - """, - ) - assert ( - str(qc) - == """version 3.0 - -qubit[2] q -bit[2] b - -H q[0] -CNOT q[0], q[1] -reset q[0] -b[0] = measure q[0] -b[1] = measure q[1] -""" - ) - - -def test_reset_sgmq() -> None: - qc = Circuit.from_string( - """ - version 3.0 - - qubit[4] q - - H q[0] - H q[1:2] - reset q[2:3] - H q[3] - reset q[0:1] - """, - ) - assert ( - str(qc) - == """version 3.0 - -qubit[4] q +import pytest -H q[0] -H q[1] -H q[2] -reset q[2] -reset q[3] -H q[3] -reset q[0] -reset q[1] -""" - ) - - -def test_reset_all() -> None: - qc = Circuit.from_string( - """ - version 3.0 - - qubit[1] q - qubit[2] qq - - H qq[1] - - reset - """, - ) - assert ( - str(qc) - == """version 3.0 - -qubit[3] q - -H q[2] -reset q[0] -reset q[1] -reset q[2] -""" - ) +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.ir import Reset + + +@pytest.mark.parametrize( + ("cqasm_string", "expected_result"), + [ + ( + "version 3.0; qubit[2] q; reset q[1]; reset q[0]", + "version 3.0\n\nqubit[2] q\n\nreset q[1]\nreset q[0]\n", + ), + ( + "version 3.0; qubit[4] q; reset q[2:3]; reset q[1, 0]", + "version 3.0\n\nqubit[4] q\n\nreset q[2]\nreset q[3]\nreset q[1]\nreset q[0]\n", + ), + ], + ids=["reset", "reset sgmq"], +) +def test_reset_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: + qc = Circuit.from_string(cqasm_string) + assert str(qc) == expected_result def test_reset_in_circuit_builder() -> None: - builder = CircuitBuilder(2, 2) - builder.H(0) - builder.CNOT(0, 1) - builder.reset(0) - builder.measure(0, Bit(0)) - builder.measure(1, Bit(1)) - + builder = CircuitBuilder(2) + builder.reset(0).reset(1) qc = builder.to_circuit() - - assert ( - str(qc) - == """version 3.0 - -qubit[2] q -bit[2] b - -H q[0] -CNOT q[0], q[1] -reset q[0] -b[0] = measure q[0] -b[1] = measure q[1] -""" - ) + assert qc.qubit_register_size == 2 + assert qc.qubit_register_name == "q" + assert qc.ir.statements == [Reset(0), Reset(1)] diff --git a/test/test_wait.py b/test/test_wait.py new file mode 100644 index 00000000..b9d2298b --- /dev/null +++ b/test/test_wait.py @@ -0,0 +1,50 @@ +import pytest + +from opensquirrel import CNOT, Circuit, CircuitBuilder, H +from opensquirrel.ir import Barrier, Wait + + +@pytest.mark.parametrize( + ("cqasm_string", "expected_result"), + [ + ( + "version 3.0; qubit[2] q; wait(3) q[1]; wait(1) q[0]", + "version 3.0\n\nqubit[2] q\n\nwait(3) q[1]\nwait(1) q[0]\n", + ), + ( + "version 3.0; qubit[4] q; wait(3) q[2:3]; wait(1) q[1, 0]", + "version 3.0\n\nqubit[4] q\n\nwait(3) q[2]\nwait(3) q[3]\nwait(1) q[1]\nwait(1) q[0]\n", + ), + ], + ids=["wait", "wait sgmq"], +) +def test_wait_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: + qc = Circuit.from_string(cqasm_string) + assert str(qc) == expected_result + + +def test_wait_in_circuit_builder() -> None: + builder = CircuitBuilder(2) + builder.wait(0, 3).wait(1, 1) + qc = builder.to_circuit() + assert qc.qubit_register_size == 2 + assert qc.qubit_register_name == "q" + assert qc.ir.statements == [Wait(0, 3), Wait(1, 1)] + + +def test_wait_in_instruction_context() -> None: + builder = CircuitBuilder(2) + builder.H(0).H(1).wait(0, 1).barrier(1).wait(1, 3).barrier(0).CNOT(0, 1).wait(0, 3) + qc = builder.to_circuit() + assert qc.qubit_register_size == 2 + assert qc.qubit_register_name == "q" + assert qc.ir.statements == [ + H(0), + H(1), + Wait(0, 1), + Barrier(1), + Wait(1, 3), + Barrier(0), + CNOT(0, 1), + Wait(0, 3), + ] diff --git a/test/utils/test_matrix_expander.py b/test/utils/test_matrix_expander.py index 04fdc812..413c5803 100644 --- a/test/utils/test_matrix_expander.py +++ b/test/utils/test_matrix_expander.py @@ -3,13 +3,13 @@ import numpy as np from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate -from opensquirrel.utils import matrix_expander +from opensquirrel.utils import get_matrix def test_bloch_sphere_rotation() -> None: gate = BlochSphereRotation(qubit=0, axis=(0.8, -0.3, 1.5), angle=0.9468, phase=2.533) np.testing.assert_almost_equal( - matrix_expander.get_matrix(gate, 2), + get_matrix(gate, 2), [ [-0.50373461 + 0.83386635j, 0.05578802 + 0.21864595j, 0, 0], [0.18579927 + 0.12805072j, -0.95671077 + 0.18381011j, 0, 0], @@ -22,7 +22,7 @@ def test_bloch_sphere_rotation() -> None: def test_controlled_gate() -> None: gate = ControlledGate(2, BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2)) np.testing.assert_almost_equal( - matrix_expander.get_matrix(gate, 3), + get_matrix(gate, 3), [ [1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], @@ -47,7 +47,7 @@ def test_matrix_gate() -> None: operands=[1, 2], ) np.testing.assert_almost_equal( - matrix_expander.get_matrix(gate, 3), + get_matrix(gate, 3), [ [1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], diff --git a/test/writer/test_writer.py b/test/writer/test_writer.py index 29323f28..c6368984 100644 --- a/test/writer/test_writer.py +++ b/test/writer/test_writer.py @@ -1,6 +1,5 @@ -from opensquirrel import CircuitBuilder -from opensquirrel.ir import Bit, BlochSphereRotation, ControlledGate, Float, MatrixGate -from opensquirrel.writer import writer +from opensquirrel import CircuitBuilder, writer +from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate def test_circuit_without_bits() -> None: @@ -40,7 +39,7 @@ def test_circuit_to_string_after_circuit_modification() -> None: ) builder.H(0) - builder.CR(0, 1, Float(1.234)) + builder.CR(0, 1, 1.234) circuit = builder.to_circuit() assert ( writer.circuit_to_string(circuit) @@ -56,7 +55,7 @@ def test_circuit_to_string_after_circuit_modification() -> None: def test_float_precision() -> None: builder = CircuitBuilder(3) - builder.CR(0, 1, Float(1.6546514861321684321654)) + builder.CR(0, 1, 1.6546514861321684321654) circuit = builder.to_circuit() assert ( writer.circuit_to_string(circuit) @@ -72,7 +71,7 @@ def test_float_precision() -> None: def test_measure() -> None: builder = CircuitBuilder(1, 1) builder.H(0) - builder.measure(0, Bit(0)) + builder.measure(0, 0) circuit = builder.to_circuit() assert ( writer.circuit_to_string(circuit) @@ -93,7 +92,7 @@ def test_anonymous_gate() -> None: builder.ir.add_gate(BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23)) builder.ir.add_gate(ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23))) builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1])) - builder.CR(0, 1, Float(1.234)) + builder.CR(0, 1, 1.234) assert ( str(builder.to_circuit()) == """version 3.0 @@ -108,24 +107,3 @@ def test_anonymous_gate() -> None: CR(1.234) q[0], q[1] """ # noqa: E501 ) - - -def test_comment() -> None: - builder = CircuitBuilder(3) - builder.H(0) - builder.comment("My comment") - builder.CR(0, 1, Float(1.234)) - circuit = builder.to_circuit() - assert ( - writer.circuit_to_string(circuit) - == """version 3.0 - -qubit[3] q - -H q[0] - -/* My comment */ - -CR(1.234) q[0], q[1] -""" - ) diff --git a/tox.ini b/tox.ini index 0b448004..404e2717 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,7 @@ commands_pre = description = run linters commands = poetry run ruff check + poetry run ruff format --check [testenv:type] description = run mypy From 0e311eef8fe20ad128cd4d1f52a0fbb666d3ad7b Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:02:56 +0100 Subject: [PATCH 03/12] Release 0.3.0 (#443) Signed-off-by: dependabot[bot] Co-authored-by: rturrado Co-authored-by: Juan Boschero Co-authored-by: Guy Puts Co-authored-by: Guy Puts <38719377+GuyPuts@users.noreply.github.com> Co-authored-by: Juan Carlos Boschero Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: rares1609 <79575613+rares1609@users.noreply.github.com> Co-authored-by: Oancea --- .github/workflows/release.yaml | 2 +- .github/workflows/tests.yaml | 4 +- CHANGELOG.md | 42 +- opensquirrel/circuit.py | 11 +- opensquirrel/ir.py | 14 +- opensquirrel/parser/libqasm/parser.py | 2 +- .../passes/decomposer/aba_decomposer.py | 4 +- .../passes/decomposer/cnot_decomposer.py | 2 +- .../passes/exporter/cqasmv1_exporter.py | 2 +- opensquirrel/passes/merger/general_merger.py | 18 +- .../merger/single_qubit_gates_merger.py | 4 +- opensquirrel/passes/router/routing_checker.py | 4 +- opensquirrel/passes/validator/__init__.py | 6 + .../passes/validator/general_validator.py | 10 + .../passes/validator/native_gate_validator.py | 26 + poetry.lock | 1016 ++++++++--------- pyproject.toml | 12 +- test/merger/test_general_merger.py | 24 +- test/parser/libqasm/test_libqasm.py | 2 +- test/router/test_routing_checker.py | 4 +- test/test_circuit_builder.py | 2 +- test/test_integration.py | 12 +- test/test_ir.py | 2 +- test/validator/test_native_gate_validator.py | 52 + 24 files changed, 711 insertions(+), 566 deletions(-) create mode 100644 opensquirrel/passes/validator/__init__.py create mode 100644 opensquirrel/passes/validator/general_validator.py create mode 100644 opensquirrel/passes/validator/native_gate_validator.py create mode 100644 test/validator/test_native_gate_validator.py diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 62ffdefa..48c1fde6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -22,7 +22,7 @@ jobs: with: python-version: "3.11" - name: Install poetry - uses: abatilo/actions-poetry@v3 + uses: abatilo/actions-poetry@v4 with: poetry-version: "1.8.3" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 81f159b8..ec54ca23 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,7 +17,7 @@ jobs: with: python-version: "3.11" - name: Install poetry - uses: abatilo/actions-poetry@v3 + uses: abatilo/actions-poetry@v4 with: poetry-version: "1.3.2" - name: Install tox @@ -47,7 +47,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Install poetry - uses: abatilo/actions-poetry@v3 + uses: abatilo/actions-poetry@v4 with: poetry-version: "1.3.2" - name: Install tox diff --git a/CHANGELOG.md b/CHANGELOG.md index ffdfdcd8..a2e17857 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,45 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Removed** for now removed features. -## [ 0.2.0 ] - [ xxxx-yy-zz ] +## [ 0.3.0 ] - [ 2025-01-30 ] ### Added -- Restore SGMQ notation for barrier groups in cQASMv1 Exporter. + +- `NativeGateValidator` validator pass + +### Changed + +- Relaxed NumPy version requirement to `>=1.26` for all supported Python versions + +### Fixed + +- Fixed order of merging Bloch sphere rotations + + +## [ 0.2.0 ] - [ 2025-01-21 ] + +### Added + +- `init` non-unitary instruction +- `SWAP` two-qubit unitary instruction +- `barrier` and `wait` control instructions +- `SingleQubitGatesMerger` merger pass +- `SWAP2CNOTDecomposer` decomposer pass +- `CNOT2CZDecomposer` decomposer pass +- `RoutingChecker` routing pass +- Restore SGMQ notation for barrier groups in cQASMv1 Exporter + +### Changed + +- Importing modules, classes, and functionalities simplified +- `merge_single_qubit_gates` method of `Circuit` class, +changed to general `merge` method that accepts custom merger passes +- libQASM 0.6.9 integrated (updated from 0.6.7) +- Refactor: code base adheres to the PEP8 style guide +- Refactor: instruction library simplified +- Refactor: comment nodes removed from IR + +### Fixed + +- Bug in ABA-decomposer +- Bug in McKay-decomposer (all single-qubit Clifford gates are verified) diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py index 65eb118b..f6a920db 100644 --- a/opensquirrel/circuit.py +++ b/opensquirrel/circuit.py @@ -9,8 +9,9 @@ from opensquirrel.ir import IR, Gate from opensquirrel.passes.decomposer import Decomposer from opensquirrel.passes.mapper import Mapper - from opensquirrel.passes.merger.general_merger import Merger - from opensquirrel.passes.router.general_router import Router + from opensquirrel.passes.merger import Merger + from opensquirrel.passes.router import Router + from opensquirrel.passes.validator import Validator from opensquirrel.register_manager import RegisterManager @@ -87,8 +88,12 @@ def qubit_register_name(self) -> str: def bit_register_name(self) -> str: return self.register_manager.get_bit_register_name() + def validate(self, validator: Validator) -> None: + """Generic validator pass. It applies the given validator to the circuit.""" + validator.validate(self.ir) + def route(self, router: Router) -> None: - """Generic router pass. It applies the given Router to the circuit.""" + """Generic router pass. It applies the given router to the circuit.""" router.route(self.ir) def merge(self, merger: Merger) -> None: diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py index 57cf8972..85f45b82 100644 --- a/opensquirrel/ir.py +++ b/opensquirrel/ir.py @@ -213,7 +213,7 @@ def __init__(self, *axis: AxisLike) -> None: axis: An ``AxisLike`` to create the axis from. """ - axis_to_parse = axis[0] if len(axis) == 1 else cast(AxisLike, axis) + axis_to_parse = axis[0] if len(axis) == 1 else cast("AxisLike", axis) self._value = self.normalize(self.parse(axis_to_parse)) @property @@ -281,7 +281,7 @@ def __getitem__(self, s: slice, /) -> list[np.float64]: ... def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: """Get the item at `index`.""" - return cast(np.float64, self.value[index]) + return cast("np.float64", self.value[index]) def __len__(self) -> int: """Length of the axis, which is always 3.""" @@ -519,9 +519,13 @@ def name(self) -> str: return self.generator.__name__ return "Anonymous gate: " + self.__repr__() + @property + def is_named_gate(self) -> bool: + return not (self.generator is None or self.generator.__name__ is None) + @property def is_anonymous(self) -> bool: - return self.generator is None + return not self.is_named_gate @staticmethod def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: @@ -706,7 +710,7 @@ def named_gate(gate_generator: Callable[..., ControlledGate]) -> Callable[..., C def named_gate(gate_generator: Callable[..., Gate]) -> Callable[..., Gate]: - return cast(Callable[..., Gate], instruction_decorator(gate_generator)) + return cast("Callable[..., Gate]", instruction_decorator(gate_generator)) @overload @@ -730,7 +734,7 @@ def non_unitary(non_unitary_generator: Callable[..., Wait]) -> Callable[..., Wai def non_unitary(non_unitary_generator: Callable[..., NonUnitary]) -> Callable[..., NonUnitary]: - return cast(Callable[..., NonUnitary], instruction_decorator(non_unitary_generator)) + return cast("Callable[..., NonUnitary]", instruction_decorator(non_unitary_generator)) def compare_gates(g1: Gate, g2: Gate) -> bool: diff --git a/opensquirrel/parser/libqasm/parser.py b/opensquirrel/parser/libqasm/parser.py index 07e453cf..4a905653 100644 --- a/opensquirrel/parser/libqasm/parser.py +++ b/opensquirrel/parser/libqasm/parser.py @@ -174,7 +174,7 @@ def _check_analysis_result(result: Any) -> None: def _get_gate_f(instruction: cqasm.semantic.GateInstruction) -> Callable[..., Gate]: gate_name = instruction.gate.name if gate_name in ["inv", "pow", "ctrl"]: - modified_gate_f = cast(Callable[..., BlochSphereRotation], Parser._get_gate_f(instruction.gate)) + modified_gate_f = cast("Callable[..., BlochSphereRotation]", Parser._get_gate_f(instruction.gate)) if gate_name == "inv": return InverseGateModifier(modified_gate_f) if gate_name == "pow": diff --git a/opensquirrel/passes/decomposer/aba_decomposer.py b/opensquirrel/passes/decomposer/aba_decomposer.py index 13bf3fc0..cff8079a 100644 --- a/opensquirrel/passes/decomposer/aba_decomposer.py +++ b/opensquirrel/passes/decomposer/aba_decomposer.py @@ -52,8 +52,8 @@ def _set_a_b_c_axes_values(self, axis: AxisLike) -> tuple[Any, Any, Any]: Returns: A triplet (a, b, c) where a, b, and c are the values of x, y, and z reordered. """ - _axis = Axis(axis) - return _axis[self.index_a], _axis[self.index_b], _axis[self._find_unused_index()] + axis_ = Axis(axis) + return axis_[self.index_a], axis_[self.index_b], axis_[self._find_unused_index()] @staticmethod def _are_b_and_c_axes_in_negative_octant(b_axis_value: float, c_axis_value: float) -> bool: diff --git a/opensquirrel/passes/decomposer/cnot_decomposer.py b/opensquirrel/passes/decomposer/cnot_decomposer.py index 229d654a..e060e753 100644 --- a/opensquirrel/passes/decomposer/cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot_decomposer.py @@ -38,7 +38,7 @@ def decompose(self, g: Gate) -> list[Gate]: # See https://threeplusone.com/pubs/on_gates.pdf # Try special case first, see https://arxiv.org/pdf/quant-ph/9503016.pdf lemma 5.5 - controlled_rotation_times_x = general_merger.compose_bloch_sphere_rotations(X(target_qubit), g.target_gate) + controlled_rotation_times_x = general_merger.compose_bloch_sphere_rotations(g.target_gate, X(target_qubit)) theta0_with_x, theta1_with_x, theta2_with_x = ZYZDecomposer().get_decomposition_angles( controlled_rotation_times_x.axis, controlled_rotation_times_x.angle, diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py index bb25d7c8..e5466521 100644 --- a/opensquirrel/passes/exporter/cqasmv1_exporter.py +++ b/opensquirrel/passes/exporter/cqasmv1_exporter.py @@ -91,7 +91,7 @@ def _dump_barrier_group(indices: list[int]) -> str: def _get_barrier_index(line: str) -> int: - barrier_index_match = re.search("\d+", line) + barrier_index_match = re.search(r"\d+", line) if not barrier_index_match: msg = "expecting a barrier index but found none" raise CqasmV1ExporterParseError(msg) diff --git a/opensquirrel/passes/merger/general_merger.py b/opensquirrel/passes/merger/general_merger.py index b6cbdcf4..b5b7703e 100644 --- a/opensquirrel/passes/merger/general_merger.py +++ b/opensquirrel/passes/merger/general_merger.py @@ -15,8 +15,16 @@ def compose_bloch_sphere_rotations(bsr_a: BlochSphereRotation, bsr_b: BlochSphereRotation) -> BlochSphereRotation: """Computes the Bloch sphere rotation resulting from the composition of two Bloch sphere rotations. - The first rotation is applied and then the second. - If the final Bloch sphere rotation is anonymous, we will try to match it to a default gate. + The first rotation (A) is applied and then the second (B): + + As separate gates: + A q + B q + + A linear operations: + (B * A) q + + If the final Bloch sphere rotation is anonymous, we try to match it to a default gate. Uses Rodrigues' rotation formula (see https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula). """ @@ -40,7 +48,7 @@ def compose_bloch_sphere_rotations(bsr_a: BlochSphereRotation, bsr_b: BlochSpher * ( sin(bsr_a.angle / 2) * cos(bsr_b.angle / 2) * bsr_a.axis.value + cos(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * bsr_b.axis.value - + sin(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * np.cross(bsr_a.axis, bsr_b.axis) + + sin(bsr_a.angle / 2) * sin(bsr_b.angle / 2) * np.cross(bsr_b.axis, bsr_a.axis) ) ), order_of_magnitude, @@ -119,8 +127,8 @@ def can_move_before(statement: Statement, statement_group: list[Statement]) -> b first_statement_from_group = statement_group[0] if not isinstance(first_statement_from_group, Barrier): return False - instruction = cast(Instruction, statement) - return can_move_statement_before_barrier(instruction, cast(list[Instruction], statement_group)) + instruction = cast("Instruction", statement) + return can_move_statement_before_barrier(instruction, cast("list[Instruction]", statement_group)) def group_linked_barriers(statements: list[Statement]) -> list[list[Statement]]: diff --git a/opensquirrel/passes/merger/single_qubit_gates_merger.py b/opensquirrel/passes/merger/single_qubit_gates_merger.py index b2c041cf..7709d28e 100644 --- a/opensquirrel/passes/merger/single_qubit_gates_merger.py +++ b/opensquirrel/passes/merger/single_qubit_gates_merger.py @@ -22,10 +22,10 @@ def merge(self, ir: IR, qubit_register_size: int) -> None: statement = ir.statements[statement_index] # Accumulate consecutive Bloch sphere rotations - instruction: Instruction = cast(Instruction, statement) + instruction: Instruction = cast("Instruction", statement) if isinstance(instruction, BlochSphereRotation): already_accumulated = accumulators_per_qubit[instruction.qubit] - composed = compose_bloch_sphere_rotations(instruction, already_accumulated) + composed = compose_bloch_sphere_rotations(already_accumulated, instruction) accumulators_per_qubit[instruction.qubit] = composed del ir.statements[statement_index] continue diff --git a/opensquirrel/passes/router/routing_checker.py b/opensquirrel/passes/router/routing_checker.py index ef620f74..10312578 100644 --- a/opensquirrel/passes/router/routing_checker.py +++ b/opensquirrel/passes/router/routing_checker.py @@ -11,7 +11,7 @@ def __init__(self, connectivity: dict[str, list[int]]) -> None: def route(self, ir: IR) -> None: non_executable_interactions = [] for statement in ir.statements: - instruction: Instruction = cast(Instruction, statement) + instruction: Instruction = cast("Instruction", statement) args = instruction.arguments if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): qubit_args = [arg for arg in args if isinstance(arg, Qubit)] @@ -22,7 +22,7 @@ def route(self, ir: IR) -> None: if non_executable_interactions: error_message = ( - f"The following qubit interactions in the circuit prevent a 1-to-1 mapping:" + f"the following qubit interactions in the circuit prevent a 1-to-1 mapping:" f"{set(non_executable_interactions)}" ) raise ValueError(error_message) diff --git a/opensquirrel/passes/validator/__init__.py b/opensquirrel/passes/validator/__init__.py new file mode 100644 index 00000000..c88cc843 --- /dev/null +++ b/opensquirrel/passes/validator/__init__.py @@ -0,0 +1,6 @@ +"""Init file for the validator passes.""" + +from opensquirrel.passes.validator.general_validator import Validator +from opensquirrel.passes.validator.native_gate_validator import NativeGateValidator + +__all__ = ["NativeGateValidator", "Validator"] diff --git a/opensquirrel/passes/validator/general_validator.py b/opensquirrel/passes/validator/general_validator.py new file mode 100644 index 00000000..fd9da472 --- /dev/null +++ b/opensquirrel/passes/validator/general_validator.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod + +from opensquirrel.ir import IR + + +class Validator(ABC): + @abstractmethod + def validate(self, ir: IR) -> None: + """Base validate method to be implemented by inheriting validator classes.""" + raise NotImplementedError diff --git a/opensquirrel/passes/validator/native_gate_validator.py b/opensquirrel/passes/validator/native_gate_validator.py new file mode 100644 index 00000000..2f6cd4ae --- /dev/null +++ b/opensquirrel/passes/validator/native_gate_validator.py @@ -0,0 +1,26 @@ +from opensquirrel.ir import IR, Unitary +from opensquirrel.passes.validator import Validator + + +class NativeGateValidator(Validator): + def __init__(self, native_gate_set: list[str]) -> None: + self.native_gate_set = native_gate_set + + def validate(self, ir: IR) -> None: + """ + Check if all unitary gates in the circuit are part of the native gate set. + + Args: + ir (IR): The intermediate representation of the circuit to be checked. + + Raises: + ValueError: If any unitary gate in the circuit is not part of the native gate set. + """ + gates_not_in_native_gate_set = [ + statement.name + for statement in ir.statements + if isinstance(statement, Unitary) and statement.name not in self.native_gate_set + ] + if gates_not_in_native_gate_set: + error_message = f"the following gates are not in the native gate set: {set(gates_not_in_native_gate_set)}" + raise ValueError(error_message) diff --git a/poetry.lock b/poetry.lock index b9f8ec69..6838ac3e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -157,13 +157,13 @@ files = [ [[package]] name = "asteval" -version = "1.0.5" +version = "1.0.6" description = "Safe, minimalistic evaluator of python expression using ast module" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "asteval-1.0.5-py3-none-any.whl", hash = "sha256:082b95312578affc8a6d982f7d92b7ac5de05634985c87e7eedd3188d31149fa"}, - {file = "asteval-1.0.5.tar.gz", hash = "sha256:bac3c8dd6d2b789e959cfec9bb296fb8338eec066feae618c462132701fbc665"}, + {file = "asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc"}, + {file = "asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f"}, ] [package.extras] @@ -203,13 +203,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "24.3.0" +version = "25.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" files = [ - {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, - {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, + {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, + {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, ] [package.extras] @@ -296,13 +296,13 @@ test = ["black (>=22.3.0)", "coverage[toml] (>=6.2)", "hypothesis (>=5.49.0)", " [[package]] name = "cachetools" -version = "5.5.0" +version = "5.5.1" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, - {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, + {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, + {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, ] [[package]] @@ -588,13 +588,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloudpickle" -version = "3.1.0" +version = "3.1.1" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" files = [ - {file = "cloudpickle-3.1.0-py3-none-any.whl", hash = "sha256:fe11acda67f61aaaec473e3afe030feb131d78a43461b718185363384f1ba12e"}, - {file = "cloudpickle-3.1.0.tar.gz", hash = "sha256:81a929b6e3c7335c863c771d673d105f02efdb89dfaba0c90495d1c64796601b"}, + {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, + {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, ] [[package]] @@ -862,37 +862,37 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.11" +version = "1.8.12" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.11-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2b26fefc4e31ff85593d68b9022e35e8925714a10ab4858fb1b577a8a48cb8cd"}, - {file = "debugpy-1.8.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61bc8b3b265e6949855300e84dc93d02d7a3a637f2aec6d382afd4ceb9120c9f"}, - {file = "debugpy-1.8.11-cp310-cp310-win32.whl", hash = "sha256:c928bbf47f65288574b78518449edaa46c82572d340e2750889bbf8cd92f3737"}, - {file = "debugpy-1.8.11-cp310-cp310-win_amd64.whl", hash = "sha256:8da1db4ca4f22583e834dcabdc7832e56fe16275253ee53ba66627b86e304da1"}, - {file = "debugpy-1.8.11-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:85de8474ad53ad546ff1c7c7c89230db215b9b8a02754d41cb5a76f70d0be296"}, - {file = "debugpy-1.8.11-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ffc382e4afa4aee367bf413f55ed17bd91b191dcaf979890af239dda435f2a1"}, - {file = "debugpy-1.8.11-cp311-cp311-win32.whl", hash = "sha256:40499a9979c55f72f4eb2fc38695419546b62594f8af194b879d2a18439c97a9"}, - {file = "debugpy-1.8.11-cp311-cp311-win_amd64.whl", hash = "sha256:987bce16e86efa86f747d5151c54e91b3c1e36acc03ce1ddb50f9d09d16ded0e"}, - {file = "debugpy-1.8.11-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:84e511a7545d11683d32cdb8f809ef63fc17ea2a00455cc62d0a4dbb4ed1c308"}, - {file = "debugpy-1.8.11-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce291a5aca4985d82875d6779f61375e959208cdf09fcec40001e65fb0a54768"}, - {file = "debugpy-1.8.11-cp312-cp312-win32.whl", hash = "sha256:28e45b3f827d3bf2592f3cf7ae63282e859f3259db44ed2b129093ca0ac7940b"}, - {file = "debugpy-1.8.11-cp312-cp312-win_amd64.whl", hash = "sha256:44b1b8e6253bceada11f714acf4309ffb98bfa9ac55e4fce14f9e5d4484287a1"}, - {file = "debugpy-1.8.11-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:8988f7163e4381b0da7696f37eec7aca19deb02e500245df68a7159739bbd0d3"}, - {file = "debugpy-1.8.11-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c1f6a173d1140e557347419767d2b14ac1c9cd847e0b4c5444c7f3144697e4e"}, - {file = "debugpy-1.8.11-cp313-cp313-win32.whl", hash = "sha256:bb3b15e25891f38da3ca0740271e63ab9db61f41d4d8541745cfc1824252cb28"}, - {file = "debugpy-1.8.11-cp313-cp313-win_amd64.whl", hash = "sha256:d8768edcbeb34da9e11bcb8b5c2e0958d25218df7a6e56adf415ef262cd7b6d1"}, - {file = "debugpy-1.8.11-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:ad7efe588c8f5cf940f40c3de0cd683cc5b76819446abaa50dc0829a30c094db"}, - {file = "debugpy-1.8.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:189058d03a40103a57144752652b3ab08ff02b7595d0ce1f651b9acc3a3a35a0"}, - {file = "debugpy-1.8.11-cp38-cp38-win32.whl", hash = "sha256:32db46ba45849daed7ccf3f2e26f7a386867b077f39b2a974bb5c4c2c3b0a280"}, - {file = "debugpy-1.8.11-cp38-cp38-win_amd64.whl", hash = "sha256:116bf8342062246ca749013df4f6ea106f23bc159305843491f64672a55af2e5"}, - {file = "debugpy-1.8.11-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:654130ca6ad5de73d978057eaf9e582244ff72d4574b3e106fb8d3d2a0d32458"}, - {file = "debugpy-1.8.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23dc34c5e03b0212fa3c49a874df2b8b1b8fda95160bd79c01eb3ab51ea8d851"}, - {file = "debugpy-1.8.11-cp39-cp39-win32.whl", hash = "sha256:52d8a3166c9f2815bfae05f386114b0b2d274456980d41f320299a8d9a5615a7"}, - {file = "debugpy-1.8.11-cp39-cp39-win_amd64.whl", hash = "sha256:52c3cf9ecda273a19cc092961ee34eb9ba8687d67ba34cc7b79a521c1c64c4c0"}, - {file = "debugpy-1.8.11-py2.py3-none-any.whl", hash = "sha256:0e22f846f4211383e6a416d04b4c13ed174d24cc5d43f5fd52e7821d0ebc8920"}, - {file = "debugpy-1.8.11.tar.gz", hash = "sha256:6ad2688b69235c43b020e04fecccdf6a96c8943ca9c2fb340b8adc103c655e57"}, + {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"}, + {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"}, + {file = "debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c"}, + {file = "debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9"}, + {file = "debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5"}, + {file = "debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7"}, + {file = "debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb"}, + {file = "debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1"}, + {file = "debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498"}, + {file = "debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06"}, + {file = "debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d"}, + {file = "debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969"}, + {file = "debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f"}, + {file = "debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9"}, + {file = "debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180"}, + {file = "debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c"}, + {file = "debugpy-1.8.12-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:b0232cd42506d0c94f9328aaf0d1d0785f90f87ae72d9759df7e5051be039738"}, + {file = "debugpy-1.8.12-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9af40506a59450f1315168d47a970db1a65aaab5df3833ac389d2899a5d63b3f"}, + {file = "debugpy-1.8.12-cp38-cp38-win32.whl", hash = "sha256:5cc45235fefac57f52680902b7d197fb2f3650112379a6fa9aa1b1c1d3ed3f02"}, + {file = "debugpy-1.8.12-cp38-cp38-win_amd64.whl", hash = "sha256:557cc55b51ab2f3371e238804ffc8510b6ef087673303890f57a24195d096e61"}, + {file = "debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41"}, + {file = "debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a"}, + {file = "debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018"}, + {file = "debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069"}, + {file = "debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6"}, + {file = "debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce"}, ] [[package]] @@ -937,20 +937,20 @@ files = [ [[package]] name = "deprecated" -version = "1.2.15" +version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, - {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] [[package]] name = "dill" @@ -1005,13 +1005,13 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -1044,77 +1044,77 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.16.1" +version = "3.17.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, + {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, + {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "fonttools" -version = "4.55.3" +version = "4.55.7" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, - {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, - {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, - {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, - {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, - {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, - {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, - {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, - {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, - {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, - {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, - {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, - {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, - {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, - {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, - {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, - {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, - {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, - {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, - {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, - {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, - {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, - {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, - {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, - {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, - {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, - {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, - {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, - {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, - {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, - {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, - {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, - {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, - {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, - {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, - {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, - {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, - {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, - {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, - {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, - {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, - {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, - {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, - {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, - {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, - {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, - {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, - {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, - {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, - {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, + {file = "fonttools-4.55.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c2680a3e6e2e2d104a7ea81fb89323e1a9122c23b03d6569d0768887d0d76e69"}, + {file = "fonttools-4.55.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7831d16c95b60866772a15fdcc03772625c4bb6d858e0ad8ef3d6e48709b2ef"}, + {file = "fonttools-4.55.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:833927d089e6585019f2c85e3f8f7d87733e3fe81cd704ebaca7afa27e2e7113"}, + {file = "fonttools-4.55.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7858dc6823296a053d85b831fa8428781c6c6f06fca44582bf7b6b2ff32a9089"}, + {file = "fonttools-4.55.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:05568a66b090ed9d79aefdce2ceb180bb64fc856961deaedc29f5ad51355ce2c"}, + {file = "fonttools-4.55.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2dbc08e227fbeb716776905a7bd3c4fc62c8e37c8ef7d481acd10cb5fde12222"}, + {file = "fonttools-4.55.7-cp310-cp310-win32.whl", hash = "sha256:6eb93cbba484a463b5ee83f7dd3211905f27a3871d20d90fb72de84c6c5056e3"}, + {file = "fonttools-4.55.7-cp310-cp310-win_amd64.whl", hash = "sha256:7ff8e606f905048dc91a55a06d994b68065bf35752ae199df54a9bf30013dcaa"}, + {file = "fonttools-4.55.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:916e1d926823b4b3b3815c59fc79f4ed670696fdd5fd9a5e690a0503eef38f79"}, + {file = "fonttools-4.55.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b89da448e0073408d7b2c44935f9fdae4fdc93644899f99f6102ef883ecf083c"}, + {file = "fonttools-4.55.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087ace2d06894ccdb03e6975d05da6bb9cec0c689b2a9983c059880e33a1464a"}, + {file = "fonttools-4.55.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775ed0700ee6f781436641f18a0c61b1846a8c1aecae6da6b395c4417e2cb567"}, + {file = "fonttools-4.55.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9ec71d0cc0242899f87e4c230ed0b22c7b8681f288fb80e3d81c2c54c5bd2c79"}, + {file = "fonttools-4.55.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d4b1c5939c0521525f45522823508e6fad21175bca978583688ea3b3736e6625"}, + {file = "fonttools-4.55.7-cp311-cp311-win32.whl", hash = "sha256:23df0f1003abaf8a435543f59583fc247e7ae1b047ee2263510e0654a5f207e0"}, + {file = "fonttools-4.55.7-cp311-cp311-win_amd64.whl", hash = "sha256:82163d58b43eff6e2025a25c32905fdb9042a163cc1ff82dab393e7ffc77a7d5"}, + {file = "fonttools-4.55.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:12e81d44f762156d28b5c93a6b65d98ed73678be45b22546de8ed29736c3cb96"}, + {file = "fonttools-4.55.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c26445a7be689f8b70df7d5d2e2c85ec4407bdb769902a23dd45ac44f767575d"}, + {file = "fonttools-4.55.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2cbafedb9462be7cf68c66b6ca1d8309842fe36b729f1b1969595f5d660e5c2"}, + {file = "fonttools-4.55.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4bde87985012adbd7559bc363d802fb335e92a07ff86a76cf02bebb0b8566d1"}, + {file = "fonttools-4.55.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:69ed0660750993150f7c4d966c0c1ffaa0385f23ccef85c2ff108062d80dd7ea"}, + {file = "fonttools-4.55.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3098355e7a7b5ac48d5dc29684a65271187b865b85675033958b57c40364ee34"}, + {file = "fonttools-4.55.7-cp312-cp312-win32.whl", hash = "sha256:ee7aa8bb716318e3d835ef473978e22b7a39c0f1b3b08cc0b0ee1bba6f73bc1e"}, + {file = "fonttools-4.55.7-cp312-cp312-win_amd64.whl", hash = "sha256:e696d6e2baf4cc57ded34bb87e5d3a9e4da9732f3d9e8e2c6db0746e57a6dc0b"}, + {file = "fonttools-4.55.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e10c7fb80cdfdc32244514cbea0906e9f53e3cc80d64d3389da09502fd999b55"}, + {file = "fonttools-4.55.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1101976c703ff4008a928fc3fef42caf06d035bfc4614230d7e797cbe356feb0"}, + {file = "fonttools-4.55.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6dffe9cbcd163ef617fab1f81682e4d1629b7a5b9c5e598274dc2d03e88bcd"}, + {file = "fonttools-4.55.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e5115a425d53be6e31cd0fe9210f62a488bccf81eb113ab5dd7f4fa88e4d81"}, + {file = "fonttools-4.55.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f0c45eae32d090763820756b18322a70571dada3f1cbe003debc37a9c35bc260"}, + {file = "fonttools-4.55.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd4ebc475d43f3de2b26e0cf551eff92c24e22d1aee03dc1b33adb52fc2e6cb2"}, + {file = "fonttools-4.55.7-cp313-cp313-win32.whl", hash = "sha256:371197de1283cc99f5f10eb91496520eb0e2d079312d014fd6cef9e802174c6a"}, + {file = "fonttools-4.55.7-cp313-cp313-win_amd64.whl", hash = "sha256:418ece624fbc04e199f58398ffef3eaad645baba65434871b09eb7350a3a346b"}, + {file = "fonttools-4.55.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3976db357484bf4cb533dfd0d1a444b38ad06062458715ebf21e38c71aff325d"}, + {file = "fonttools-4.55.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:30c3501328363b73a90acc8a722dd199c993f2c4369ea16886128d94e91897ec"}, + {file = "fonttools-4.55.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0899cd23967950e7b902ea75af06cfe5f59ac71eb38e98a774c9e596790e6aa"}, + {file = "fonttools-4.55.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f669910b64d27750398f6c56c651367d4954b05c86ff067af1c9949e109cf1e2"}, + {file = "fonttools-4.55.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1d4be8354c245c00aecfc90f5d3da8606226f0ac22e1cb0837b39139e4c2df85"}, + {file = "fonttools-4.55.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9074a2848ea5b607377e16998dfcf90cf5eb614d0c388541b9782d5cc038e149"}, + {file = "fonttools-4.55.7-cp38-cp38-win32.whl", hash = "sha256:5ff0daf8b2e0612e5761fed2e4a2f54eff9d9ec0aeb4091c9f3666f9a118325e"}, + {file = "fonttools-4.55.7-cp38-cp38-win_amd64.whl", hash = "sha256:0ed25d7b5fa4ae6a805c2a9cc0e5307d45cbb3b8e155584fe932d0f3b6a997bf"}, + {file = "fonttools-4.55.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ef5ee98fc320c158e4e459a5ee40d1ac3728d4ce11c3c8dfd854aa0aa5c042f"}, + {file = "fonttools-4.55.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09740feed51f9ed816aebf5d82071b7fecf693ac3a7e0fc8ea433f5dc3bd92f5"}, + {file = "fonttools-4.55.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3d19ea483b3cd8833e9e2ee8115f3d2044d55d3743d84f9c23b48b52d7516d8"}, + {file = "fonttools-4.55.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c135c91d47351b84893fb6fcbb8f178eba14f7cb195850264c0675c85e4238b6"}, + {file = "fonttools-4.55.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bee4920ebeb540849bc3555d871e2a8487e39ce8263c281f74d5b6d44d2bf1df"}, + {file = "fonttools-4.55.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f3b63648600dd0081bdd6856a86d014a7f1d2d11c3c974542f866478d832e103"}, + {file = "fonttools-4.55.7-cp39-cp39-win32.whl", hash = "sha256:d4bd27f0fa5120aaa39f76de5768959bc97300e0f59a3160d466b51436a38aea"}, + {file = "fonttools-4.55.7-cp39-cp39-win_amd64.whl", hash = "sha256:c665df9c9d99937a5bf807bace1c0c95bd13f55de8c82aaf9856b868dcbfe5d9"}, + {file = "fonttools-4.55.7-py3-none-any.whl", hash = "sha256:3304dfcf9ca204dd0ef691a287bd851ddd8e8250108658c0677c3fdfec853a20"}, + {file = "fonttools-4.55.7.tar.gz", hash = "sha256:6899e3d97225a8218f525e9754da0376e1c62953a0d57a76c5abaada51e0d140"}, ] [package.extras] @@ -1200,13 +1200,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "1.5.4" +version = "1.5.5" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" files = [ - {file = "griffe-1.5.4-py3-none-any.whl", hash = "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d"}, - {file = "griffe-1.5.4.tar.gz", hash = "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52"}, + {file = "griffe-1.5.5-py3-none-any.whl", hash = "sha256:2761b1e8876c6f1f9ab1af274df93ea6bbadd65090de5f38f4cb5cc84897c7dd"}, + {file = "griffe-1.5.5.tar.gz", hash = "sha256:35ee5b38b93d6a839098aad0f92207e6ad6b70c3e8866c08ca669275b8cba585"}, ] [package.dependencies] @@ -1225,13 +1225,13 @@ files = [ [[package]] name = "h5netcdf" -version = "1.4.1" +version = "1.5.0" description = "netCDF4 via h5py" optional = false python-versions = ">=3.9" files = [ - {file = "h5netcdf-1.4.1-py3-none-any.whl", hash = "sha256:dd86c78ae69b92b16aa8a3c1ff3a14e7622571b5788dcf6d8b68569035bf71ce"}, - {file = "h5netcdf-1.4.1.tar.gz", hash = "sha256:7c8401ab807ff37c9798edc90d99467595892e6c541a5d5abeb8f53aab5335fe"}, + {file = "h5netcdf-1.5.0-py3-none-any.whl", hash = "sha256:1baca17d395e14cd06899d0334385c9a27e86baa4c6ff2fc51ac44fd210fd843"}, + {file = "h5netcdf-1.5.0.tar.gz", hash = "sha256:9d6c28147677bd075787881aadb24d2fdb0bc0319481bcb5d2a54dc4b94c4ba9"}, ] [package.dependencies] @@ -1366,13 +1366,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.5.0" +version = "8.6.1" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, ] [package.dependencies] @@ -1384,7 +1384,7 @@ cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -2395,13 +2395,13 @@ files = [ [[package]] name = "marshmallow" -version = "3.24.2" +version = "3.26.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" files = [ - {file = "marshmallow-3.24.2-py3-none-any.whl", hash = "sha256:bf3c56db473bb160e5191f1c5e32e3fc8bfb58998eb2b35d6747de023e31f9e7"}, - {file = "marshmallow-3.24.2.tar.gz", hash = "sha256:0822c3701de396b51d3f8ac97319aea5493998ba4e7d0e4c05f6fce7777bf3a2"}, + {file = "marshmallow-3.26.0-py3-none-any.whl", hash = "sha256:1287bca04e6a5f4094822ac153c03da5e214a0a60bcd557b140f3e66991b8ca1"}, + {file = "marshmallow-3.26.0.tar.gz", hash = "sha256:eb36762a1cc76d7abf831e18a3a1b26d3d481bbc74581b8e532a3d3a8115e1cb"}, ] [package.dependencies] @@ -2409,7 +2409,7 @@ packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)"] +docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] tests = ["pytest", "simplejson"] [[package]] @@ -2533,13 +2533,13 @@ test = ["functools32 (>=3.2.3-2)", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] [[package]] name = "mistune" -version = "3.1.0" +version = "3.1.1" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" files = [ - {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"}, - {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"}, + {file = "mistune-3.1.1-py3-none-any.whl", hash = "sha256:02106ac2aa4f66e769debbfa028509a275069dcffce0dfa578edd7b991ee700a"}, + {file = "mistune-3.1.1.tar.gz", hash = "sha256:e0740d635f515119f7d1feb6f9b192ee60f0cc649f80a8f944f905706a21654c"}, ] [package.dependencies] @@ -2578,13 +2578,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-autorefs" -version = "1.2.0" +version = "1.3.0" description = "Automatically link across pages in MkDocs." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mkdocs_autorefs-1.2.0-py3-none-any.whl", hash = "sha256:d588754ae89bd0ced0c70c06f58566a4ee43471eeeee5202427da7de9ef85a2f"}, - {file = "mkdocs_autorefs-1.2.0.tar.gz", hash = "sha256:a86b93abff653521bda71cf3fc5596342b7a23982093915cb74273f67522190f"}, + {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, + {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, ] [package.dependencies] @@ -2809,6 +2809,32 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "narwhals" +version = "1.24.1" +description = "Extremely lightweight compatibility layer between dataframe libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "narwhals-1.24.1-py3-none-any.whl", hash = "sha256:d8983fe14851c95d60576ddca37c094bd4ed24ab9ea98396844fb20ad9aaf184"}, + {file = "narwhals-1.24.1.tar.gz", hash = "sha256:b09b8253d945f23cdb683a84685abf3afb9f96114d89e9f35dc876e143f65007"}, +] + +[package.extras] +core = ["duckdb", "pandas", "polars", "pyarrow", "pyarrow-stubs"] +cudf = ["cudf (>=24.10.0)"] +dask = ["dask[dataframe] (>=2024.8)"] +dev = ["covdefaults", "hypothesis", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] +docs = ["black", "duckdb", "jinja2", "markdown-exec[ansi]", "mkdocs", "mkdocs-autorefs", "mkdocs-material", "mkdocstrings[python]", "pandas", "polars (>=1.0.0)", "pyarrow"] +duckdb = ["duckdb (>=1.0)"] +extra = ["scikit-learn"] +ibis = ["ibis-framework (>=6.0.0)", "packaging", "pyarrow-hotfix", "rich"] +modin = ["modin"] +pandas = ["pandas (>=0.25.3)"] +polars = ["polars (>=0.20.3)"] +pyarrow = ["pyarrow (>=11.0.0)"] +pyspark = ["pyspark (>=3.5.0)"] + [[package]] name = "nbclient" version = "0.10.2" @@ -2833,13 +2859,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.5" +version = "7.16.6" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.5-py3-none-any.whl", hash = "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547"}, - {file = "nbconvert-7.16.5.tar.gz", hash = "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344"}, + {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, + {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, ] [package.dependencies] @@ -3047,127 +3073,72 @@ zfpy = ["zfpy (>=1.0.0)"] [[package]] name = "numpy" -version = "1.26.4" +version = "2.0.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - -[[package]] -name = "numpy" -version = "2.2.1" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, - {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, - {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, - {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, - {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, - {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, - {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, - {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, - {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, - {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, - {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, - {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, - {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, - {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, - {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, - {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, - {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, - {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, - {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, - {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, - {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, - {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, - {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, - {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, - {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, - {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, - {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, - {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, - {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, - {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, - {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, - {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, - {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, - {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, - {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, - {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, - {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, - {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, ] [[package]] name = "opentelemetry-api" -version = "1.29.0" +version = "1.16.0" description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "opentelemetry_api-1.29.0-py3-none-any.whl", hash = "sha256:5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8"}, - {file = "opentelemetry_api-1.29.0.tar.gz", hash = "sha256:d04a6cf78aad09614f52964ecb38021e248f5714dc32c2e0d8fd99517b4d69cf"}, + {file = "opentelemetry_api-1.16.0-py3-none-any.whl", hash = "sha256:79e8f0cf88dbdd36b6abf175d2092af1efcaa2e71552d0d2b3b181a9707bf4bc"}, + {file = "opentelemetry_api-1.16.0.tar.gz", hash = "sha256:4b0e895a3b1f5e1908043ebe492d33e33f9ccdbe6d02d3994c2f8721a63ddddb"}, ] [package.dependencies] deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<=8.5.0" +setuptools = ">=16.0" [[package]] name = "orderly-set" @@ -3492,18 +3463,21 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "plotly" -version = "5.24.1" +version = "6.0.0" description = "An open-source, interactive data visualization library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "plotly-5.24.1-py3-none-any.whl", hash = "sha256:f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089"}, - {file = "plotly-5.24.1.tar.gz", hash = "sha256:dbc8ac8339d248a4bcc36e08a5659bacfe1b079390b8953533f4eb22169b4bae"}, + {file = "plotly-6.0.0-py3-none-any.whl", hash = "sha256:f708871c3a9349a68791ff943a5781b1ec04de7769ea69068adcd9202e57653a"}, + {file = "plotly-6.0.0.tar.gz", hash = "sha256:c4aad38b8c3d65e4a5e7dd308b084143b9025c2cc9d5317fc1f1d30958db87d3"}, ] [package.dependencies] +narwhals = ">=1.15.1" packaging = "*" -tenacity = ">=6.2.0" + +[package.extras] +express = ["numpy"] [[package]] name = "pluggy" @@ -3557,13 +3531,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] [package.dependencies] @@ -3626,53 +3600,53 @@ tests = ["pytest"] [[package]] name = "pyarrow" -version = "18.1.0" +version = "19.0.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" files = [ - {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, - {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56"}, - {file = "pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812"}, - {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854"}, - {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0"}, - {file = "pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a"}, - {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d"}, - {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30"}, - {file = "pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99"}, - {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b"}, - {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c"}, - {file = "pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181"}, - {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc"}, - {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba"}, - {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e"}, - {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7"}, - {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"}, - {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"}, + {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"}, + {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44"}, + {file = "pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c"}, + {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a"}, + {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263"}, + {file = "pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2"}, + {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68"}, + {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1"}, + {file = "pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136"}, + {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463"}, + {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04"}, + {file = "pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9"}, + {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560"}, + {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89"}, + {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a"}, + {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d"}, + {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, + {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, ] [package.extras] @@ -3691,13 +3665,13 @@ files = [ [[package]] name = "pydantic" -version = "2.10.5" +version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, - {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] @@ -3868,13 +3842,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.14" +version = "10.14.2" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.14-py3-none-any.whl", hash = "sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5"}, - {file = "pymdown_extensions-10.14.tar.gz", hash = "sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34"}, + {file = "pymdown_extensions-10.14.2-py3-none-any.whl", hash = "sha256:f45bc5892410e54fd738ab8ccd736098b7ff0cb27fdb4bf24d0a0c6584bc90e1"}, + {file = "pymdown_extensions-10.14.2.tar.gz", hash = "sha256:7a77b8116dc04193f2c01143760a43387bd9dc4aa05efacb7d838885a7791253"}, ] [package.dependencies] @@ -3900,22 +3874,22 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyproject-api" -version = "1.8.0" +version = "1.9.0" description = "API to interact with the python pyproject.toml based projects" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyproject_api-1.8.0-py3-none-any.whl", hash = "sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228"}, - {file = "pyproject_api-1.8.0.tar.gz", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496"}, + {file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"}, + {file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"}, ] [package.dependencies] -packaging = ">=24.1" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +packaging = ">=24.2" +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "pytest (>=8.3.3)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "setuptools (>=75.1)"] +docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "setuptools (>=75.8)"] [[package]] name = "pyqt5" @@ -4519,18 +4493,19 @@ test = ["pytest", "pytest-mock"] [[package]] name = "referencing" -version = "0.35.1" +version = "0.36.2" description = "JSON Referencing + Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, - {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, ] [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} [[package]] name = "regex" @@ -4888,29 +4863,29 @@ files = [ [[package]] name = "ruff" -version = "0.6.9" +version = "0.9.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, - {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, - {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, - {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, - {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, - {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, - {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, + {file = "ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624"}, + {file = "ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c"}, + {file = "ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4"}, + {file = "ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519"}, + {file = "ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b"}, + {file = "ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c"}, + {file = "ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4"}, + {file = "ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b"}, + {file = "ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a"}, ] [[package]] @@ -4926,41 +4901,41 @@ files = [ [[package]] name = "scikit-learn" -version = "1.6.0" +version = "1.6.1" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" files = [ - {file = "scikit_learn-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:366fb3fa47dce90afed3d6106183f4978d6f24cfd595c2373424171b915ee718"}, - {file = "scikit_learn-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:59cd96a8d9f8dfd546f5d6e9787e1b989e981388d7803abbc9efdcde61e47460"}, - {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7a579606c73a0b3d210e33ea410ea9e1af7933fe324cb7e6fbafae4ea5948"}, - {file = "scikit_learn-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a46d3ca0f11a540b8eaddaf5e38172d8cd65a86cb3e3632161ec96c0cffb774c"}, - {file = "scikit_learn-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:5be4577769c5dde6e1b53de8e6520f9b664ab5861dd57acee47ad119fd7405d6"}, - {file = "scikit_learn-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f50b4f24cf12a81c3c09958ae3b864d7534934ca66ded3822de4996d25d7285"}, - {file = "scikit_learn-1.6.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eb9ae21f387826da14b0b9cb1034f5048ddb9182da429c689f5f4a87dc96930b"}, - {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baa91eeb8c32632628874a5c91885eaedd23b71504d24227925080da075837a"}, - {file = "scikit_learn-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c716d13ba0a2f8762d96ff78d3e0cde90bc9c9b5c13d6ab6bb9b2d6ca6705fd"}, - {file = "scikit_learn-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9aafd94bafc841b626681e626be27bf1233d5a0f20f0a6fdb4bee1a1963c6643"}, - {file = "scikit_learn-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:04a5ba45c12a5ff81518aa4f1604e826a45d20e53da47b15871526cda4ff5174"}, - {file = "scikit_learn-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:21fadfc2ad7a1ce8bd1d90f23d17875b84ec765eecbbfc924ff11fb73db582ce"}, - {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30f34bb5fde90e020653bb84dcb38b6c83f90c70680dbd8c38bd9becbad7a127"}, - {file = "scikit_learn-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dad624cffe3062276a0881d4e441bc9e3b19d02d17757cd6ae79a9d192a0027"}, - {file = "scikit_learn-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fce7950a3fad85e0a61dc403df0f9345b53432ac0e47c50da210d22c60b6d85"}, - {file = "scikit_learn-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5453b2e87ef8accedc5a8a4e6709f887ca01896cd7cc8a174fe39bd4bb00aef"}, - {file = "scikit_learn-1.6.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5fe11794236fb83bead2af26a87ced5d26e3370b8487430818b915dafab1724e"}, - {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61fe3dcec0d82ae280877a818ab652f4988371e32dd5451e75251bece79668b1"}, - {file = "scikit_learn-1.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44e3a51e181933bdf9a4953cc69c6025b40d2b49e238233f149b98849beb4bf"}, - {file = "scikit_learn-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:a17860a562bac54384454d40b3f6155200c1c737c9399e6a97962c63fce503ac"}, - {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:98717d3c152f6842d36a70f21e1468fb2f1a2f8f2624d9a3f382211798516426"}, - {file = "scikit_learn-1.6.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:34e20bfac8ff0ebe0ff20fb16a4d6df5dc4cc9ce383e00c2ab67a526a3c67b18"}, - {file = "scikit_learn-1.6.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba06d75815406091419e06dd650b91ebd1c5f836392a0d833ff36447c2b1bfa"}, - {file = "scikit_learn-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b6916d1cec1ff163c7d281e699d7a6a709da2f2c5ec7b10547e08cc788ddd3ae"}, - {file = "scikit_learn-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:66b1cf721a9f07f518eb545098226796c399c64abdcbf91c2b95d625068363da"}, - {file = "scikit_learn-1.6.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:7b35b60cf4cd6564b636e4a40516b3c61a4fa7a8b1f7a3ce80c38ebe04750bc3"}, - {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a73b1c2038c93bc7f4bf21f6c9828d5116c5d2268f7a20cfbbd41d3074d52083"}, - {file = "scikit_learn-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c3fa7d3dd5a0ec2d0baba0d644916fa2ab180ee37850c5d536245df916946bd"}, - {file = "scikit_learn-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:df778486a32518cda33818b7e3ce48c78cef1d5f640a6bc9d97c6d2e71449a51"}, - {file = "scikit_learn-1.6.0.tar.gz", hash = "sha256:9d58481f9f7499dff4196927aedd4285a0baec8caa3790efbe205f13de37dd6e"}, + {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"}, + {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"}, + {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5"}, + {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b"}, + {file = "scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002"}, + {file = "scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33"}, + {file = "scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d"}, + {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2"}, + {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8"}, + {file = "scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415"}, + {file = "scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b"}, + {file = "scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2"}, + {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f"}, + {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86"}, + {file = "scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52"}, + {file = "scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322"}, + {file = "scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1"}, + {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348"}, + {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97"}, + {file = "scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb"}, + {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236"}, + {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35"}, + {file = "scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691"}, + {file = "scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f"}, + {file = "scikit_learn-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6849dd3234e87f55dce1db34c89a810b489ead832aaf4d4550b7ea85628be6c1"}, + {file = "scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e7be3fa5d2eb9be7d77c3734ff1d599151bb523674be9b834e8da6abe132f44e"}, + {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107"}, + {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422"}, + {file = "scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b"}, + {file = "scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e"}, ] [package.dependencies] @@ -5179,21 +5154,6 @@ files = [ [package.extras] widechars = ["wcwidth"] -[[package]] -name = "tenacity" -version = "9.0.0" -description = "Retry code until it succeeds" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, - {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, -] - -[package.extras] -doc = ["reno", "sphinx"] -test = ["pytest", "tornado (>=4.5)", "typeguard"] - [[package]] name = "terminado" version = "0.18.1" @@ -5318,13 +5278,13 @@ files = [ [[package]] name = "tox" -version = "4.23.2" +version = "4.24.1" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.8" files = [ - {file = "tox-4.23.2-py3-none-any.whl", hash = "sha256:452bc32bb031f2282881a2118923176445bac783ab97c874b8770ab4c3b76c38"}, - {file = "tox-4.23.2.tar.gz", hash = "sha256:86075e00e555df6e82e74cfc333917f91ecb47ffbc868dcafbd2672e332f4a2c"}, + {file = "tox-4.24.1-py3-none-any.whl", hash = "sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"}, + {file = "tox-4.24.1.tar.gz", hash = "sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"}, ] [package.dependencies] @@ -5332,13 +5292,13 @@ cachetools = ">=5.5" chardet = ">=5.2" colorama = ">=0.4.6" filelock = ">=3.16.1" -packaging = ">=24.1" +packaging = ">=24.2" platformdirs = ">=4.3.6" pluggy = ">=1.5" pyproject-api = ">=1.8" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +tomli = {version = ">=2.1", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.26.6" +virtualenv = ">=20.27.1" [package.extras] test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] @@ -5418,13 +5378,13 @@ typing-extensions = ">=3.7.4" [[package]] name = "tzdata" -version = "2024.2" +version = "2025.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, - {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, + {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, + {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, ] [[package]] @@ -5493,13 +5453,13 @@ tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} [[package]] name = "virtualenv" -version = "20.28.1" +version = "20.29.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb"}, - {file = "virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329"}, + {file = "virtualenv-20.29.1-py3-none-any.whl", hash = "sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779"}, + {file = "virtualenv-20.29.1.tar.gz", hash = "sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35"}, ] [package.dependencies] @@ -5619,80 +5579,80 @@ test = ["websockets"] [[package]] name = "websockets" -version = "14.1" +version = "14.2" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" files = [ - {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, - {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, - {file = "websockets-14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0"}, - {file = "websockets-14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078"}, - {file = "websockets-14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434"}, - {file = "websockets-14.1-cp310-cp310-win32.whl", hash = "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10"}, - {file = "websockets-14.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e"}, - {file = "websockets-14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512"}, - {file = "websockets-14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac"}, - {file = "websockets-14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3"}, - {file = "websockets-14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89"}, - {file = "websockets-14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23"}, - {file = "websockets-14.1-cp311-cp311-win32.whl", hash = "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e"}, - {file = "websockets-14.1-cp311-cp311-win_amd64.whl", hash = "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09"}, - {file = "websockets-14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed"}, - {file = "websockets-14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d"}, - {file = "websockets-14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45"}, - {file = "websockets-14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4"}, - {file = "websockets-14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05"}, - {file = "websockets-14.1-cp312-cp312-win32.whl", hash = "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0"}, - {file = "websockets-14.1-cp312-cp312-win_amd64.whl", hash = "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f"}, - {file = "websockets-14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9"}, - {file = "websockets-14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b"}, - {file = "websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2"}, - {file = "websockets-14.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7"}, - {file = "websockets-14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a"}, - {file = "websockets-14.1-cp313-cp313-win32.whl", hash = "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6"}, - {file = "websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0"}, - {file = "websockets-14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a"}, - {file = "websockets-14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6"}, - {file = "websockets-14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b"}, - {file = "websockets-14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a"}, - {file = "websockets-14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc"}, - {file = "websockets-14.1-cp39-cp39-win32.whl", hash = "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4"}, - {file = "websockets-14.1-cp39-cp39-win_amd64.whl", hash = "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979"}, - {file = "websockets-14.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8"}, - {file = "websockets-14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb"}, - {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7"}, - {file = "websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d"}, - {file = "websockets-14.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370"}, - {file = "websockets-14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0"}, - {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1"}, - {file = "websockets-14.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5"}, - {file = "websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e"}, - {file = "websockets-14.1.tar.gz", hash = "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8"}, + {file = "websockets-14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e8179f95323b9ab1c11723e5d91a89403903f7b001828161b480a7810b334885"}, + {file = "websockets-14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0d8c3e2cdb38f31d8bd7d9d28908005f6fa9def3324edb9bf336d7e4266fd397"}, + {file = "websockets-14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:714a9b682deb4339d39ffa674f7b674230227d981a37d5d174a4a83e3978a610"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e53c72052f2596fb792a7acd9704cbc549bf70fcde8a99e899311455974ca3"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fbd68850c837e57373d95c8fe352203a512b6e49eaae4c2f4088ef8cf21980"}, + {file = "websockets-14.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b27ece32f63150c268593d5fdb82819584831a83a3f5809b7521df0685cd5d8"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4daa0faea5424d8713142b33825fff03c736f781690d90652d2c8b053345b0e7"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bc63cee8596a6ec84d9753fd0fcfa0452ee12f317afe4beae6b157f0070c6c7f"}, + {file = "websockets-14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a570862c325af2111343cc9b0257b7119b904823c675b22d4ac547163088d0d"}, + {file = "websockets-14.2-cp310-cp310-win32.whl", hash = "sha256:75862126b3d2d505e895893e3deac0a9339ce750bd27b4ba515f008b5acf832d"}, + {file = "websockets-14.2-cp310-cp310-win_amd64.whl", hash = "sha256:cc45afb9c9b2dc0852d5c8b5321759cf825f82a31bfaf506b65bf4668c96f8b2"}, + {file = "websockets-14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3bdc8c692c866ce5fefcaf07d2b55c91d6922ac397e031ef9b774e5b9ea42166"}, + {file = "websockets-14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c93215fac5dadc63e51bcc6dceca72e72267c11def401d6668622b47675b097f"}, + {file = "websockets-14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c9b6535c0e2cf8a6bf938064fb754aaceb1e6a4a51a80d884cd5db569886910"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a52a6d7cf6938e04e9dceb949d35fbdf58ac14deea26e685ab6368e73744e4c"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f05702e93203a6ff5226e21d9b40c037761b2cfb637187c9802c10f58e40473"}, + {file = "websockets-14.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22441c81a6748a53bfcb98951d58d1af0661ab47a536af08920d129b4d1c3473"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd9b868d78b194790e6236d9cbc46d68aba4b75b22497eb4ab64fa640c3af56"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1a5a20d5843886d34ff8c57424cc65a1deda4375729cbca4cb6b3353f3ce4142"}, + {file = "websockets-14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34277a29f5303d54ec6468fb525d99c99938607bc96b8d72d675dee2b9f5bf1d"}, + {file = "websockets-14.2-cp311-cp311-win32.whl", hash = "sha256:02687db35dbc7d25fd541a602b5f8e451a238ffa033030b172ff86a93cb5dc2a"}, + {file = "websockets-14.2-cp311-cp311-win_amd64.whl", hash = "sha256:862e9967b46c07d4dcd2532e9e8e3c2825e004ffbf91a5ef9dde519ee2effb0b"}, + {file = "websockets-14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f20522e624d7ffbdbe259c6b6a65d73c895045f76a93719aa10cd93b3de100c"}, + {file = "websockets-14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:647b573f7d3ada919fd60e64d533409a79dcf1ea21daeb4542d1d996519ca967"}, + {file = "websockets-14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6af99a38e49f66be5a64b1e890208ad026cda49355661549c507152113049990"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:091ab63dfc8cea748cc22c1db2814eadb77ccbf82829bac6b2fbe3401d548eda"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b374e8953ad477d17e4851cdc66d83fdc2db88d9e73abf755c94510ebddceb95"}, + {file = "websockets-14.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a39d7eceeea35db85b85e1169011bb4321c32e673920ae9c1b6e0978590012a3"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a6f3efd47ffd0d12080594f434faf1cd2549b31e54870b8470b28cc1d3817d9"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:065ce275e7c4ffb42cb738dd6b20726ac26ac9ad0a2a48e33ca632351a737267"}, + {file = "websockets-14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e9d0e53530ba7b8b5e389c02282f9d2aa47581514bd6049d3a7cffe1385cf5fe"}, + {file = "websockets-14.2-cp312-cp312-win32.whl", hash = "sha256:20e6dd0984d7ca3037afcb4494e48c74ffb51e8013cac71cf607fffe11df7205"}, + {file = "websockets-14.2-cp312-cp312-win_amd64.whl", hash = "sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce"}, + {file = "websockets-14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f1372e511c7409a542291bce92d6c83320e02c9cf392223272287ce55bc224e"}, + {file = "websockets-14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4da98b72009836179bb596a92297b1a61bb5a830c0e483a7d0766d45070a08ad"}, + {file = "websockets-14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8a86a269759026d2bde227652b87be79f8a734e582debf64c9d302faa1e9f03"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86cf1aaeca909bf6815ea714d5c5736c8d6dd3a13770e885aafe062ecbd04f1f"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b0f6c3ba3b1240f602ebb3971d45b02cc12bd1845466dd783496b3b05783a5"}, + {file = "websockets-14.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669c3e101c246aa85bc8534e495952e2ca208bd87994650b90a23d745902db9a"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eabdb28b972f3729348e632ab08f2a7b616c7e53d5414c12108c29972e655b20"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2066dc4cbcc19f32c12a5a0e8cc1b7ac734e5b64ac0a325ff8353451c4b15ef2"}, + {file = "websockets-14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ab95d357cd471df61873dadf66dd05dd4709cae001dd6342edafc8dc6382f307"}, + {file = "websockets-14.2-cp313-cp313-win32.whl", hash = "sha256:a9e72fb63e5f3feacdcf5b4ff53199ec8c18d66e325c34ee4c551ca748623bbc"}, + {file = "websockets-14.2-cp313-cp313-win_amd64.whl", hash = "sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f"}, + {file = "websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe"}, + {file = "websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12"}, + {file = "websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0"}, + {file = "websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4"}, + {file = "websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc"}, + {file = "websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661"}, + {file = "websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef"}, + {file = "websockets-14.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d7d9cafbccba46e768be8a8ad4635fa3eae1ffac4c6e7cb4eb276ba41297ed29"}, + {file = "websockets-14.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c76193c1c044bd1e9b3316dcc34b174bbf9664598791e6fb606d8d29000e070c"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd475a974d5352390baf865309fe37dec6831aafc3014ffac1eea99e84e83fc2"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c6c0097a41968b2e2b54ed3424739aab0b762ca92af2379f152c1aef0187e1c"}, + {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7ff794c8b36bc402f2e07c0b2ceb4a2424147ed4785ff03e2a7af03711d60a"}, + {file = "websockets-14.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dec254fcabc7bd488dab64846f588fc5b6fe0d78f641180030f8ea27b76d72c3"}, + {file = "websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f"}, + {file = "websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574"}, + {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270"}, + {file = "websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365"}, + {file = "websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b"}, + {file = "websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5"}, ] [[package]] @@ -5708,13 +5668,13 @@ files = [ [[package]] name = "wirerope" -version = "0.4.8" +version = "1.0.0" description = "'Turn functions and methods into fully controllable objects'" optional = false python-versions = "*" files = [ - {file = "wirerope-0.4.8-py2.py3-none-any.whl", hash = "sha256:99e54b9bd9d3a8e18199b87e2c5edf58d7f64e3f7e2f5bb041034025f03a4e68"}, - {file = "wirerope-0.4.8.tar.gz", hash = "sha256:fa172d09eff7534563f315e38712b5fa3b88a1aa3467b539a7510f2e427a7af4"}, + {file = "wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6"}, + {file = "wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0"}, ] [package.dependencies] @@ -5726,76 +5686,90 @@ test = ["pytest (>=4.6.7)", "pytest-checkdocs (>=1.2.5)", "pytest-checkdocs (>=2 [[package]] name = "wrapt" -version = "1.17.0" +version = "1.17.2" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" files = [ - {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, - {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, - {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, - {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, - {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, - {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, - {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, - {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, - {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, - {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, - {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, - {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, - {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, - {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, - {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, - {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, - {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, - {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, - {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, - {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, - {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, - {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, - {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, - {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, - {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, - {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, - {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, - {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, - {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, - {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, - {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, - {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, - {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, - {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, - {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, - {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, - {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, ] [[package]] @@ -6070,4 +6044,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "55f8af08f29ff5940544e0a265cf98cdda37e30f47a91db824bcab877177240e" +content-hash = "227382df3f3f0c9c941810a7e242086570c8756e762da58daa80034e19eaea5c" diff --git a/pyproject.toml b/pyproject.toml index 0b29e91d..728c6d7a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opensquirrel" -version = "0.0.5" +version = "0.3.0" description = "A quantum circuit transformation and manipulation tool" authors = [ "Quantum Inspire " @@ -29,19 +29,17 @@ packages = [ [tool.poetry.dependencies] python = "^3.9" -numpy = [ - { version = "^1.26", python = "<3.10" }, - { version = "^2.0", python = "^3.10" }, -] +numpy = ">=1.26" libqasm = "0.6.9" networkx = "^3.0.0" +tox = "^4.24.1" [tool.poetry.group.dev.dependencies] coverage = {extras = ["toml"], version = "^7.3.2"} pytest = {extras = ["toml"], version = ">=7.4.3,<9.0.0"} pytest-cov = ">=4.1,<7.0" mypy = "^1.7.0" -ruff = ">=0.5,<0.7" +ruff = ">=0.5,<0.10" tox = "^4.16.0" sympy = "^1.13.1" IPython = ">=7.12,<9.0" @@ -156,8 +154,6 @@ select = [ ] ignore = [ "A005", # module shadowing a Python builtin module - "ANN101", # self should not be typed - "ANN102", # cls should not be typed "ANN401", # typing.Any can be useful (for example in __eq__) "COM812", # Conflicts with ruff format "ISC001", # Possible conflicts with ruff format diff --git a/test/merger/test_general_merger.py b/test/merger/test_general_merger.py index 4b2bac9f..13887687 100644 --- a/test/merger/test_general_merger.py +++ b/test/merger/test_general_merger.py @@ -2,7 +2,7 @@ import pytest -from opensquirrel import Circuit, CircuitBuilder, H, I, Rx, Ry, X +from opensquirrel import Circuit, CircuitBuilder, H, I, Rx, Ry, X, Y, Z from opensquirrel.ir import BlochSphereRotation, Float from opensquirrel.passes.merger.general_merger import compose_bloch_sphere_rotations, rearrange_barriers @@ -19,29 +19,45 @@ def test_compose_bloch_sphere_rotations_different_axis() -> None: a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=math.pi / 2) b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-math.pi / 2) c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=math.pi / 2) - composed = compose_bloch_sphere_rotations(a, compose_bloch_sphere_rotations(b, c)) + composed = compose_bloch_sphere_rotations(compose_bloch_sphere_rotations(c, b), a) assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=math.pi) @pytest.mark.parametrize( ("bsr_a", "bsr_b", "expected_result"), [ + (Y(0), X(0), BlochSphereRotation(0, axis=(0, 0, 1), angle=math.pi, phase=math.pi)), + (X(0), Y(0), BlochSphereRotation(0, axis=(0, 0, -1), angle=math.pi, phase=math.pi)), + (Z(0), Y(0), BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi)), + (Y(0), Z(0), BlochSphereRotation(0, axis=(-1, 0, 0), angle=math.pi, phase=math.pi)), + (Z(0), X(0), BlochSphereRotation(0, axis=(0, -1, 0), angle=math.pi, phase=math.pi)), + (X(0), Z(0), BlochSphereRotation(0, axis=(0, 1, 0), angle=math.pi, phase=math.pi)), + ( + Rx(0, theta=math.pi), + Ry(0, theta=-math.pi / 2), + BlochSphereRotation(0, axis=(0.70711, 0.0, 0.70711), angle=math.pi, phase=0.0), + ), (I(0), Rx(0, theta=math.pi), Rx(0, theta=math.pi)), (Rx(0, theta=math.pi), I(0), Rx(0, theta=math.pi)), (X(0), X(0), I(0)), (H(0), H(0), I(0)), (Rx(0, theta=math.pi), Rx(0, theta=math.pi), I(0)), (Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi)), - (Rx(0, theta=math.pi), Ry(0, theta=math.pi / 2), BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)), ], ids=[ + "[bsr_a = Y, bsr_b = X] X * Y = iZ", + "[bsr_a = X, bsr_b = Y] Y * X = -iZ", + "[bsr_a = Z, bsr_b = Y] Y * Z = iX", + "[bsr_a = Y, bsr_b = Z] Z * Y = -iX", + "[bsr_a = Z, bsr_b = X] X * Z = -iY", + "[bsr_a = X, bsr_b = Z] Z * X = iY", + "[bsr_a = Rx(pi), bsr_b = Ry(-pi/2)] Ry(-pi/2) * Rx(pi) ~ H", "[bsr_a == I]", "[bsr_b == I]", "[bsr_a.generator == bsr_b.generator] X * X == I", "[bsr_a.generator == bsr_b.generator] H * H == I", "[bsr_a.generator == bsr_b.generator] Rx(pi) * Rx(pi) == I", "[bsr_a.generator == bsr_b.generator] Rx(pi/2) * Rx(pi/2) = Rx(pi) ~ X", - "[bsr_a.generator != bsr_b.generator] Rx(pi) * Ry(pi/2) ~ H", ], ) def test_compose_bloch_sphere_rotations( diff --git a/test/parser/libqasm/test_libqasm.py b/test/parser/libqasm/test_libqasm.py index cc115d86..76e04961 100644 --- a/test/parser/libqasm/test_libqasm.py +++ b/test/parser/libqasm/test_libqasm.py @@ -59,7 +59,7 @@ def test_sgmq() -> None: def test_error() -> None: with pytest.raises( IOError, - match="Error at :1:30..31: failed to resolve variable 'q'", + match=r"Error at :1:30..31: failed to resolve variable 'q'", ): Parser().circuit_from_string("version 3.0; qubit[20] qu; H q[5]") diff --git a/test/router/test_routing_checker.py b/test/router/test_routing_checker.py index 6823059e..df3b5784 100644 --- a/test/router/test_routing_checker.py +++ b/test/router/test_routing_checker.py @@ -48,5 +48,7 @@ def test_routing_checker_possible_1to1_mapping(router: RoutingChecker, circuit1: def test_routing_checker_impossible_1to1_mapping(router: RoutingChecker, circuit2: Circuit) -> None: - with pytest.raises(ValueError, match="The following qubit interactions in the circuit prevent a 1-to-1 mapping:.*"): + with pytest.raises( + ValueError, match=r"the following qubit interactions in the circuit prevent a 1-to-1 mapping:.*" + ): router.route(circuit2.ir) diff --git a/test/test_circuit_builder.py b/test/test_circuit_builder.py index 3e6c1f60..25b7884d 100644 --- a/test/test_circuit_builder.py +++ b/test/test_circuit_builder.py @@ -71,7 +71,7 @@ def test_unknown_instruction(self) -> None: def test_wrong_number_of_arguments(self) -> None: builder = CircuitBuilder(3) - with pytest.raises(TypeError, match=".* takes 1 positional argument but 2 were given"): + with pytest.raises(TypeError, match=r".* takes 1 positional argument but 2 were given"): builder.H(0, 1) def test_decoupling_circuit_and_builder(self) -> None: diff --git a/test/test_integration.py b/test/test_integration.py index 5d66d5f2..6ffd3adf 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -17,6 +17,7 @@ from opensquirrel.passes.exporter import ExportFormat from opensquirrel.passes.merger import SingleQubitGatesMerger from opensquirrel.passes.router import RoutingChecker +from opensquirrel.passes.validator import NativeGateValidator def test_spin2plus_backend() -> None: @@ -47,8 +48,12 @@ def test_spin2plus_backend() -> None: # Check whether the above algorithm can be mapped to a dummy chip topology connectivity = {"0": [1], "1": [0]} + native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] - qc.route(router=RoutingChecker(connectivity=connectivity)) + qc.route(router=RoutingChecker(connectivity)) + + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer()) qc.decompose(decomposer=SWAP2CNOTDecomposer()) @@ -64,6 +69,9 @@ def test_spin2plus_backend() -> None: # Decompose single-qubit gates to spin backend native gates with McKay decomposer qc.decompose(decomposer=McKayDecomposer()) + # Check whether the gates in the circuit match the native gate set of the backend + qc.validate(validator=NativeGateValidator(native_gate_set)) + assert ( str(qc) == """version 3.0 @@ -267,7 +275,7 @@ def test_hectoqubit_backend_allxy() -> None: if importlib.util.find_spec("quantify_scheduler") is None: with pytest.raises( Exception, - match="quantify-scheduler is not installed, or cannot be installed on " "your system", + match="quantify-scheduler is not installed, or cannot be installed on your system", ): qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) else: diff --git a/test/test_ir.py b/test/test_ir.py index 9acb0ed9..a1886196 100644 --- a/test/test_ir.py +++ b/test/test_ir.py @@ -325,7 +325,7 @@ def test_array_like(self) -> None: ) def test_incorrect_array(self) -> None: - with pytest.raises(ValueError, match=".* inhomogeneous shape after .*") as e_info: + with pytest.raises(ValueError, match=r".* inhomogeneous shape after .*") as e_info: MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0]], [0, 1]) assert "setting an array element with a sequence." in str(e_info.value) diff --git a/test/validator/test_native_gate_validator.py b/test/validator/test_native_gate_validator.py new file mode 100644 index 00000000..67df3779 --- /dev/null +++ b/test/validator/test_native_gate_validator.py @@ -0,0 +1,52 @@ +# Tests for native gate checker pass +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.validator import NativeGateValidator + + +@pytest.fixture(name="validator") +def validator_fixture() -> NativeGateValidator: + native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + return NativeGateValidator(native_gate_set) + + +@pytest.fixture +def circuit_with_matching_gate_set() -> Circuit: + builder = CircuitBuilder(5) + builder.I(0) + builder.X90(1) + builder.mX90(2) + builder.Y90(3) + builder.mY90(4) + builder.Rz(0, 2) + builder.CZ(1, 2) + return builder.to_circuit() + + +@pytest.fixture +def circuit_with_unmatching_gate_set() -> Circuit: + builder = CircuitBuilder(5) + builder.I(0) + builder.X90(1) + builder.mX90(2) + builder.Y90(3) + builder.mY90(4) + builder.Rz(0, 2) + builder.CZ(1, 2) + builder.H(0) + builder.CNOT(1, 2) + return builder.to_circuit() + + +def test_matching_gates(validator: NativeGateValidator, circuit_with_matching_gate_set: Circuit) -> None: + try: + validator.validate(circuit_with_matching_gate_set.ir) + except ValueError: + pytest.fail("validate() raised ValueError unexpectedly") + + +def test_non_matching_gates(validator: NativeGateValidator, circuit_with_unmatching_gate_set: Circuit) -> None: + with pytest.raises(ValueError, match=r"the following gates are not in the native gate set:.*"): + validator.validate(circuit_with_unmatching_gate_set.ir) From 26075794ca09e5e5d940374fbb601e9e5252a918 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:53:16 +0100 Subject: [PATCH 04/12] Release 0.3.1 (#446) --- CHANGELOG.md | 7 +++++++ opensquirrel/writer/writer.py | 2 +- pyproject.toml | 2 +- test/writer/test_writer.py | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2e17857..e06746df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Removed** for now removed features. +## [0.3.1] - [ 2025-01-31 ] + +### Fixed + +- Bug in the writing of SWAP instructions + + ## [ 0.3.0 ] - [ 2025-01-30 ] ### Added diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py index 98cd38a8..e6822ba8 100644 --- a/opensquirrel/writer/writer.py +++ b/opensquirrel/writer/writer.py @@ -66,7 +66,7 @@ def visit_gate(self, gate: Gate) -> None: gate_generator = [] if gate.generator is not None: gate_generator = list(inspect.signature(gate.generator).parameters.keys()) - qubit_function_keys = ["target", "control", "qubit"] + qubit_function_keys = ["target", "control", "qubit", "qubit0", "qubit1"] if gate.is_anonymous: if "MatrixGate" in gate_name: # In the case of a MatrixGate the newlines should be removed from the array diff --git a/pyproject.toml b/pyproject.toml index 728c6d7a..26b345af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opensquirrel" -version = "0.3.0" +version = "0.3.1" description = "A quantum circuit transformation and manipulation tool" authors = [ "Quantum Inspire " diff --git a/test/writer/test_writer.py b/test/writer/test_writer.py index c6368984..cf4cfbac 100644 --- a/test/writer/test_writer.py +++ b/test/writer/test_writer.py @@ -86,6 +86,22 @@ def test_measure() -> None: ) +def test_swap() -> None: + builder = CircuitBuilder(2, 2) + builder.SWAP(0, 1) + circuit = builder.to_circuit() + assert ( + writer.circuit_to_string(circuit) + == """version 3.0 + +qubit[2] q +bit[2] b + +SWAP q[0], q[1] +""" + ) + + def test_anonymous_gate() -> None: builder = CircuitBuilder(2, 2) builder.H(0) From 52e6e660793815a6ab94d1e47099dde9990fd031 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Mon, 28 Apr 2025 14:35:53 +0200 Subject: [PATCH 05/12] Release 0.4.0 (#516) --- CHANGELOG.md | 23 +- docs/_static/swap2cz.png | Bin 0 -> 164027 bytes docs/tutorial.md | 16 +- example/decompositions.ipynb | 122 +- opensquirrel/__init__.py | 40 +- opensquirrel/circuit.py | 6 +- opensquirrel/circuit_builder.py | 92 +- opensquirrel/circuit_matrix_calculator.py | 49 +- opensquirrel/default_gate_modifiers.py | 26 +- opensquirrel/default_instructions.py | 240 +- opensquirrel/exceptions.py | 12 + opensquirrel/instruction_library.py | 27 - opensquirrel/ir.py | 882 +++--- opensquirrel/parser/libqasm/parser.py | 157 +- opensquirrel/passes/decomposer/__init__.py | 4 + .../passes/decomposer/aba_decomposer.py | 3 +- .../passes/decomposer/cnot2cz_decomposer.py | 3 +- .../passes/decomposer/cnot_decomposer.py | 1 - .../passes/decomposer/cz_decomposer.py | 75 + .../passes/decomposer/general_decomposer.py | 23 +- .../passes/decomposer/swap2cnot_decomposer.py | 2 +- .../passes/decomposer/swap2cz_decomposer.py | 36 + .../passes/exporter/cqasmv1_exporter.py | 103 +- .../exporter/quantify_scheduler_exporter.py | 114 +- opensquirrel/passes/mapper/__init__.py | 4 +- opensquirrel/passes/mapper/general_mapper.py | 4 +- opensquirrel/passes/mapper/qubit_remapper.py | 44 +- opensquirrel/passes/mapper/simple_mappers.py | 34 +- opensquirrel/passes/merger/general_merger.py | 55 +- .../merger/single_qubit_gates_merger.py | 4 +- opensquirrel/passes/router/__init__.py | 10 +- opensquirrel/passes/router/astar_router.py | 58 + opensquirrel/passes/router/general_router.py | 5 +- opensquirrel/passes/router/heuristics.py | 33 + .../passes/router/shortest_path_router.py | 41 + opensquirrel/passes/validator/__init__.py | 5 +- .../passes/validator/general_validator.py | 3 + .../passes/validator/native_gate_validator.py | 26 - .../validator/primitive_gate_validator.py | 30 + .../routing_validator.py} | 20 +- opensquirrel/reindexer/qubit_reindexer.py | 55 +- opensquirrel/utils/check_mapper.py | 3 +- opensquirrel/utils/matrix_expander.py | 45 +- opensquirrel/writer/writer.py | 165 +- poetry.lock | 2497 +++++++++-------- pyproject.toml | 9 +- test/decomposer/test_cnot2cz_decomposer.py | 3 +- test/decomposer/test_cnot_decomposer.py | 19 +- test/decomposer/test_cz_decomposer.py | 59 + test/decomposer/test_mckay_decomposer.py | 8 +- test/decomposer/test_swap2cnot_decomposer.py | 2 +- test/decomposer/test_swap2cz_decomposer.py | 86 + test/decomposer/test_zyz_decomposer.py | 6 +- test/docs/test_tutorial.py | 68 +- test/mapper/test_simple_mappers.py | 25 +- test/merger/test_single_qubit_gates_merger.py | 18 +- test/parser/libqasm/test_libqasm.py | 16 +- test/router/test_astar_router.py | 96 + test/router/test_shortest_path_router.py | 95 + test/test_asm_declaration.py | 168 ++ test/test_circuit_builder.py | 2 +- test/test_instructions.py | 98 + test/test_integration.py | 594 +++- test/test_ir.py | 14 +- ...or.py => test_primitive_gate_validator.py} | 16 +- .../test_routing_validator.py} | 18 +- test/writer/test_writer.py | 6 +- 67 files changed, 4341 insertions(+), 2282 deletions(-) create mode 100644 docs/_static/swap2cz.png delete mode 100644 opensquirrel/instruction_library.py create mode 100644 opensquirrel/passes/decomposer/cz_decomposer.py create mode 100644 opensquirrel/passes/decomposer/swap2cz_decomposer.py create mode 100644 opensquirrel/passes/router/astar_router.py create mode 100644 opensquirrel/passes/router/heuristics.py create mode 100644 opensquirrel/passes/router/shortest_path_router.py delete mode 100644 opensquirrel/passes/validator/native_gate_validator.py create mode 100644 opensquirrel/passes/validator/primitive_gate_validator.py rename opensquirrel/passes/{router/routing_checker.py => validator/routing_validator.py} (63%) create mode 100644 test/decomposer/test_cz_decomposer.py create mode 100644 test/decomposer/test_swap2cz_decomposer.py create mode 100644 test/router/test_astar_router.py create mode 100644 test/router/test_shortest_path_router.py create mode 100644 test/test_asm_declaration.py create mode 100644 test/test_instructions.py rename test/validator/{test_native_gate_validator.py => test_primitive_gate_validator.py} (64%) rename test/{router/test_routing_checker.py => validator/test_routing_validator.py} (65%) diff --git a/CHANGELOG.md b/CHANGELOG.md index e06746df..57f55898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,34 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ### Types of changes: + * **Added** for new features. * **Changed** for changes in existing functionality. * **Fixed** for any bug fixes. * **Removed** for now removed features. -## [0.3.1] - [ 2025-01-31 ] +## [ 0.4.0 ] - [ 2025-04-28 ] + +### Added + +- Assembly declaration +- `Rn` unitary instruction +- `SWAP2CZDecomposer` decomposer pass +- `CZDecomposer` decomposer pass +- `ShortestPathRouter` router pass +- `RandomMapper` mapper pass +- `AStarRouter` router pass + +### Changed + +- libQASM 1.1.0 integrated (updated from 0.6.9) +- Refactor: removed generators +- Changed the `RoutingChecker` pass to a `RoutingValidator` pass +- Changed use of `native` to `primitive`, e.g. `NativeGateValidator` is now `PrimitiveGateValidator` +- Compilation passes accept `kwargs` as input + +## [ 0.3.1 ] - [ 2025-01-31 ] ### Fixed diff --git a/docs/_static/swap2cz.png b/docs/_static/swap2cz.png new file mode 100644 index 0000000000000000000000000000000000000000..b95176c2e3191dfd4b508fe9b2e97f474027d458 GIT binary patch literal 164027 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 literal 0 HcmV?d00001 diff --git a/docs/tutorial.md b/docs/tutorial.md index 8137b09e..d23d4f4e 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -207,7 +207,7 @@ _Output_: qubit[1] q - Anonymous gate: BlochSphereRotation(Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) + BlochSphereRotation(qubit=Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) In the above example, OpenSquirrel has merged all the Rx gates together. Yet, for now, OpenSquirrel does not recognize that this results in a single Rx @@ -387,6 +387,14 @@ The decomposition is illustrated in the image below.

+##### _`SWAP` to `CZ` decomposer_ + +The `SWAP2CZDecomposer` implements the predefined decomposition of the `SWAP` gate into `Ry` rotations and 3 `CZ` +gates. +The decomposition is illustrated in the image below. + +

+ #### 2. Inferred decomposition @@ -435,9 +443,9 @@ print(ZYZDecomposer().decompose(H(0))) ``` _Output_: - [BlochSphereRotation(Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] + [BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] ## Exporting a circuit diff --git a/example/decompositions.ipynb b/example/decompositions.ipynb index 3ac6e571..dc48a19a 100644 --- a/example/decompositions.ipynb +++ b/example/decompositions.ipynb @@ -17,7 +17,7 @@ "\n", "The ABA decomposition (or KAK decomposition) is a decomposition method that uses three consecutive Pauli rotation gates to form any unitary gate. Thus, any arbitrary single qubit gate can be expressed as a product of rotations: a rotation around the A axis, followed by a rotation around the B axis, and then another rotation around the A axis. The mathematical formalism for this rotation can be seen in section 3.1.\n", "\n", - "In OpenSquirrel, this can be found in the `get_decomposition_angles` method from the `opensquirrel.decomposer.aba_decomposer` module. The ABA Decomposition can be applied to list of gates or a circuit. Below we will first focus on decomposing a circuit.\n", + "In OpenSquirrel, this can be found in the `get_decomposition_angles` method from the `opensquirrel.passes.decomposer.aba_decomposer` module. The ABA Decomposition can be applied to list of gates or a circuit. Below we will first focus on decomposing a circuit.\n", "\n", "The circuit chosen is a single qubit circuit with an added Hadamard, Z, Y, and Rx gate. \n", "\n", @@ -62,15 +62,14 @@ "source": [ "import math\n", "\n", - "from opensquirrel import CircuitBuilder\n", - "from opensquirrel.ir import Float, Qubit\n", + "from opensquirrel.circuit_builder import CircuitBuilder\n", "\n", "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=1)\n", - "builder.H(Qubit(0))\n", - "builder.Z(Qubit(0))\n", - "builder.Y(Qubit(0))\n", - "builder.Rx(Qubit(0), Float(math.pi / 3))\n", + "builder.H(0)\n", + "builder.Z(0)\n", + "builder.Y(0)\n", + "builder.Rx(0, math.pi / 3)\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -81,7 +80,9 @@ "cell_type": "markdown", "id": "afe111839ab98b22", "metadata": {}, - "source": "Above we can see the current gates in our circuit. Having created a circuit, we can now use an ABA decomposition in `opensquirrel.decomposer.aba_decomposer` to decompose the gates in the circuit. For this example, we will apply the Z-Y-Z decomposition using the `ZYZDecomposer`. " + "source": [ + "Above we can see the current gates in our circuit. Having created a circuit, we can now use an ABA decomposition in `opensquirrel.passes.decomposer.aba_decomposer` to decompose the gates in the circuit. For this example, we will apply the Z-Y-Z decomposition using the `ZYZDecomposer`. " + ] }, { "cell_type": "code", @@ -116,7 +117,7 @@ } ], "source": [ - "from opensquirrel.passes.decomposer import ZYZDecomposer\n", + "from opensquirrel.passes.decomposer.aba_decomposer import ZYZDecomposer\n", "\n", "# Decompose the circuit using ZYZDecomposer\n", "circuit.decompose(decomposer=ZYZDecomposer())\n", @@ -170,9 +171,9 @@ ], "source": [ "from opensquirrel import H\n", - "from opensquirrel.passes.decomposer import XZXDecomposer\n", + "from opensquirrel.passes.decomposer.aba_decomposer import XZXDecomposer\n", "\n", - "XZXDecomposer().decompose(H(Qubit(0)))" + "XZXDecomposer().decompose(H(0))" ] }, { @@ -226,10 +227,10 @@ "source": [ "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=1)\n", - "builder.H(Qubit(0))\n", - "builder.Z(Qubit(0))\n", - "builder.X(Qubit(0))\n", - "builder.Rx(Qubit(0), Float(math.pi / 3))\n", + "builder.H(0)\n", + "builder.Z(0)\n", + "builder.X(0)\n", + "builder.Rx(0, math.pi / 3)\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -240,7 +241,9 @@ "cell_type": "markdown", "id": "69517d8287c1777d", "metadata": {}, - "source": "The `McKayDecomposer` is called from `opensquirrel.decomposer.mckay_decomposer` and used in a similar method to the `ABADecomposer`." + "source": [ + "The `McKayDecomposer` is called from `opensquirrel.passes.decomposer` and used in a similar method to the `ABADecomposer`." + ] }, { "cell_type": "code", @@ -358,9 +361,9 @@ "source": [ "# Build the circuit structure using the CircuitBuilder\n", "builder = CircuitBuilder(qubit_register_size=2)\n", - "builder.CZ(Qubit(0), Qubit(1))\n", - "builder.CR(Qubit(0), Qubit(1), Float(math.pi / 3))\n", - "builder.CR(Qubit(1), Qubit(0), Float(math.pi / 2))\n", + "builder.CZ(0, 1)\n", + "builder.CR(0, 1, math.pi / 3)\n", + "builder.CR(1, 0, math.pi / 2)\n", "\n", "# Create a new circuit from the constructed structure\n", "circuit = builder.to_circuit()\n", @@ -371,7 +374,9 @@ "cell_type": "markdown", "id": "8c945ab4572e9f77", "metadata": {}, - "source": "We can import `CNOTDecomposer` from `opensquirrel.decomposer.cnot_decomposer`. The above circuit can then be decomposed using `CNOTDecomposer` as seen below." + "source": [ + "We can import `CNOTDecomposer` from `opensquirrel.passes.decomposer`. The above circuit can then be decomposed using `CNOTDecomposer` as seen below." + ] }, { "cell_type": "code", @@ -475,7 +480,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + - \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$", + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + - \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" + ], "text/plain": [ "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + (-sin(theta_2/2)*sin((theta_1 - theta_3)/2))*i + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*j + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*k" ] @@ -502,7 +509,9 @@ "cell_type": "markdown", "id": "6e776f2cb7cae465", "metadata": {}, - "source": "Let us change variables and define $p\\equiv\\theta_1 + \\theta_3$ and $m\\equiv\\theta_1 - \\theta_3$." + "source": [ + "Let us change variables and define $p\\equiv\\theta_1 + \\theta_3$ and $m\\equiv\\theta_1 - \\theta_3$." + ] }, { "cell_type": "code", @@ -517,7 +526,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} + - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} j + \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$", + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} + - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} j + \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} k$" + ], "text/plain": [ "cos(p/2)*cos(theta_2/2) + (-sin(m/2)*sin(theta_2/2))*i + sin(theta_2/2)*cos(m/2)*j + sin(p/2)*cos(theta_2/2)*k" ] @@ -539,7 +550,9 @@ "cell_type": "markdown", "id": "1ece3d36eb99512b", "metadata": {}, - "source": "The original rotation's quaternion $q$ can be defined in Sympy accordingly:" + "source": [ + "The original rotation's quaternion $q$ can be defined in Sympy accordingly:" + ] }, { "cell_type": "code", @@ -554,7 +567,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\alpha}{2} \\right)} + n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)} i + n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)} j + n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)} k$", + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\alpha}{2} \\right)} + n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)} i + n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)} j + n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)} k$" + ], "text/plain": [ "cos(alpha/2) + n_x*sin(alpha/2)*i + n_y*sin(alpha/2)*j + n_z*sin(alpha/2)*k" ] @@ -577,7 +592,9 @@ "cell_type": "markdown", "id": "7cb50842c8fa111a", "metadata": {}, - "source": "We get the following system of equations, where the unknowns are $p$, $m$, and $\\theta_2$:\n" + "source": [ + "We get the following system of equations, where the unknowns are $p$, $m$, and $\\theta_2$:\n" + ] }, { "cell_type": "code", @@ -592,7 +609,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$", + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" + ], "text/plain": [ "Eq(cos(p/2)*cos(theta_2/2), cos(alpha/2))" ] @@ -602,7 +621,9 @@ }, { "data": { - "text/latex": "$\\displaystyle - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", + "text/latex": [ + "$\\displaystyle - \\sin{\\left(\\frac{m}{2} \\right)} \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{x} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], "text/plain": [ "Eq(-sin(m/2)*sin(theta_2/2), n_x*sin(alpha/2))" ] @@ -612,7 +633,9 @@ }, { "data": { - "text/latex": "$\\displaystyle \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} = n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", + "text/latex": [ + "$\\displaystyle \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{m}{2} \\right)} = n_{y} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], "text/plain": [ "Eq(sin(theta_2/2)*cos(m/2), n_y*sin(alpha/2))" ] @@ -622,7 +645,9 @@ }, { "data": { - "text/latex": "$\\displaystyle \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$", + "text/latex": [ + "$\\displaystyle \\sin{\\left(\\frac{p}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} = n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}$" + ], "text/plain": [ "Eq(sin(p/2)*cos(theta_2/2), n_z*sin(alpha/2))" ] @@ -646,7 +671,9 @@ "cell_type": "markdown", "id": "e6b34ef9cb46f2e4", "metadata": {}, - "source": "Instead, assume $\\sin(p/2) \\neq 0$, then we can substitute in the first equation $\\cos\\left(\\theta_2/2\\right)$ with its value computed from the last equation. We get:" + "source": [ + "Instead, assume $\\sin(p/2) \\neq 0$, then we can substitute in the first equation $\\cos\\left(\\theta_2/2\\right)$ with its value computed from the last equation. We get:" + ] }, { "cell_type": "code", @@ -661,7 +688,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\frac{n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}}{\\tan{\\left(\\frac{p}{2} \\right)}} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$", + "text/latex": [ + "$\\displaystyle \\frac{n_{z} \\sin{\\left(\\frac{\\alpha}{2} \\right)}}{\\tan{\\left(\\frac{p}{2} \\right)}} = \\cos{\\left(\\frac{\\alpha}{2} \\right)}$" + ], "text/plain": [ "Eq(n_z*sin(alpha/2)/tan(p/2), cos(alpha/2))" ] @@ -718,7 +747,9 @@ "cell_type": "markdown", "id": "e3fc4cdb6d15dd1", "metadata": {}, - "source": "The terms are similar to the other decompositions, XZX, YXY, ZXZ, XYX and YZY. However, for ZXZ, XYX and YZY, the $i$ term in the quaternion is positive as seen below in the YZY decomposition." + "source": [ + "The terms are similar to the other decompositions, XZX, YXY, ZXZ, XYX and YZY. However, for ZXZ, XYX and YZY, the $i$ term in the quaternion is positive as seen below in the YZY decomposition." + ] }, { "cell_type": "code", @@ -733,7 +764,9 @@ "outputs": [ { "data": { - "text/latex": "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} k$", + "text/latex": [ + "$\\displaystyle \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\sin{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} i + \\sin{\\left(\\frac{\\theta_{1} + \\theta_{3}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{2}}{2} \\right)} j + \\sin{\\left(\\frac{\\theta_{2}}{2} \\right)} \\cos{\\left(\\frac{\\theta_{1} - \\theta_{3}}{2} \\right)} k$" + ], "text/plain": [ "cos(theta_2/2)*cos((theta_1 + theta_3)/2) + sin(theta_2/2)*sin((theta_1 - theta_3)/2)*i + sin((theta_1 + theta_3)/2)*cos(theta_2/2)*j + sin(theta_2/2)*cos((theta_1 - theta_3)/2)*k" ] @@ -758,7 +791,9 @@ "cell_type": "markdown", "id": "a41b84ed5f3365b2", "metadata": {}, - "source": "Thus, in order to correct for the orientation of the rotation, $\\theta_1$ and $\\theta_3$ are swapped. " + "source": [ + "Thus, in order to correct for the orientation of the rotation, $\\theta_1$ and $\\theta_3$ are swapped. " + ] }, { "cell_type": "markdown", @@ -793,6 +828,8 @@ }, { "cell_type": "markdown", + "id": "866e89a24587f0af", + "metadata": {}, "source": [ "### 3.3 ABA Decomposition\n", "In a two qubit system, the unitary matrix of a controlled operation is seen below,\n", @@ -844,11 +881,20 @@ "C &= Rz\\bigg(\\frac{1}{2} \\theta_0 - \\frac{1}{2} \\theta_2 \\bigg)\n", "\\end{split}\n", "$$" - ], + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3cc1e9963f3e794d", "metadata": { - "collapsed": false + "ExecuteTime": { + "end_time": "2024-08-05T11:35:27.882752Z", + "start_time": "2024-08-05T11:35:27.871794Z" + } }, - "id": "c084046b0bb17ec9" + "outputs": [], + "source": [] } ], "metadata": { diff --git a/opensquirrel/__init__.py b/opensquirrel/__init__.py index 5a0d5e30..2f7857be 100644 --- a/opensquirrel/__init__.py +++ b/opensquirrel/__init__.py @@ -1,32 +1,33 @@ from opensquirrel.circuit import Circuit from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.default_instructions import ( +from opensquirrel.ir import ( CNOT, CR, CZ, SWAP, X90, Y90, + Barrier, CRk, H, I, + Init, + Measure, + MinusX90, + MinusY90, + Reset, + Rn, Rx, Ry, Rz, S, - Sdag, + SDagger, T, - Tdag, + TDagger, + Wait, X, Y, Z, - barrier, - init, - measure, - mX90, - mY90, - reset, - wait, ) from opensquirrel.writer import writer @@ -37,27 +38,28 @@ "SWAP", "X90", "Y90", + "Barrier", "CRk", "Circuit", "CircuitBuilder", "H", "I", + "Init", + "Measure", + "MinusX90", + "MinusY90", + "Reset", + "Rn", "Rx", "Ry", "Rz", "S", - "Sdag", + "SDagger", "T", - "Tdag", + "TDagger", + "Wait", "X", "Y", "Z", - "barrier", - "init", - "mX90", - "mY90", - "measure", - "reset", - "wait", "writer", ] diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py index f6a920db..f663e5d6 100644 --- a/opensquirrel/circuit.py +++ b/opensquirrel/circuit.py @@ -116,14 +116,14 @@ def map(self, mapper: Mapper) -> None: remap_ir(self, mapper.get_mapping()) - def replace(self, gate_generator: Callable[..., Gate], f: Callable[..., list[Gate]]) -> None: + def replace(self, gate: type[Gate], replacement_gates_function: Callable[..., list[Gate]]) -> None: """Manually replace occurrences of a given gate with a list of gates. - `f` is a callable that takes the arguments of the gate that is to be replaced and + `replacement_gates_function` is a callable that takes the arguments of the gate that is to be replaced and returns the decomposition as a list of gates. """ from opensquirrel.passes.decomposer import general_decomposer - general_decomposer.replace(self.ir, gate_generator, f) + general_decomposer.replace(self.ir, gate, replacement_gates_function) def export(self, fmt: ExportFormat | None = None) -> Any: if fmt == ExportFormat.QUANTIFY_SCHEDULER: diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py index d3a5361e..b05e083f 100644 --- a/opensquirrel/circuit_builder.py +++ b/opensquirrel/circuit_builder.py @@ -1,6 +1,5 @@ from __future__ import annotations -import inspect from collections.abc import Callable from copy import deepcopy from functools import partial @@ -8,19 +7,9 @@ from typing_extensions import Self -from opensquirrel import instruction_library from opensquirrel.circuit import Circuit -from opensquirrel.ir import ( - ANNOTATIONS_TO_TYPE_MAP, - IR, - Bit, - BitLike, - Instruction, - Qubit, - QubitLike, - is_bit_like_annotation, - is_qubit_like_annotation, -) +from opensquirrel.default_instructions import default_instruction_set +from opensquirrel.ir import IR, AsmDeclaration, Bit, BitLike, Instruction, Qubit, QubitLike from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager @@ -54,21 +43,7 @@ def __init__(self, qubit_register_size: int, bit_register_size: int = 0) -> None self.ir = IR() def __getattr__(self, attr: Any) -> Callable[..., Self]: - return partial(self._add_instruction, attr) - - def _add_instruction(self, attr: str, *args: Any) -> Self: - if attr in instruction_library.gate_set: - generator_f_gate = instruction_library.get_gate_f(attr) - self._check_generator_f_args(generator_f_gate, attr, args) - self.ir.add_gate(generator_f_gate(*args)) - elif attr in instruction_library.non_unitary_set: - generator_f_non_unitary = instruction_library.get_non_unitary_f(attr) - self._check_generator_f_args(generator_f_non_unitary, attr, args) - self.ir.add_non_unitary(generator_f_non_unitary(*args)) - else: - msg = f"unknown instruction '{attr}'" - raise ValueError(msg) - return self + return partial(self._add_statement, attr) def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: """Throw error if qubit index is outside the qubit register range. @@ -92,44 +67,35 @@ def _check_bit_out_of_bounds_access(self, bit: BitLike) -> None: msg = "bit index is out of bounds" raise IndexError(msg) - def _check_generator_f_args( - self, - generator_f: Callable[..., Instruction], - attr: str, - args: tuple[Any, ...], - ) -> None: - """General instruction validation function. - The function checks if each instruction has the proper arguments - and if the qubit and bits are within the register range. + def _check_out_of_bounds_access(self, instruction: Instruction) -> None: + for qubit in instruction.get_qubit_operands(): + self._check_qubit_out_of_bounds_access(qubit) + for bit in instruction.get_bit_operands(): + self._check_bit_out_of_bounds_access(bit) - Args: - generator_f: Instruction function - attr: Type of instruction - args: Arguments parsed into the function - """ - for i, par in enumerate(inspect.signature(generator_f).parameters.values()): - try: - expected_type = ( - ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation - ) - except KeyError as e: - msg = "unknown annotation type" - raise TypeError(msg) from e - - # Fix for Python 3.9 + def _add_statement(self, attr: str, *args: Any) -> Self: + if attr == "asm": try: - is_incorrect_type = not isinstance(args[i], expected_type) # type: ignore + asm_declaration = AsmDeclaration(*args) + self.ir.add_asm_declaration(asm_declaration) except TypeError: - # Expected type is probably a Union, which works differently in Python 3.9 - is_incorrect_type = not isinstance(args[i], expected_type.__args__) # type: ignore - - if is_incorrect_type: - msg = f"wrong argument type for instruction `{attr}`, got {type(args[i])} but expected {expected_type}" - raise TypeError(msg) - if is_qubit_like_annotation(expected_type): - self._check_qubit_out_of_bounds_access(args[i]) - elif is_bit_like_annotation(expected_type): - self._check_bit_out_of_bounds_access(args[i]) + msg = f"trying to build '{attr}' with the wrong number or type of arguments: '{args}'" + raise TypeError(msg) from None + return self + + if attr not in default_instruction_set: + msg = f"unknown instruction '{attr}'" + raise ValueError(msg) + try: + instruction = default_instruction_set[attr](*args) + except TypeError: + msg = f"trying to build '{attr}' with the wrong number or type of arguments: '{args}'" + raise TypeError(msg) from None + + self._check_out_of_bounds_access(instruction) + + self.ir.add_statement(instruction) + return self def to_circuit(self) -> Circuit: return Circuit(deepcopy(self.register_manager), deepcopy(self.ir)) diff --git a/opensquirrel/circuit_matrix_calculator.py b/opensquirrel/circuit_matrix_calculator.py index 9fdc2ef5..f5188247 100644 --- a/opensquirrel/circuit_matrix_calculator.py +++ b/opensquirrel/circuit_matrix_calculator.py @@ -5,7 +5,21 @@ import numpy as np from numpy.typing import NDArray -from opensquirrel.ir import Gate, IRVisitor +from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + CRk, + Gate, + IRVisitor, + MatrixGate, +) from opensquirrel.utils import get_matrix if TYPE_CHECKING: @@ -21,6 +35,39 @@ def visit_gate(self, gate: Gate) -> None: big_matrix = get_matrix(gate, qubit_register_size=self.qubit_register_size) self.matrix = np.asarray(big_matrix @ self.matrix, dtype=np.complex128) + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: + self.visit_gate(gate) + + def visit_bsr_no_params(self, gate: BsrNoParams) -> None: + self.visit_gate(gate) + + def visit_bsr_full_params(self, gate: BsrFullParams) -> None: + self.visit_gate(gate) + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: + self.visit_gate(gate) + + def visit_matrix_gate(self, gate: MatrixGate) -> None: + self.visit_gate(gate) + + def visit_swap(self, gate: SWAP) -> None: + self.visit_gate(gate) + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + self.visit_gate(gate) + + def visit_cnot(self, gate: CNOT) -> None: + self.visit_gate(gate) + + def visit_cz(self, gate: CZ) -> None: + self.visit_gate(gate) + + def visit_cr(self, gate: CR) -> None: + self.visit_gate(gate) + + def visit_crk(self, gate: CRk) -> None: + self.visit_gate(gate) + def get_circuit_matrix(circuit: Circuit) -> NDArray[np.complex128]: """Compute the (large) unitary matrix corresponding to the circuit. diff --git a/opensquirrel/default_gate_modifiers.py b/opensquirrel/default_gate_modifiers.py index a10a0098..8053c393 100644 --- a/opensquirrel/default_gate_modifiers.py +++ b/opensquirrel/default_gate_modifiers.py @@ -11,32 +11,36 @@ class GateModifier: class InverseGateModifier(GateModifier): - def __init__(self, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: - self.generator_f_gate = generator_f_gate + def __init__(self, gate_generator: Callable[..., BlochSphereRotation]) -> None: + self.gate_generator = gate_generator def __call__(self, *args: Any) -> BlochSphereRotation: - gate: BlochSphereRotation = self.generator_f_gate(*args) + gate: BlochSphereRotation = self.gate_generator(*args) modified_angle = gate.angle * -1 modified_phase = gate.phase * -1 - return BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + return BlochSphereRotation.try_match_replace_with_default( + BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + ) class PowerGateModifier(GateModifier): - def __init__(self, exponent: SupportsFloat, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: + def __init__(self, exponent: SupportsFloat, gate_generator: Callable[..., BlochSphereRotation]) -> None: self.exponent = exponent - self.generator_f_gate = generator_f_gate + self.gate_generator = gate_generator def __call__(self, *args: Any) -> BlochSphereRotation: - gate: BlochSphereRotation = self.generator_f_gate(*args) + gate: BlochSphereRotation = self.gate_generator(*args) modified_angle = gate.angle * float(self.exponent) modified_phase = gate.phase * float(self.exponent) - return BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + return BlochSphereRotation.try_match_replace_with_default( + BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) + ) class ControlGateModifier(GateModifier): - def __init__(self, generator_f_gate: Callable[..., BlochSphereRotation]) -> None: - self.generator_f_gate = generator_f_gate + def __init__(self, gate_generator: Callable[..., BlochSphereRotation]) -> None: + self.gate_generator = gate_generator def __call__(self, control: QubitLike, *args: Any) -> ControlledGate: - gate: BlochSphereRotation = self.generator_f_gate(*args) + gate: BlochSphereRotation = self.gate_generator(*args) return ControlledGate(control, gate) diff --git a/opensquirrel/default_instructions.py b/opensquirrel/default_instructions.py index 43731048..f7ca72f7 100644 --- a/opensquirrel/default_instructions.py +++ b/opensquirrel/default_instructions.py @@ -1,213 +1,87 @@ from __future__ import annotations -import math from collections.abc import Mapping -from typing import Callable, SupportsFloat, SupportsInt - -import numpy as np from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, + X90, + Y90, Barrier, - BitLike, BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, ControlledGate, + CRk, Gate, + H, + I, Init, Instruction, MatrixGate, Measure, + MinusX90, + MinusY90, NonUnitary, - QubitLike, Reset, + Rn, + Rx, + Ry, + Rz, + S, + SDagger, + T, + TDagger, Unitary, Wait, - named_gate, - non_unitary, + X, + Y, + Z, ) -###################### -# Unitary instructions -###################### - - -@named_gate -def I(qubit: QubitLike) -> BlochSphereRotation: # noqa: E743, N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=0, phase=0) - - -@named_gate -def H(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def X(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def X90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=0) - - -@named_gate -def mX90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0) - - -@named_gate -def Y(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def Y90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=0) - - -@named_gate -def mY90(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=0) - - -@named_gate -def Z(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2) - - -@named_gate -def S(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=0) - - -@named_gate -def Sdag(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=0) - - -@named_gate -def T(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=0) - - -@named_gate -def Tdag(qubit: QubitLike) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=0) - - -@named_gate -def Rx(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(1, 0, 0), angle=theta, phase=0) - - -@named_gate -def Ry(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 1, 0), angle=theta, phase=0) - - -@named_gate -def Rz(qubit: QubitLike, theta: SupportsFloat) -> BlochSphereRotation: # noqa: N802 - return BlochSphereRotation(qubit=qubit, axis=(0, 0, 1), angle=theta, phase=0) - - -@named_gate -def CNOT(control: QubitLike, target: QubitLike) -> ControlledGate: # noqa: N802 - return ControlledGate(control, X(target)) - - -@named_gate -def CZ(control: QubitLike, target: QubitLike) -> ControlledGate: # noqa: N802 - return ControlledGate(control, Z(target)) - - -@named_gate -def CR(control: QubitLike, target: QubitLike, theta: SupportsFloat) -> ControlledGate: # noqa: N802 - return ControlledGate( - control, - BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), - ) - - -@named_gate -def CRk(control: QubitLike, target: QubitLike, k: SupportsInt) -> ControlledGate: # noqa: N802 - theta = 2 * math.pi / (2 ** int(k)) - return ControlledGate( - control, BlochSphereRotation(qubit=target, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2) - ) - - -@named_gate -def SWAP(qubit0: QubitLike, qubit1: QubitLike) -> MatrixGate: # noqa: N802 - return MatrixGate( - np.array( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - ), - [qubit0, qubit1], - ) - - -########################## -# Non-unitary instructions -########################## - - -@non_unitary -def measure(qubit: QubitLike, b: BitLike) -> Measure: - return Measure(qubit=qubit, bit=b, axis=(0, 0, 1)) - - -@non_unitary -def init(qubit: QubitLike) -> Init: - return Init(qubit=qubit) - - -@non_unitary -def reset(qubit: QubitLike) -> Reset: - return Reset(qubit=qubit) - - -@non_unitary -def barrier(qubit: QubitLike) -> Barrier: - return Barrier(qubit=qubit) - - -@non_unitary -def wait(qubit: QubitLike, time: SupportsInt) -> Wait: - return Wait(qubit=qubit, time=time) - - -default_bloch_sphere_rotation_without_params_set = { +default_bsr_without_params_set: Mapping[str, type[BsrNoParams]] +default_bsr_without_params_set = { "H": H, "I": I, "S": S, - "Sdag": Sdag, + "Sdag": SDagger, "T": T, - "Tdag": Tdag, + "Tdag": TDagger, "X": X, "X90": X90, "Y": Y, "Y90": Y90, "Z": Z, - "mX90": mX90, - "mY90": mY90, + "mX90": MinusX90, + "mY90": MinusY90, } -default_bloch_sphere_rotation_set = { - **default_bloch_sphere_rotation_without_params_set, +default_bsr_full_params_set: Mapping[str, type[BsrFullParams]] +default_bsr_full_params_set = { + "Rn": Rn, +} +default_bsr_with_angle_param_set: Mapping[str, type[BsrAngleParam]] +default_bsr_with_angle_param_set = { "Rx": Rx, "Ry": Ry, "Rz": Rz, } +default_bloch_sphere_rotation_set: Mapping[str, type[BlochSphereRotation]] +default_bloch_sphere_rotation_set = { + **default_bsr_full_params_set, + **default_bsr_without_params_set, + **default_bsr_with_angle_param_set, +} +default_controlled_gate_set: Mapping[str, type[ControlledGate]] default_controlled_gate_set = { "CNOT": CNOT, "CR": CR, "CRk": CRk, "CZ": CZ, } +default_matrix_gate_set: Mapping[str, type[MatrixGate]] default_matrix_gate_set = { "SWAP": SWAP, } @@ -216,7 +90,7 @@ def wait(qubit: QubitLike, time: SupportsInt) -> Wait: "Identity": I, } -default_gate_set: Mapping[str, Callable[..., Gate]] +default_gate_set: Mapping[str, type[Gate]] default_gate_set = { **default_bloch_sphere_rotation_set, **default_controlled_gate_set, @@ -224,20 +98,24 @@ def wait(qubit: QubitLike, time: SupportsInt) -> Wait: **default_gate_alias_set, } -default_unitary_set: Mapping[str, Callable[..., Unitary]] +default_unitary_set: Mapping[str, type[Unitary]] default_unitary_set = {**default_gate_set} -default_non_unitary_set: Mapping[str, Callable[..., NonUnitary]] +default_non_unitary_set: Mapping[str, type[NonUnitary]] default_non_unitary_set = { - "barrier": barrier, - "init": init, - "measure": measure, - "reset": reset, - "wait": wait, + "barrier": Barrier, + "init": Init, + "measure": Measure, + "reset": Reset, + "wait": Wait, } -default_instructions: Mapping[str, Callable[..., Instruction]] -default_instructions = { +default_instruction_set: Mapping[str, type[Instruction]] +default_instruction_set = { **default_unitary_set, **default_non_unitary_set, } + + +def is_anonymous_gate(name: str) -> bool: + return name not in default_gate_set diff --git a/opensquirrel/exceptions.py b/opensquirrel/exceptions.py index 9c876125..c8affdc9 100644 --- a/opensquirrel/exceptions.py +++ b/opensquirrel/exceptions.py @@ -17,3 +17,15 @@ def __init__(self, gate: Any, *args: Any) -> None: class ExporterError(Exception): """Should be raised when a circuit cannot be exported to the desired output format.""" + + +class NoRoutingPathError(Exception): + """Should be raised when no routing path is available between qubits.""" + + def __init__(self, message: str, *args: Any) -> None: + """Init of the ``NoRoutingPathError``. + + Args: + message: Error message. + """ + super().__init__(message, *args) diff --git a/opensquirrel/instruction_library.py b/opensquirrel/instruction_library.py deleted file mode 100644 index 21bb3c03..00000000 --- a/opensquirrel/instruction_library.py +++ /dev/null @@ -1,27 +0,0 @@ -from __future__ import annotations - -from collections.abc import Callable -from typing import TYPE_CHECKING - -from opensquirrel.default_instructions import default_gate_set, default_non_unitary_set - -if TYPE_CHECKING: - from opensquirrel.ir import Gate, NonUnitary - - -gate_set = default_gate_set -non_unitary_set = default_non_unitary_set - - -def get_gate_f(gate_name: str) -> Callable[..., Gate]: - if gate_name not in gate_set: - msg = f"unknown gate '{gate_name}'" - raise ValueError(msg) - return gate_set[gate_name] - - -def get_non_unitary_f(non_unitary_name: str) -> Callable[..., NonUnitary]: - if non_unitary_name not in non_unitary_set: - msg = f"unknown non-unitary instruction '{non_unitary_name}'" - raise ValueError(msg) - return non_unitary_set[non_unitary_name] diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py index 85f45b82..4c7802db 100644 --- a/opensquirrel/ir.py +++ b/opensquirrel/ir.py @@ -1,11 +1,10 @@ from __future__ import annotations -import inspect +import math from abc import ABC, abstractmethod -from collections.abc import Callable, Iterable, Sequence +from collections.abc import Iterable, Sequence from dataclasses import dataclass -from functools import wraps -from typing import Any, SupportsFloat, SupportsInt, Union, cast, overload +from typing import Any, Protocol, SupportsFloat, SupportsInt, Union, cast, overload, runtime_checkable import numpy as np from numpy.typing import ArrayLike, DTypeLike, NDArray @@ -15,13 +14,23 @@ REPR_DECIMALS = 5 -def repr_round( - value: float | Axis | NDArray[np.complex64 | np.complex128], decimals: int = REPR_DECIMALS -) -> float | NDArray[np.complex64 | np.complex128]: - return np.round(value, decimals) +def repr_round(value: float | Axis | NDArray[np.complex128], decimals: int = REPR_DECIMALS) -> str: + """ + Given a numerical value (of type `float`, `Axis`, or `NDArray[np.complex128]`): + - rounds it to `REPR_DECIMALS`, + - converts it to string, and + - removes the newlines. + + Returns: + A single-line string representation of a numerical value. + """ + return f"{np.round(value, decimals)}".replace("\n", "") class IRVisitor: + def visit_str(self, s: String) -> Any: + pass + def visit_int(self, i: Int) -> Any: pass @@ -34,37 +43,73 @@ def visit_bit(self, bit: Bit) -> Any: def visit_qubit(self, qubit: Qubit) -> Any: pass - def visit_gate(self, gate: Gate) -> Any: + def visit_axis(self, axis: Axis) -> Any: pass - def visit_non_unitary(self, gate: NonUnitary) -> Any: + def visit_statement(self, statement: Statement) -> Any: pass - def visit_axis(self, axis: Axis) -> Any: + def visit_asm_declaration(self, asm_declaration: AsmDeclaration) -> Any: pass - def visit_measure(self, measure: Measure) -> Any: + def visit_instruction(self, instruction: Instruction) -> Any: pass - def visit_init(self, init: Init) -> Any: + def visit_unitary(self, unitary: Unitary) -> Any: pass - def visit_reset(self, reset: Reset) -> Any: + def visit_gate(self, gate: Gate) -> Any: pass - def visit_barrier(self, barrier: Barrier) -> Any: + def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: pass - def visit_wait(self, wait: Wait) -> Any: + def visit_bsr_no_params(self, gate: BsrNoParams) -> Any: pass - def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: + def visit_bsr_full_params(self, gate: BsrFullParams) -> Any: + pass + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> Any: pass def visit_matrix_gate(self, matrix_gate: MatrixGate) -> Any: pass - def visit_controlled_gate(self, controlled_gate: ControlledGate) -> Any: + def visit_swap(self, gate: SWAP) -> Any: + pass + + def visit_controlled_gate(self, gate: ControlledGate) -> Any: + pass + + def visit_cnot(self, gate: CNOT) -> Any: + pass + + def visit_cz(self, gate: CZ) -> Any: + pass + + def visit_cr(self, gate: CR) -> Any: + pass + + def visit_crk(self, gate: CRk) -> Any: + pass + + def visit_non_unitary(self, gate: NonUnitary) -> Any: + pass + + def visit_measure(self, measure: Measure) -> Any: + pass + + def visit_init(self, init: Init) -> Any: + pass + + def visit_reset(self, reset: Reset) -> Any: + pass + + def visit_barrier(self, barrier: Barrier) -> Any: + pass + + def visit_wait(self, wait: Wait) -> Any: pass @@ -78,6 +123,46 @@ class Expression(IRNode, ABC): pass +@runtime_checkable +class SupportsStr(Protocol): + def __str__(self) -> str: ... + + +@dataclass(init=False) +class String(Expression): + """Strings used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``String`` object. + """ + + value: str + + def __init__(self, value: SupportsStr) -> None: + """Init of the ``String`` object. + + Args: + value: value of the ``String`` object. + """ + if isinstance(value, SupportsStr): + self.value = str(value) + return + + msg = "value must be a str" + raise TypeError(msg) + + def __str__(self) -> str: + """Cast the ``String`` object to a built-in Python ``str``. + + Returns: + Built-in Python ``str`` representation of the ``String``. + """ + return self.value + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_str(self) + + @dataclass(init=False) class Float(Expression): """Floats used for intermediate representation of ``Statement`` arguments. @@ -313,337 +398,398 @@ class Statement(IRNode, ABC): pass -class Instruction(Statement, ABC): +class AsmDeclaration(Statement): + """``AsmDeclaration`` is used to define an assembly declaration statement in the IR. + + Args: + backend_name: Name of the backend that is to process the provided backend code. + backend_code: (Assembly) code to be processed by the specified backend. + """ + def __init__( self, - generator: Callable[..., Instruction] | None = None, - arguments: tuple[Expression, ...] | None = None, - *args: Any, - **kwargs: Any, + backend_name: SupportsStr, + backend_code: SupportsStr, ) -> None: - self.generator = generator - self.arguments = arguments + self.backend_name = String(backend_name) + self.backend_code = String(backend_code) + Statement.__init__(self) - @abstractmethod - def get_qubit_operands(self) -> list[Qubit]: - pass + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_statement(self) + return visitor.visit_asm_declaration(self) -class Unitary(Instruction, ABC): - def __init__( - self, - generator: Callable[..., Unitary] | None = None, - arguments: tuple[Expression, ...] | None = None, - *args: Any, - **kwargs: Any, - ) -> None: - Instruction.__init__(self, generator, arguments) +class Instruction(Statement, ABC): + def __init__(self, name: str) -> None: + self.name = name @property - def name(self) -> str: - return self.generator.__name__ if self.generator else "Unknown unitary instruction: " + self.__repr__() + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass @abstractmethod def get_qubit_operands(self) -> list[Qubit]: pass + @abstractmethod + def get_bit_operands(self) -> list[Bit]: + pass + -class NonUnitary(Instruction, ABC): - def __init__( - self, - generator: Callable[..., NonUnitary] | None = None, - arguments: tuple[Expression, ...] | None = None, - *args: Any, - **kwargs: Any, - ) -> None: - Instruction.__init__(self, generator, arguments) +class Unitary(Instruction, ABC): + def __init__(self, name: str) -> None: + Instruction.__init__(self, name) + + +class Gate(Unitary, ABC): + def __init__(self, name: str) -> None: + Unitary.__init__(self, name) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Gate): + return False + return compare_gates(self, other) @property - def name(self) -> str: - return self.generator.__name__ if self.generator else "Unknown non-unitary instruction: " + self.__repr__() + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + + @staticmethod + def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: + return len(qubits) != len(set(qubits)) @abstractmethod def get_qubit_operands(self) -> list[Qubit]: pass + @abstractmethod + def get_bit_operands(self) -> list[Bit]: + pass -class Measure(NonUnitary): + @abstractmethod + def is_identity(self) -> bool: + pass + + +class BlochSphereRotation(Gate): def __init__( self, qubit: QubitLike, - bit: BitLike, - axis: AxisLike = (0, 0, 1), - generator: Callable[..., Measure] | None = None, - arguments: tuple[Expression, ...] | None = None, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat = 0, + name: str = "BlochSphereRotation", ) -> None: - NonUnitary.__init__(self, generator, arguments) + Gate.__init__(self, name) self.qubit = Qubit(qubit) - self.bit = Bit(bit) self.axis = Axis(axis) + self.angle = normalize_angle(angle) + self.phase = normalize_angle(phase) def __repr__(self) -> str: - return f"Measure(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" - - def __eq__(self, other: object) -> bool: return ( - isinstance(other, Measure) and self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + f"{self.name}(qubit={self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}, " + f"phase={repr_round(self.phase)})" ) - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_measure(self) + def __eq__(self, other: object) -> bool: + if not isinstance(other, BlochSphereRotation): + return False - def get_bit_operands(self) -> list[Bit]: - return [self.bit] + if self.qubit != other.qubit: + return False + + if abs(self.phase - other.phase) > ATOL: + return False + + if np.allclose(self.axis, other.axis, atol=ATOL): + return abs(self.angle - other.angle) < ATOL + if np.allclose(self.axis, -other.axis.value, atol=ATOL): + return abs(self.angle + other.angle) < ATOL + return False + + @property + def arguments(self) -> tuple[Expression, ...]: + return () + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bloch_sphere_rotation(self) def get_qubit_operands(self) -> list[Qubit]: return [self.qubit] + def get_bit_operands(self) -> list[Bit]: + return [] -class Init(NonUnitary): + def is_identity(self) -> bool: + # Angle and phase are already normalized. + return abs(self.angle) < ATOL and abs(self.phase) < ATOL + + @staticmethod + def try_match_replace_with_default(bsr: BlochSphereRotation) -> BlochSphereRotation: + """Try replacing a given BlochSphereRotation with a default BlochSphereRotation. + It does that by matching the input BlochSphereRotation to a default BlochSphereRotation. + + Returns: + A default BlockSphereRotation if this BlochSphereRotation is close to it, + or the input BlochSphereRotation otherwise. + """ + from opensquirrel.default_instructions import ( + default_bsr_with_angle_param_set, + default_bsr_without_params_set, + ) + + bsr_set_without_rn = {**default_bsr_without_params_set, **default_bsr_with_angle_param_set} + for gate_name in bsr_set_without_rn: + arguments: tuple[Any, ...] = (bsr.qubit,) + if gate_name in default_bsr_with_angle_param_set: + arguments += (Float(bsr.angle),) + gate = bsr_set_without_rn[gate_name](*arguments) + if ( + np.allclose(gate.axis, bsr.axis, atol=ATOL) + and np.allclose(gate.angle, bsr.angle, atol=ATOL) + and np.allclose(gate.phase, bsr.phase, atol=ATOL) + ): + return gate + nx, ny, nz = (Float(component) for component in bsr.axis) + return Rn(bsr.qubit, nx, ny, nz, Float(bsr.angle), Float(bsr.phase)) + + +class BsrNoParams(BlochSphereRotation): def __init__( self, qubit: QubitLike, - generator: Callable[..., Init] | None = None, - arguments: tuple[Expression, ...] | None = None, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat = 0, + name: str = "BsrNoParams", ) -> None: - NonUnitary.__init__(self, generator, arguments) - self.qubit = Qubit(qubit) - - def __repr__(self) -> str: - return f"Init(qubit={self.qubit})" + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) - def __eq__(self, other: object) -> bool: - return isinstance(other, Init) and self.qubit == other.qubit + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_init(self) + return visitor.visit_bsr_no_params(self) - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] +class I(BsrNoParams): # noqa: E742 + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=0, phase=0, name="I") -class Reset(NonUnitary): - def __init__( - self, - qubit: QubitLike, - generator: Callable[..., Reset] | None = None, - arguments: tuple[Expression, ...] | None = None, - ) -> None: - NonUnitary.__init__(self, generator, arguments) - self.qubit = Qubit(qubit) - def __repr__(self) -> str: - return f"Reset(qubit={self.qubit})" +class H(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2, name="H") - def __eq__(self, other: object) -> bool: - return isinstance(other, Reset) and self.qubit == other.qubit - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_reset(self) +class X(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="X") - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] +class X90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=0, name="X90") -class Barrier(NonUnitary): - def __init__( - self, - qubit: QubitLike, - generator: Callable[..., Barrier] | None = None, - arguments: tuple[Expression, ...] | None = None, - ) -> None: - NonUnitary.__init__(self, generator, arguments) - self.qubit = Qubit(qubit) - def __repr__(self) -> str: - return f"Barrier(qubit={self.qubit})" +class MinusX90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0, name="mX90") - def __eq__(self, other: object) -> bool: - return isinstance(other, Barrier) and self.qubit == other.qubit - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_barrier(self) +class Y(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2, name="Y") - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] +class Y90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=0, name="Y90") -class Wait(NonUnitary): - def __init__( - self, - qubit: QubitLike, - time: SupportsInt, - generator: Callable[..., Wait] | None = None, - arguments: tuple[Expression, ...] | None = None, - ) -> None: - NonUnitary.__init__(self, generator, arguments) - self.qubit = Qubit(qubit) - self.time = Int(time) - def __repr__(self) -> str: - return f"Wait(qubit={self.qubit}, time={self.time})" +class MinusY90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=0, name="mY90") - def __eq__(self, other: object) -> bool: - return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_wait(self) +class Z(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2, name="Z") - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] +class S(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=0, name="S") -class Gate(Unitary, ABC): + +class SDagger(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=0, name="Sdag") + + +class T(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=0, name="T") + + +class TDagger(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=0, name="Tdag") + + +class BsrFullParams(BlochSphereRotation): def __init__( self, - generator: Callable[..., Gate] | None = None, - arguments: tuple[Expression, ...] | None = None, - *args: Any, - **kwargs: Any, + qubit: QubitLike, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat, + name: str = "BsrFullParams", ) -> None: - Unitary.__init__(self, generator, arguments) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Gate): - return False - return compare_gates(self, other) - - @property - def name(self) -> str: - if self.generator: - return self.generator.__name__ - return "Anonymous gate: " + self.__repr__() + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) + self.nx, self.ny, self.nz = (Float(component) for component in Axis(axis)) + self.theta = Float(angle) + self.phi = Float(phase) @property - def is_named_gate(self) -> bool: - return not (self.generator is None or self.generator.__name__ is None) + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.nx, self.ny, self.nz, self.theta, self.phi - @property - def is_anonymous(self) -> bool: - return not self.is_named_gate + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bsr_full_params(self) - @staticmethod - def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: - return len(qubits) != len(set(qubits)) - @abstractmethod - def get_qubit_operands(self) -> list[Qubit]: - pass - - @abstractmethod - def is_identity(self) -> bool: - pass +class Rn(BsrFullParams): + def __init__( + self, + qubit: QubitLike, + nx: SupportsFloat, + ny: SupportsFloat, + nz: SupportsFloat, + theta: SupportsFloat, + phi: SupportsFloat, + ) -> None: + axis: AxisLike = Axis(np.asarray([nx, ny, nz], dtype=np.float64)) + BsrFullParams.__init__(self, qubit=qubit, axis=axis, angle=theta, phase=phi, name="Rn") -class BlochSphereRotation(Gate): +class BsrAngleParam(BlochSphereRotation): def __init__( self, qubit: QubitLike, axis: AxisLike, angle: SupportsFloat, phase: SupportsFloat = 0, - generator: Callable[..., BlochSphereRotation] | None = None, - arguments: tuple[Expression, ...] | None = None, + name: str = "BsrNoParams", ) -> None: - Gate.__init__(self, generator, arguments) - self.qubit = Qubit(qubit) - self.axis = Axis(axis) - self.angle = normalize_angle(angle) - self.phase = normalize_angle(phase) + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) + self.theta = Float(angle) - def __repr__(self) -> str: - return ( - f"BlochSphereRotation({self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}," - f" phase={repr_round(self.phase)})" - ) + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.theta - def __eq__(self, other: object) -> bool: - if not isinstance(other, BlochSphereRotation): - return False + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bsr_angle_param(self) - if self.qubit != other.qubit: - return False - if abs(self.phase - other.phase) > ATOL: - return False +class Rx(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=theta, phase=0, name="Rx") - if np.allclose(self.axis, other.axis, atol=ATOL): - return abs(self.angle - other.angle) < ATOL - if np.allclose(self.axis, -other.axis.value, atol=ATOL): - return abs(self.angle + other.angle) < ATOL - return False - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_gate(self) - return visitor.visit_bloch_sphere_rotation(self) +class Ry(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=theta, phase=0, name="Ry") - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] - def is_identity(self) -> bool: - # Angle and phase are already normalized. - return abs(self.angle) < ATOL and abs(self.phase) < ATOL +class Rz(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=theta, phase=0, name="Rz") class MatrixGate(Gate): def __init__( - self, - matrix: ArrayLike | list[list[int | DTypeLike]], - operands: Iterable[QubitLike], - generator: Callable[..., MatrixGate] | None = None, - arguments: tuple[Expression, ...] | None = None, + self, matrix: ArrayLike | list[list[int | DTypeLike]], operands: Iterable[QubitLike], name: str = "MatrixGate" ) -> None: - Gate.__init__(self, generator, arguments) - + Gate.__init__(self, name) qubit_operands = [Qubit(operand) for operand in operands] if len(qubit_operands) < 2: msg = "for 1q gates, please use BlochSphereRotation" raise ValueError(msg) if self._check_repeated_qubit_operands(qubit_operands): - msg = "control and target qubit cannot be the same" + msg = "operands cannot be the same" raise ValueError(msg) matrix = np.asarray(matrix, dtype=np.complex128) - if matrix.shape != (1 << len(qubit_operands), 1 << len(qubit_operands)): + expected_number_of_rows = 1 << len(qubit_operands) + expected_number_of_cols = expected_number_of_rows + if matrix.shape != (expected_number_of_rows, expected_number_of_cols): msg = ( f"incorrect matrix shape. " - f"Expected {(1 << len(qubit_operands), 1 << len(qubit_operands))} but received {matrix.shape}" + f"Expected {(expected_number_of_rows, expected_number_of_cols)} but received {matrix.shape}" ) raise ValueError(msg) self.matrix = matrix self.operands = qubit_operands + @property + def arguments(self) -> tuple[Expression, ...]: + return () + def __repr__(self) -> str: - return f"MatrixGate(qubits={self.operands}, matrix={repr_round(self.matrix)})" + return f"{self.name}(qubits={self.operands}, matrix={repr_round(self.matrix)})" def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_gate(self) return visitor.visit_matrix_gate(self) def get_qubit_operands(self) -> list[Qubit]: return self.operands + def get_bit_operands(self) -> list[Bit]: + return [] + def is_identity(self) -> bool: return np.allclose(self.matrix, np.eye(2 ** len(self.operands)), atol=ATOL) +class SWAP(MatrixGate): + def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike) -> None: + MatrixGate.__init__( + self, + matrix=np.array( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + ), + operands=[qubit_0, qubit_1], + name="SWAP", + ) + self.qubit_0 = Qubit(qubit_0) + self.qubit_1 = Qubit(qubit_1) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit_0, self.qubit_1 + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_swap(self) + + class ControlledGate(Gate): - def __init__( - self, - control_qubit: QubitLike, - target_gate: Gate, - generator: Callable[..., ControlledGate] | None = None, - arguments: tuple[Expression, ...] | None = None, - ) -> None: - Gate.__init__(self, generator, arguments) + def __init__(self, control_qubit: QubitLike, target_gate: Gate, name: str = "ControlledGate") -> None: + Gate.__init__(self, name) self.control_qubit = Qubit(control_qubit) self.target_gate = target_gate @@ -652,89 +798,217 @@ def __init__( raise ValueError(msg) def __repr__(self) -> str: - return f"ControlledGate(control_qubit={self.control_qubit}, {self.target_gate})" + return f"{self.name}(control_qubit={self.control_qubit}, target_gate={self.target_gate})" def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_gate(self) return visitor.visit_controlled_gate(self) + @property + def arguments(self) -> tuple[Expression, ...]: + return () + def get_qubit_operands(self) -> list[Qubit]: return [self.control_qubit, *self.target_gate.get_qubit_operands()] + def get_bit_operands(self) -> list[Bit]: + return [] + def is_identity(self) -> bool: return self.target_gate.is_identity() -def instruction_decorator(instruction_generator: Callable[..., Instruction]) -> Callable[..., Instruction]: - @wraps(instruction_generator) - def wrapper(*args: Any, **kwargs: Any) -> Instruction: - result = instruction_generator(*args, **kwargs) - result.generator = wrapper +class CNOT(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=X(target_qubit), name="CNOT") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) - all_args: list[Expression] = [] - for par in inspect.signature(instruction_generator).parameters.values(): - next_arg = kwargs[par.name] if par.name in kwargs else args[len(all_args)] - next_annotation = ( - ANNOTATIONS_TO_TYPE_MAP[par.annotation] if isinstance(par.annotation, str) else par.annotation - ) + @property + def arguments(self) -> tuple[Expression, ...]: + return self.control_qubit, self.target_qubit - # Convert to correct expression for IR - if is_int_annotation(next_annotation): - next_arg = Int(next_arg) - elif is_float_annotation(next_annotation): - next_arg = Float(next_arg) - if is_bit_like_annotation(next_annotation): - next_arg = Bit(next_arg) - if is_qubit_like_annotation(next_annotation): - next_arg = Qubit(next_arg) + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cnot(self) - # Append parsed argument - all_args.append(next_arg) - result.arguments = tuple(all_args) - return result +class CZ(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=Z(target_qubit), name="CZ") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) - return wrapper + @property + def arguments(self) -> tuple[Expression, ...]: + return self.control_qubit, self.target_qubit + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cz(self) -@overload -def named_gate(gate_generator: Callable[..., BlochSphereRotation]) -> Callable[..., BlochSphereRotation]: ... +class CR(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, theta: SupportsFloat) -> None: + ControlledGate.__init__( + self, + control_qubit=control_qubit, + target_gate=BlochSphereRotation(qubit=target_qubit, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), + name="CR", + ) + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + self.theta = Float(theta) -@overload -def named_gate(gate_generator: Callable[..., MatrixGate]) -> Callable[..., MatrixGate]: ... + @property + def arguments(self) -> tuple[Expression, ...]: + return self.control_qubit, self.target_qubit, self.theta + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cr(self) -@overload -def named_gate(gate_generator: Callable[..., ControlledGate]) -> Callable[..., ControlledGate]: ... +class CRk(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, k: SupportsInt) -> None: + theta = 2 * math.pi / (2 ** int(k)) + ControlledGate.__init__( + self, + control_qubit=control_qubit, + target_gate=BlochSphereRotation(qubit=target_qubit, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), + name="CRk", + ) + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + self.k = Int(k) -def named_gate(gate_generator: Callable[..., Gate]) -> Callable[..., Gate]: - return cast("Callable[..., Gate]", instruction_decorator(gate_generator)) + @property + def arguments(self) -> tuple[Expression, ...]: + return self.control_qubit, self.target_qubit, self.k + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_crk(self) -@overload -def non_unitary(non_unitary_generator: Callable[..., Measure]) -> Callable[..., Measure]: ... +class NonUnitary(Instruction, ABC): + def __init__(self, qubit: QubitLike, name: str) -> None: + Instruction.__init__(self, name) + self.qubit = Qubit(qubit) -@overload -def non_unitary(non_unitary_generator: Callable[..., Init]) -> Callable[..., Init]: ... + @property + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + def get_bit_operands(self) -> list[Bit]: + return [] + + +class Measure(NonUnitary): + def __init__(self, qubit: QubitLike, bit: BitLike, axis: AxisLike = (0, 0, 1)) -> None: + NonUnitary.__init__(self, qubit=qubit, name="measure") + self.qubit = Qubit(qubit) + self.bit = Bit(bit) + self.axis = Axis(axis) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, Measure) and self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + ) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.bit + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_measure(self) + + def get_bit_operands(self) -> list[Bit]: + return [self.bit] + + +class Init(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="init") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Init) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_init(self) + + +class Reset(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="reset") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Reset) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_reset(self) -@overload -def non_unitary(non_unitary_generator: Callable[..., Reset]) -> Callable[..., Reset]: ... +class Barrier(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="barrier") + self.qubit = Qubit(qubit) -@overload -def non_unitary(non_unitary_generator: Callable[..., Barrier]) -> Callable[..., Barrier]: ... + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + def __eq__(self, other: object) -> bool: + return isinstance(other, Barrier) and self.qubit == other.qubit -@overload -def non_unitary(non_unitary_generator: Callable[..., Wait]) -> Callable[..., Wait]: ... + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_barrier(self) -def non_unitary(non_unitary_generator: Callable[..., NonUnitary]) -> Callable[..., NonUnitary]: - return cast("Callable[..., NonUnitary]", instruction_decorator(non_unitary_generator)) + +class Wait(NonUnitary): + def __init__(self, qubit: QubitLike, time: SupportsInt) -> None: + NonUnitary.__init__(self, qubit=qubit, name="wait") + self.qubit = Qubit(qubit) + self.time = Int(time) + + def __repr__(self) -> str: + return f"{self.name}(qubit={self.qubit}, time={self.time})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.time + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_wait(self) def compare_gates(g1: Gate, g2: Gate) -> bool: @@ -753,6 +1027,9 @@ class IR: def __init__(self) -> None: self.statements: list[Statement] = [] + def add_asm_declaration(self, asm_declaration: AsmDeclaration) -> None: + self.statements.append(asm_declaration) + def add_gate(self, gate: Gate) -> None: self.statements.append(gate) @@ -780,72 +1057,3 @@ def accept(self, visitor: IRVisitor) -> None: AxisLike = Union[ArrayLike, Axis] BitLike = Union[SupportsInt, Bit] QubitLike = Union[SupportsInt, Qubit] - - -def is_bit_like_annotation(annotation: Any) -> bool: - """Check if the provided annotation should be cast to BitLike. - - Args: - annotation: annotation to check. - - Returns: - Boolean value stating whether the annotation is something that should be cast to Bit. - """ - return annotation in (BitLike, Bit) - - -def is_qubit_like_annotation(annotation: Any) -> bool: - """Check if the provided annotation should be cast to QubitLike. - - Args: - annotation: annotation to check. - - Returns: - Boolean value stating whether the annotation is something that should be cast to Qubit. - """ - return annotation in (QubitLike, Qubit) - - -def is_int_annotation(annotation: Any) -> bool: - """Check if the provided annotation should be cast to Int. - - Args: - annotation: annotation to check. - - Returns: - Boolean value stating whether the annotation is something that should be cast to int. - """ - return annotation in (SupportsInt, Int) - - -def is_float_annotation(annotation: Any) -> bool: - """Check if the provided annotation should be cast to Float. - - Args: - annotation: annotation to check. - - Returns: - Boolean value stating whether the annotation is something that should be cast to float. - """ - return annotation in (SupportsFloat, Float) - - -ANNOTATIONS_TO_TYPE_MAP = { - "AxisLike": AxisLike, - "Barrier": Barrier, - "Bit": Bit, - "BitLike": BitLike, - "BlochSphereRotation": BlochSphereRotation, - "ControlledGate": ControlledGate, - "Float": Float, - "Init": Init, - "Int": Int, - "MatrixGate": MatrixGate, - "Measure": Measure, - "Qubit": Qubit, - "QubitLike": QubitLike, - "Reset": Reset, - "SupportsFloat": SupportsFloat, - "SupportsInt": SupportsInt, - "Wait": Wait, -} diff --git a/opensquirrel/parser/libqasm/parser.py b/opensquirrel/parser/libqasm/parser.py index 4a905653..9cc06acf 100644 --- a/opensquirrel/parser/libqasm/parser.py +++ b/opensquirrel/parser/libqasm/parser.py @@ -1,20 +1,30 @@ from __future__ import annotations -from collections.abc import Callable -from typing import Any, cast +from typing import Any, Callable, cast import cqasm.v3x as cqasm -from opensquirrel import instruction_library from opensquirrel.circuit import Circuit from opensquirrel.default_gate_modifiers import ControlGateModifier, InverseGateModifier, PowerGateModifier -from opensquirrel.ir import IR, Bit, BlochSphereRotation, Float, Gate, Int, NonUnitary, Qubit, Statement +from opensquirrel.default_instructions import default_gate_set, default_non_unitary_set +from opensquirrel.ir import ( + IR, + AsmDeclaration, + Bit, + BlochSphereRotation, + Float, + Gate, + Int, + NonUnitary, + Qubit, + Statement, +) from opensquirrel.register_manager import RegisterManager class Parser: def __init__(self) -> None: - self.ir = None + self.ir = IR() @staticmethod def _ast_literal_to_ir_literal( @@ -62,88 +72,78 @@ def _is_non_unitary_instruction(ast_node: Any) -> bool: return isinstance(ast_node, cqasm.semantic.NonGateInstruction) @staticmethod - def _get_qubits( - ast_qubit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef, - register_manager: RegisterManager, - ) -> list[Qubit]: + def _is_asm_declaration(ast_node: Any) -> bool: + return isinstance(ast_node, cqasm.semantic.AsmDeclaration) + + def _get_qubits(self, ast_qubit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef) -> list[Qubit]: ret = [] variable_name = ast_qubit_expression.variable.name if isinstance(ast_qubit_expression, cqasm.values.VariableRef): - qubit_range = register_manager.get_qubit_range(variable_name) + qubit_range = self.register_manager.get_qubit_range(variable_name) ret = [Qubit(index) for index in range(qubit_range.first, qubit_range.first + qubit_range.size)] if isinstance(ast_qubit_expression, cqasm.values.IndexRef): int_indices = [int(i.value) for i in ast_qubit_expression.indices] - indices = [register_manager.get_qubit_index(variable_name, i) for i in int_indices] + indices = [self.register_manager.get_qubit_index(variable_name, i) for i in int_indices] ret = [Qubit(index) for index in indices] return ret - @staticmethod - def _get_bits( - ast_bit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef, - register_manager: RegisterManager, - ) -> list[Bit]: + def _get_bits(self, ast_bit_expression: cqasm.values.VariableRef | cqasm.values.IndexRef) -> list[Bit]: ret = [] variable_name = ast_bit_expression.variable.name if isinstance(ast_bit_expression, cqasm.values.VariableRef): - bit_range = register_manager.get_bit_range(variable_name) + bit_range = self.register_manager.get_bit_range(variable_name) ret = [Bit(index) for index in range(bit_range.first, bit_range.first + bit_range.size)] if isinstance(ast_bit_expression, cqasm.values.IndexRef): int_indices = [int(i.value) for i in ast_bit_expression.indices] - indices = [register_manager.get_bit_index(variable_name, i) for i in int_indices] + indices = [self.register_manager.get_bit_index(variable_name, i) for i in int_indices] ret = [Bit(index) for index in indices] return ret - @classmethod - def _get_instruction_operands( - cls, - instruction: cqasm.semantic.Instruction, - register_manager: RegisterManager, - ) -> list[list[Any]]: + def _get_instruction_operands(self, instruction: cqasm.semantic.Instruction) -> list[list[Any]]: """Get the list of lists of operands of an instruction. Notice that an instruction just has a list of operands. The outer list is needed to support SGMQ. For example, for CNOT q[0, 1] q[2, 3], this function returns [[Qubit(0), Qubit(1)], [Qubit(2), Qubit(3)]]. """ ret: list[list[Any]] = [] for operand in instruction.operands: - if cls._is_qubit_type(operand): - ret.append(cls._get_qubits(operand, register_manager)) + if self._is_qubit_type(operand): + ret.append(self._get_qubits(operand)) else: msg = "argument is not of qubit type" raise TypeError(msg) return ret @classmethod - def _get_named_gate_param(cls, gate: cqasm.semantic.Gate) -> Any: - """Get the parameter of a named gate. + def _get_named_gate_parameters(cls, gate: cqasm.semantic.Gate) -> Any: + """Get the parameters of a named gate. Notice the input gate can be a composition of gate modifiers acting on a named gate. """ if gate.name in ["inv", "pow", "ctrl"]: - return cls._get_named_gate_param(gate.gate) - return cls._ast_literal_to_ir_literal(gate.parameter) + return cls._get_named_gate_parameters(gate.gate) + return [cls._ast_literal_to_ir_literal(parameter) for parameter in gate.parameters] - @classmethod - def _get_expanded_instruction_args( - cls, - instruction: cqasm.semantic.Instruction, - register_manager: RegisterManager, - ) -> zip[tuple[Any, ...]]: + def _get_expanded_instruction_args(self, instruction: cqasm.semantic.Instruction) -> list[tuple[Any, ...]]: """Construct a list with a list of qubits and a list of parameters, then return a zip of both lists. - For example, for CRk(2) q[0, 1] q[2, 3], this function first constructs the list with a list of qubits - [[Qubit(0), Qubit(1)], [Qubit(2), Qubit(3)]], then appends the list of parameters [Int(2), Int(2)], - and finally zips the whole list and returns [(Qubit(0), Qubit(1), Int(2)), (Qubit(2), Qubit(3), Int(2))] + For example, for CRk(2) q[0, 1] q[2, 3], this function: + 1. constructs the list with a list of qubits [[Qubit(0), Qubit(1)], [Qubit(2), Qubit(3)]], + 2. appends the list of parameters [[Int(2)], [Int(2)]], + 3. zips the whole list and returns [(Qubit(0), Qubit(2), Int(2)), (Qubit(1), Qubit(3), Int(2))] """ - ret = cls._get_instruction_operands(instruction, register_manager) + extended_operands = self._get_instruction_operands(instruction) if isinstance(instruction, cqasm.semantic.GateInstruction): - gate_parameter = cls._get_named_gate_param(instruction.gate) + gate_parameters = self._get_named_gate_parameters(instruction.gate) else: - gate_parameter = cls._ast_literal_to_ir_literal(instruction.parameter) - if gate_parameter: - number_of_operands = len(ret[0]) - ret.append([gate_parameter] * number_of_operands) - return zip(*ret) - - @classmethod - def _get_expanded_measure_args(cls, ast_args: Any, register_manager: RegisterManager) -> zip[tuple[Any, ...]]: + gate_parameters = [self._ast_literal_to_ir_literal(parameter) for parameter in instruction.parameters] + if gate_parameters: + number_of_operands = len(extended_operands[0]) + extended_gate_parameters = [gate_parameters] * number_of_operands + return [ + (*operands, *parameters) + for operands, parameters in zip(zip(*extended_operands), extended_gate_parameters) + ] + return list(zip(*extended_operands)) + + def _get_expanded_measure_args(self, ast_args: Any) -> list[tuple[Any, ...]]: """Construct a list with a list of bits and a list of qubits, then return a zip of both lists. For example: [(Qubit(0), Bit(0)), (Qubit(1), Bit(1))] """ @@ -151,14 +151,14 @@ def _get_expanded_measure_args(cls, ast_args: Any, register_manager: RegisterMan # This is because the AST measure node has a bit first operand and a qubit second operand expanded_args: list[list[Any]] = [] for ast_arg in reversed(ast_args): - if cls._is_qubit_type(ast_arg): - expanded_args.append(cls._get_qubits(ast_arg, register_manager)) - elif cls._is_bit_type(ast_arg): - expanded_args.append(cls._get_bits(ast_arg, register_manager)) + if self._is_qubit_type(ast_arg): + expanded_args.append(self._get_qubits(ast_arg)) + elif self._is_bit_type(ast_arg): + expanded_args.append(self._get_bits(ast_arg)) else: msg = "argument is neither of qubit nor bit type" raise TypeError(msg) - return zip(*expanded_args) + return list(zip(*expanded_args)) @staticmethod def _create_analyzer() -> cqasm.Analyzer: @@ -170,24 +170,27 @@ def _check_analysis_result(result: Any) -> None: if isinstance(result, list): raise OSError("parsing error: " + ", ".join(result)) - @staticmethod - def _get_gate_f(instruction: cqasm.semantic.GateInstruction) -> Callable[..., Gate]: + def _get_gate_generator(self, instruction: cqasm.semantic.GateInstruction) -> Callable[..., Gate]: gate_name = instruction.gate.name if gate_name in ["inv", "pow", "ctrl"]: - modified_gate_f = cast("Callable[..., BlochSphereRotation]", Parser._get_gate_f(instruction.gate)) + modified_gate_generator = cast( + "Callable[..., BlochSphereRotation]", self._get_gate_generator(instruction.gate) + ) if gate_name == "inv": - return InverseGateModifier(modified_gate_f) + return InverseGateModifier(modified_gate_generator) if gate_name == "pow": - return PowerGateModifier(instruction.gate.parameter.value, modified_gate_f) + gate = instruction.gate + exponent = gate.parameters[0].value + return PowerGateModifier(exponent, modified_gate_generator) if gate_name == "ctrl": - return ControlGateModifier(modified_gate_f) + return ControlGateModifier(modified_gate_generator) msg = "parsing error: unknown unitary instruction" + raise OSError(msg) - return instruction_library.get_gate_f(gate_name) + return lambda *args: default_gate_set[gate_name](*args) - @staticmethod - def _get_non_unitary_f(instruction: cqasm.semantic.NonGateInstruction) -> Callable[..., NonUnitary]: - return instruction_library.get_non_unitary_f(instruction.name) + def _get_non_unitary_generator(self, instruction: cqasm.semantic.NonGateInstruction) -> Callable[..., NonUnitary]: + return lambda *args: default_non_unitary_set[instruction.name](*args) def circuit_from_string(self, s: str) -> Circuit: # Analysis result will be either an Abstract Syntax Tree (AST) or a list of error messages @@ -197,22 +200,25 @@ def circuit_from_string(self, s: str) -> Circuit: ast = analysis_result # Create RegisterManager - register_manager = RegisterManager.from_ast(ast) + self.register_manager = RegisterManager.from_ast(ast) # Parse statements - ir = IR() + expanded_args: list[tuple[Any, ...]] = [] for statement in ast.block.statements: instruction_generator: Callable[..., Statement] if Parser._is_gate_instruction(statement): - instruction_generator = self._get_gate_f(statement) - expanded_args = Parser._get_expanded_instruction_args(statement, register_manager) + instruction_generator = self._get_gate_generator(statement) + expanded_args = self._get_expanded_instruction_args(statement) elif Parser._is_non_unitary_instruction(statement): - instruction_generator = self._get_non_unitary_f(statement) + instruction_generator = self._get_non_unitary_generator(statement) expanded_args = ( - Parser._get_expanded_measure_args(statement.operands, register_manager) + self._get_expanded_measure_args(statement.operands) if statement.name == "measure" - else Parser._get_expanded_instruction_args(statement, register_manager) + else self._get_expanded_instruction_args(statement) ) + elif Parser._is_asm_declaration(statement): + asm_declaration = AsmDeclaration(statement.backend_name, statement.backend_code) + self.ir.add_statement(asm_declaration) else: msg = "parsing error: unknown statement" raise OSError(msg) @@ -220,6 +226,9 @@ def circuit_from_string(self, s: str) -> Circuit: # For an SGMQ instruction: # expanded_args will contain a list with the list of qubits for each individual instruction, # while args will contain the list of qubits of an individual instruction - for args in expanded_args: - ir.add_statement(instruction_generator(*args)) - return Circuit(register_manager, ir) + if expanded_args: + for args in expanded_args: + self.ir.add_statement(instruction_generator(*args)) + expanded_args = [] + + return Circuit(self.register_manager, self.ir) diff --git a/opensquirrel/passes/decomposer/__init__.py b/opensquirrel/passes/decomposer/__init__.py index 08d819c2..4ef191cb 100644 --- a/opensquirrel/passes/decomposer/__init__.py +++ b/opensquirrel/passes/decomposer/__init__.py @@ -8,16 +8,20 @@ ) from opensquirrel.passes.decomposer.cnot2cz_decomposer import CNOT2CZDecomposer from opensquirrel.passes.decomposer.cnot_decomposer import CNOTDecomposer +from opensquirrel.passes.decomposer.cz_decomposer import CZDecomposer from opensquirrel.passes.decomposer.general_decomposer import Decomposer from opensquirrel.passes.decomposer.mckay_decomposer import McKayDecomposer from opensquirrel.passes.decomposer.swap2cnot_decomposer import SWAP2CNOTDecomposer +from opensquirrel.passes.decomposer.swap2cz_decomposer import SWAP2CZDecomposer __all__ = [ "CNOT2CZDecomposer", "CNOTDecomposer", + "CZDecomposer", "Decomposer", "McKayDecomposer", "SWAP2CNOTDecomposer", + "SWAP2CZDecomposer", "XYXDecomposer", "XZXDecomposer", "YXYDecomposer", diff --git a/opensquirrel/passes/decomposer/aba_decomposer.py b/opensquirrel/passes/decomposer/aba_decomposer.py index cff8079a..c991025e 100644 --- a/opensquirrel/passes/decomposer/aba_decomposer.py +++ b/opensquirrel/passes/decomposer/aba_decomposer.py @@ -26,7 +26,8 @@ def rb(self) -> Callable[..., BlochSphereRotation]: ... _gate_list: ClassVar[list[Callable[..., BlochSphereRotation]]] = [Rx, Ry, Rz] - def __init__(self) -> None: + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) self.index_a = self._gate_list.index(self.ra) self.index_b = self._gate_list.index(self.rb) diff --git a/opensquirrel/passes/decomposer/cnot2cz_decomposer.py b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py index f71e6ee6..caaca6fb 100644 --- a/opensquirrel/passes/decomposer/cnot2cz_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py @@ -2,8 +2,7 @@ import math -from opensquirrel.default_instructions import CZ, Ry -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.ir import CZ, BlochSphereRotation, ControlledGate, Gate, Ry from opensquirrel.passes.decomposer.general_decomposer import Decomposer diff --git a/opensquirrel/passes/decomposer/cnot_decomposer.py b/opensquirrel/passes/decomposer/cnot_decomposer.py index e060e753..93f3e627 100644 --- a/opensquirrel/passes/decomposer/cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot_decomposer.py @@ -47,7 +47,6 @@ def decompose(self, g: Gate) -> list[Gate]: # The decomposition can use a single CNOT according to the lemma. A = [Ry(target_qubit, -theta1_with_x / 2), Rz(target_qubit, -theta2_with_x)] # noqa: N806 B = [Rz(target_qubit, theta2_with_x), Ry(target_qubit, theta1_with_x / 2)] # noqa: N806 - return filter_out_identities( [ *B, diff --git a/opensquirrel/passes/decomposer/cz_decomposer.py b/opensquirrel/passes/decomposer/cz_decomposer.py new file mode 100644 index 00000000..8dfe9030 --- /dev/null +++ b/opensquirrel/passes/decomposer/cz_decomposer.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +import math + +from opensquirrel import CZ, Rx, Ry, Rz, Z +from opensquirrel.common import ATOL +from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.passes.decomposer import XYXDecomposer +from opensquirrel.passes.decomposer.general_decomposer import Decomposer +from opensquirrel.passes.merger import general_merger +from opensquirrel.utils import filter_out_identities + + +class CZDecomposer(Decomposer): + """ + Decomposes 2-qubit controlled unitary gates to CZ + Rx/Ry. + Applying single-qubit gate fusion after this pass might be beneficial. + + Source of the math: https://threeplusone.com/pubs/on_gates.pdf, chapter 7.5 "ABC decomposition" + """ + + def decompose(self, g: Gate) -> list[Gate]: + if not isinstance(g, ControlledGate): + # Do nothing: + # - BlochSphereRotation's are only single-qubit, + # - decomposing MatrixGate is currently not supported. + return [g] + + if not isinstance(g.target_gate, BlochSphereRotation): + # Do nothing. + # ControlledGate's with 2+ control qubits are ignored. + return [g] + + target_qubit = g.target_gate.qubit + + # Perform XYX decomposition on the target gate. + # This gives us an ABC decomposition (U = exp(i phase) * AZBZC, ABC = I) of the target gate. + # See https://threeplusone.com/pubs/on_gates.pdf + + # Try special case first, see https://arxiv.org/pdf/quant-ph/9503016.pdf lemma 5.5 + # Note that here V = Rx(a) * Ry(th) * Rx(a) * Z to create V = AZBZ, with AB = I + controlled_rotation_times_z = general_merger.compose_bloch_sphere_rotations(g.target_gate, Z(target_qubit)) + theta0_with_z, theta1_with_z, theta2_with_z = XYXDecomposer().get_decomposition_angles( + controlled_rotation_times_z.axis, + controlled_rotation_times_z.angle, + ) + if abs((theta0_with_z - theta2_with_z) % (2 * math.pi)) < ATOL: + # The decomposition can use a single CZ according to the lemma. + A = [Ry(target_qubit, theta1_with_z / 2), Rx(target_qubit, theta2_with_z)] # noqa: N806 + B = [Rx(target_qubit, -theta2_with_z), Ry(target_qubit, -theta1_with_z / 2)] # noqa: N806 + return filter_out_identities( + [ + *B, + CZ(g.control_qubit, target_qubit), + *A, + Rz(g.control_qubit, g.target_gate.phase - math.pi / 2), + ], + ) + + theta0, theta1, theta2 = XYXDecomposer().get_decomposition_angles(g.target_gate.axis, g.target_gate.angle) + + A = [Ry(target_qubit, theta1 / 2), Rx(target_qubit, theta2)] # noqa: N806 + B = [Rx(target_qubit, -(theta0 + theta2) / 2), Ry(target_qubit, -theta1 / 2)] # noqa: N806 + C = [Rx(target_qubit, (theta0 - theta2) / 2)] # noqa: N806 + + return filter_out_identities( + [ + *C, + CZ(g.control_qubit, target_qubit), + *B, + CZ(g.control_qubit, target_qubit), + *A, + Rz(g.control_qubit, g.target_gate.phase), + ], + ) diff --git a/opensquirrel/passes/decomposer/general_decomposer.py b/opensquirrel/passes/decomposer/general_decomposer.py index 779e4fb1..72bea18d 100644 --- a/opensquirrel/passes/decomposer/general_decomposer.py +++ b/opensquirrel/passes/decomposer/general_decomposer.py @@ -2,14 +2,18 @@ from abc import ABC, abstractmethod from collections.abc import Callable, Iterable +from typing import Any from opensquirrel.circuit_matrix_calculator import get_circuit_matrix from opensquirrel.common import are_matrices_equivalent_up_to_global_phase, is_identity_matrix_up_to_a_global_phase +from opensquirrel.default_instructions import is_anonymous_gate from opensquirrel.ir import IR, Gate from opensquirrel.reindexer import get_reindexed_circuit class Decomposer(ABC): + def __init__(self, **kwargs: Any) -> None: ... + @abstractmethod def decompose(self, gate: Gate) -> list[Gate]: raise NotImplementedError() @@ -59,19 +63,18 @@ def decompose(ir: IR, decomposer: Decomposer) -> None: class _GenericReplacer(Decomposer): - def __init__(self, gate_generator: Callable[..., Gate], replacement_function: Callable[..., list[Gate]]) -> None: - self.gate_generator = gate_generator - self.replacement_function = replacement_function + def __init__(self, gate_type: type[Gate], replacement_gates_function: Callable[..., list[Gate]]) -> None: + self.gate_type = gate_type + self.replacement_gates_function = replacement_gates_function - def decompose(self, g: Gate) -> list[Gate]: - if g.is_anonymous or g.generator != self.gate_generator: - return [g] - arguments = () if g.arguments is None else g.arguments - return self.replacement_function(*arguments) + def decompose(self, gate: Gate) -> list[Gate]: + if is_anonymous_gate(gate.name) or type(gate) is not self.gate_type: + return [gate] + return self.replacement_gates_function(*gate.arguments) -def replace(ir: IR, gate_generator: Callable[..., Gate], f: Callable[..., list[Gate]]) -> None: +def replace(ir: IR, gate: type[Gate], replacement_gates_function: Callable[..., list[Gate]]) -> None: """Does the same as decomposer, but only applies to a given gate.""" - generic_replacer = _GenericReplacer(gate_generator, f) + generic_replacer = _GenericReplacer(gate, replacement_gates_function) decompose(ir, generic_replacer) diff --git a/opensquirrel/passes/decomposer/swap2cnot_decomposer.py b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py index cb427a7c..d18b3728 100644 --- a/opensquirrel/passes/decomposer/swap2cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING -from opensquirrel.default_instructions import CNOT +from opensquirrel.ir import CNOT from opensquirrel.passes.decomposer.general_decomposer import Decomposer if TYPE_CHECKING: diff --git a/opensquirrel/passes/decomposer/swap2cz_decomposer.py b/opensquirrel/passes/decomposer/swap2cz_decomposer.py new file mode 100644 index 00000000..09611183 --- /dev/null +++ b/opensquirrel/passes/decomposer/swap2cz_decomposer.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +import math +from typing import TYPE_CHECKING + +from opensquirrel.ir import CZ, Ry +from opensquirrel.passes.decomposer.general_decomposer import Decomposer + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +class SWAP2CZDecomposer(Decomposer): + """Predefined decomposition of SWAP gate to Ry rotations and 3 CZ gates. + ---x--- -------------•-[Ry(-pi/2)]-•-[Ry(+pi/2)]-•------------- + | → | | | + ---x--- -[Ry(-pi/2)]-•-[Ry(+pi/2)]-•-[Ry(-pi/2)]-•-[Ry(+pi/2)]- + Note: + This decomposition preserves the global phase of the SWAP gate. + """ + + def decompose(self, gate: Gate) -> list[Gate]: + if gate.name != "SWAP": + return [gate] + qubit0, qubit1 = gate.get_qubit_operands() + return [ + Ry(qubit1, -math.pi / 2), + CZ(qubit0, qubit1), + Ry(qubit1, math.pi / 2), + Ry(qubit0, -math.pi / 2), + CZ(qubit1, qubit0), + Ry(qubit0, math.pi / 2), + Ry(qubit1, -math.pi / 2), + CZ(qubit0, qubit1), + Ry(qubit1, math.pi / 2), + ] diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py index e5466521..6f561dbf 100644 --- a/opensquirrel/passes/exporter/cqasmv1_exporter.py +++ b/opensquirrel/passes/exporter/cqasmv1_exporter.py @@ -1,10 +1,32 @@ from __future__ import annotations import re -from typing import TYPE_CHECKING, SupportsFloat, SupportsInt +from typing import TYPE_CHECKING, Any, SupportsFloat, SupportsInt from opensquirrel.exceptions import UnsupportedGateError -from opensquirrel.ir import Barrier, Float, Gate, Init, Int, IRVisitor, Measure, Qubit, Reset, Wait +from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, + Barrier, + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + CRk, + Float, + Gate, + Init, + Int, + IRVisitor, + MatrixGate, + Measure, + Qubit, + Reset, + Wait, +) if TYPE_CHECKING: from opensquirrel.circuit import Circuit @@ -22,7 +44,7 @@ class _CQASMv1Creator(IRVisitor): def __init__(self, register_manager: RegisterManager) -> None: self.register_manager = register_manager qubit_register_size = self.register_manager.get_qubit_register_size() - self.output = "version 1.0\n\n{}\n\n".format(f"qubits {qubit_register_size}" if qubit_register_size > 0 else "") + self.output = "version 1.0{}\n\n".format(f"\n\nqubits {qubit_register_size}" if qubit_register_size > 0 else "") def visit_qubit(self, qubit: Qubit) -> str: qubit_register_name = self.register_manager.get_qubit_register_name() @@ -36,37 +58,78 @@ def visit_float(self, f: SupportsFloat) -> str: f = Float(f) return f"{f.value:.{self.FLOAT_PRECISION}}" + def visit_gate(self, gate: Gate) -> None: + raise UnsupportedGateError(gate) + + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: + raise UnsupportedGateError(gate) + + def visit_bsr_no_params(self, gate: BsrNoParams) -> None: + qubit_operand = gate.qubit.accept(self) + self.output += f"{gate.name.lower()} {qubit_operand}\n" + + def visit_bsr_full_params(self, gate: BsrFullParams) -> None: + raise UnsupportedGateError(gate) + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: + theta_argument = gate.theta.accept(self) + qubit_operand = gate.qubit.accept(self) + self.output += f"{gate.name.lower()} {qubit_operand}, {theta_argument}\n" + + def visit_matrix_gate(self, gate: MatrixGate) -> None: + raise UnsupportedGateError(gate) + + def visit_swap(self, gate: SWAP) -> Any: + qubit_operand_0 = gate.qubit_0.accept(self) + qubit_operand_1 = gate.qubit_1.accept(self) + self.output += f"swap {qubit_operand_0}, {qubit_operand_1}\n" + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + raise UnsupportedGateError(gate) + + def visit_cnot(self, gate: CNOT) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"cnot {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_cz(self, gate: CZ) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"cz {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_cr(self, gate: CR) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + theta_argument = gate.theta.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"cr({theta_argument}) {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_crk(self, gate: CRk) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + k_argument = gate.k.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"crk({k_argument}) {control_qubit_operand}, {target_qubit_operand}\n" + def visit_measure(self, measure: Measure) -> None: - qubit_argument = measure.arguments[0].accept(self) # type: ignore[index] - self.output += f"{measure.name}_z {qubit_argument}\n" + qubit_argument = measure.arguments[0].accept(self) + self.output += f"measure_z {qubit_argument}\n" def visit_init(self, init: Init) -> None: - qubit_argument = init.arguments[0].accept(self) # type: ignore[index] + qubit_argument = init.arguments[0].accept(self) self.output += f"prep_z {qubit_argument}\n" def visit_reset(self, reset: Reset) -> None: - qubit_argument = reset.arguments[0].accept(self) # type: ignore[index] + qubit_argument = reset.arguments[0].accept(self) self.output += f"prep_z {qubit_argument}\n" def visit_barrier(self, barrier: Barrier) -> None: - qubit_argument = barrier.arguments[0].accept(self) # type: ignore[index] + qubit_argument = barrier.arguments[0].accept(self) self.output += f"barrier {qubit_argument}\n" def visit_wait(self, wait: Wait) -> None: - qubit_argument = wait.arguments[0].accept(self) # type: ignore[index] - parameter = wait.arguments[1].accept(self) # type: ignore[index] + qubit_argument = wait.arguments[0].accept(self) + parameter = wait.arguments[1].accept(self) self.output += f"wait {qubit_argument}, {parameter}\n" - def visit_gate(self, gate: Gate) -> None: - gate_name = gate.name.lower() - if gate.is_anonymous: - raise UnsupportedGateError(gate) - params = [] - if any(not isinstance(arg, Qubit) for arg in gate.arguments): # type: ignore[union-attr] - params = [arg.accept(self) for arg in gate.arguments if not isinstance(arg, Qubit)] # type: ignore[union-attr] - qubit_args = (arg.accept(self) for arg in gate.arguments if isinstance(arg, Qubit)) # type: ignore[union-attr] - self.output += "{} {}{}\n".format(gate_name, ", ".join(qubit_args), ", " + ", ".join(params) if params else "") - def post_process(output: str) -> str: return _merge_barrier_groups(output) diff --git a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py index 2f1146f8..4ad67bc4 100644 --- a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py +++ b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py @@ -3,11 +3,25 @@ import math from typing import TYPE_CHECKING, Any -from opensquirrel import X, Z from opensquirrel.circuit import Circuit from opensquirrel.common import ATOL from opensquirrel.exceptions import ExporterError, UnsupportedGateError -from opensquirrel.ir import BlochSphereRotation, ControlledGate, IRVisitor, MatrixGate, Measure, Reset +from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + CRk, + IRVisitor, + MatrixGate, + Measure, + Reset, +) try: import quantify_scheduler @@ -25,8 +39,8 @@ class _ScheduleCreator(IRVisitor): - def _get_qubit_string(self, q: Qubit) -> str: - return f"{self.qubit_register_name}[{q.index}]" + def _get_qubit_string(self, qubit: Qubit) -> str: + return f"{self.qubit_register_name}[{qubit.index}]" def __init__(self, register_manager: RegisterManager) -> None: self.register_manager = register_manager @@ -37,61 +51,79 @@ def __init__(self, register_manager: RegisterManager) -> None: self.bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * self.bit_register_size self.schedule = quantify_scheduler.Schedule("Exported OpenSquirrel circuit") - def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> None: + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: # Note that when adding a rotation gate to the Quantify-scheduler Schedule, # there exists an ambiguity with how Quantify-scheduler will store an angle of 180 degrees. # Depending on the system the angle may be stored as either 180 or -180 degrees. # This ambiguity has no physical consequences, but may cause the exporter test fail. - if abs(g.axis[2]) < ATOL: + if abs(gate.axis[2]) < ATOL: # Rxy rotation. - theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) - phi: float = round(math.degrees(math.atan2(g.axis[1], g.axis[0])), FIXED_POINT_DEG_PRECISION) - self.schedule.add(quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(g.qubit))) + theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) + phi: float = round(math.degrees(math.atan2(gate.axis[1], gate.axis[0])), FIXED_POINT_DEG_PRECISION) + self.schedule.add( + quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(gate.qubit)) + ) return - if abs(g.axis[0]) < ATOL and abs(g.axis[1]) < ATOL: + if abs(gate.axis[0]) < ATOL and abs(gate.axis[1]) < ATOL: # Rz rotation. - theta = round(math.degrees(g.angle), FIXED_POINT_DEG_PRECISION) - self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(g.qubit))) + theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) + self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(gate.qubit))) return - raise UnsupportedGateError(g) + raise UnsupportedGateError(gate) - def visit_matrix_gate(self, g: MatrixGate) -> None: - raise UnsupportedGateError(g) + def visit_bsr_no_params(self, gate: BsrNoParams) -> None: + self.visit_bloch_sphere_rotation(gate) - def visit_controlled_gate(self, g: ControlledGate) -> None: - if not isinstance(g.target_gate, BlochSphereRotation): - raise UnsupportedGateError(g) + def visit_bsr_full_params(self, gate: BsrFullParams) -> None: + self.visit_bloch_sphere_rotation(gate) - if g.target_gate == X(g.target_gate.qubit): - self.schedule.add( - quantify_scheduler_gates.CNOT( - qC=self._get_qubit_string(g.control_qubit), - qT=self._get_qubit_string(g.target_gate.qubit), - ), - ) - return + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: + self.visit_bloch_sphere_rotation(gate) - if g.target_gate == Z(g.target_gate.qubit): - self.schedule.add( - quantify_scheduler_gates.CZ( - qC=self._get_qubit_string(g.control_qubit), - qT=self._get_qubit_string(g.target_gate.qubit), - ), - ) - return + def visit_matrix_gate(self, gate: MatrixGate) -> None: + raise UnsupportedGateError(gate) + + def visit_swap(self, gate: SWAP) -> None: + raise UnsupportedGateError(gate) + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + if not isinstance(gate.target_gate, BlochSphereRotation): + raise UnsupportedGateError(gate) + + def visit_cnot(self, gate: CNOT) -> None: + self.schedule.add( + quantify_scheduler_gates.CNOT( + qC=self._get_qubit_string(gate.control_qubit), + qT=self._get_qubit_string(gate.target_qubit), + ), + ) + return + + def visit_cz(self, gate: CZ) -> None: + self.schedule.add( + quantify_scheduler_gates.CZ( + qC=self._get_qubit_string(gate.control_qubit), + qT=self._get_qubit_string(gate.target_qubit), + ), + ) + return + + def visit_cr(self, gate: CR) -> None: + raise UnsupportedGateError(gate) - raise UnsupportedGateError(g) + def visit_crk(self, gate: CRk) -> None: + raise UnsupportedGateError(gate) - def visit_measure(self, g: Measure) -> None: - qubit_index = g.qubit.index - bit_index = g.bit.index + def visit_measure(self, gate: Measure) -> None: + qubit_index = gate.qubit.index + bit_index = gate.bit.index acq_index = self.acq_index_record[qubit_index] self.bit_string_mapping[bit_index] = (acq_index, qubit_index) self.schedule.add( quantify_scheduler_gates.Measure( - self._get_qubit_string(g.qubit), + self._get_qubit_string(gate.qubit), acq_channel=qubit_index, acq_index=acq_index, acq_protocol="ThresholdedAcquisition", @@ -100,8 +132,8 @@ def visit_measure(self, g: Measure) -> None: self.acq_index_record[qubit_index] += 1 return - def visit_reset(self, g: Reset) -> Any: - self.schedule.add(quantify_scheduler_gates.Reset(self._get_qubit_string(g.qubit))) + def visit_reset(self, gate: Reset) -> Any: + self.schedule.add(quantify_scheduler_gates.Reset(self._get_qubit_string(gate.qubit))) def export(circuit: Circuit) -> tuple[quantify_scheduler.Schedule, list[tuple[Any, Any]]]: diff --git a/opensquirrel/passes/mapper/__init__.py b/opensquirrel/passes/mapper/__init__.py index 9088ae32..8664e7bc 100644 --- a/opensquirrel/passes/mapper/__init__.py +++ b/opensquirrel/passes/mapper/__init__.py @@ -1,4 +1,4 @@ from opensquirrel.passes.mapper.general_mapper import Mapper -from opensquirrel.passes.mapper.simple_mappers import HardcodedMapper, IdentityMapper +from opensquirrel.passes.mapper.simple_mappers import HardcodedMapper, IdentityMapper, RandomMapper -__all__ = ["HardcodedMapper", "IdentityMapper", "Mapper"] +__all__ = ["HardcodedMapper", "IdentityMapper", "Mapper", "RandomMapper"] diff --git a/opensquirrel/passes/mapper/general_mapper.py b/opensquirrel/passes/mapper/general_mapper.py index 2078c98a..834d47dc 100644 --- a/opensquirrel/passes/mapper/general_mapper.py +++ b/opensquirrel/passes/mapper/general_mapper.py @@ -2,13 +2,15 @@ from __future__ import annotations +from typing import Any + from opensquirrel.passes.mapper.mapping import Mapping class Mapper: """Base class for the Mapper pass.""" - def __init__(self, qubit_register_size: int, mapping: Mapping | None = None) -> None: + def __init__(self, qubit_register_size: int, mapping: Mapping | None = None, **kwargs: Any) -> None: """Use ``IdentityMapper`` as the fallback case for ``Mapper``""" physical_qubit_register = list(range(qubit_register_size)) self.mapping = mapping if mapping is not None else Mapping(physical_qubit_register) diff --git a/opensquirrel/passes/mapper/qubit_remapper.py b/opensquirrel/passes/mapper/qubit_remapper.py index 86646d01..da87bd59 100644 --- a/opensquirrel/passes/mapper/qubit_remapper.py +++ b/opensquirrel/passes/mapper/qubit_remapper.py @@ -1,9 +1,17 @@ from opensquirrel.circuit import Circuit from opensquirrel.ir import ( + CNOT, + CR, + CZ, IR, + SWAP, Barrier, BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, ControlledGate, + CRk, Init, IRVisitor, MatrixGate, @@ -58,20 +66,44 @@ def visit_wait(self, wait: Wait) -> Wait: wait.qubit.accept(self) return wait - def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: - g.qubit.accept(self) - return g + def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> BlochSphereRotation: + bloch_sphere_rotation.qubit.accept(self) + return bloch_sphere_rotation - def visit_matrix_gate(self, g: MatrixGate) -> MatrixGate: - for op in g.operands: + def visit_bsr_no_params(self, gate: BsrNoParams) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) + + def visit_bsr_full_params(self, gate: BsrFullParams) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) + + def visit_matrix_gate(self, matrix_gate: MatrixGate) -> MatrixGate: + for op in matrix_gate.operands: op.accept(self) - return g + return matrix_gate + + def visit_swap(self, gate: SWAP) -> MatrixGate: + return self.visit_matrix_gate(gate) def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: controlled_gate.control_qubit.accept(self) controlled_gate.target_gate.accept(self) return controlled_gate + def visit_cnot(self, gate: CNOT) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_cz(self, gate: CZ) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_cr(self, gate: CR) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_crk(self, gate: CRk) -> ControlledGate: + return self.visit_controlled_gate(gate) + def get_remapped_ir(circuit: Circuit, mapping: Mapping) -> IR: if len(mapping) > circuit.qubit_register_size: diff --git a/opensquirrel/passes/mapper/simple_mappers.py b/opensquirrel/passes/mapper/simple_mappers.py index f57005d6..2e9f1723 100644 --- a/opensquirrel/passes/mapper/simple_mappers.py +++ b/opensquirrel/passes/mapper/simple_mappers.py @@ -2,19 +2,43 @@ * IdentityMapper * HardcodedMapper +* RandomMapper """ +import random +from typing import Any + from opensquirrel.passes.mapper.general_mapper import Mapper from opensquirrel.passes.mapper.mapping import Mapping class IdentityMapper(Mapper): - def __init__(self, qubit_register_size: int) -> None: + def __init__(self, qubit_register_size: int, **kwargs: Any) -> None: """An ``IdentityMapper`` maps each virtual qubit to exactly the same physical qubit.""" - super().__init__(qubit_register_size) + super().__init__(qubit_register_size, **kwargs) class HardcodedMapper(Mapper): - def __init__(self, qubit_register_size: int, mapping: Mapping) -> None: - """A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit""" - super().__init__(qubit_register_size, mapping) + def __init__(self, qubit_register_size: int, mapping: Mapping, **kwargs: Any) -> None: + """ + A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit + + Args: + qubit_register_size: The number of qubits in the physical qubit register + mapping: The mapping from virtual to physical qubits + """ + super().__init__(qubit_register_size, mapping, **kwargs) + + +class RandomMapper(Mapper): + def __init__(self, qubit_register_size: int, **kwargs: Any) -> None: + """ + A ``RandomMapper`` maps each virtual qubit to a random physical qubit. + + Args: + qubit_register_size: The number of qubits in the physical qubit register + """ + physical_qubit_register = list(range(qubit_register_size)) + random.shuffle(physical_qubit_register) + random_mapping = Mapping(physical_qubit_register) + super().__init__(qubit_register_size, random_mapping, **kwargs) diff --git a/opensquirrel/passes/merger/general_merger.py b/opensquirrel/passes/merger/general_merger.py index b5b7703e..09a47768 100644 --- a/opensquirrel/passes/merger/general_merger.py +++ b/opensquirrel/passes/merger/general_merger.py @@ -1,15 +1,14 @@ from __future__ import annotations from abc import ABC, abstractmethod -from math import cos, floor, isclose, log10, sin -from typing import cast +from math import cos, floor, log10, sin +from typing import Any, cast import numpy as np from opensquirrel import I from opensquirrel.common import ATOL -from opensquirrel.default_instructions import default_bloch_sphere_rotation_set -from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Float, Instruction, Statement +from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Instruction, Statement from opensquirrel.utils import acos, flatten_list @@ -21,13 +20,14 @@ def compose_bloch_sphere_rotations(bsr_a: BlochSphereRotation, bsr_b: BlochSpher A q B q - A linear operations: + As linear operations: (B * A) q If the final Bloch sphere rotation is anonymous, we try to match it to a default gate. Uses Rodrigues' rotation formula (see https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula). """ + if bsr_a.qubit != bsr_b.qubit: msg = "cannot merge two Bloch sphere rotations on different qubits" raise ValueError(msg) @@ -56,57 +56,16 @@ def compose_bloch_sphere_rotations(bsr_a: BlochSphereRotation, bsr_b: BlochSpher combined_phase = np.round(bsr_a.phase + bsr_b.phase, order_of_magnitude) - if bsr_a.is_identity(): - generator = bsr_b.generator - arguments = bsr_b.arguments - elif bsr_b.is_identity(): - generator = bsr_a.generator - arguments = bsr_a.arguments - elif bsr_a.generator == bsr_b.generator: - generator = bsr_a.generator - arguments = (bsr_a.qubit,) - if bsr_a.arguments is not None and len(bsr_a.arguments) == 2 and isinstance(bsr_a.arguments[1], Float): - arguments += (Float(combined_angle),) - else: - generator = None - arguments = None - - return try_name_anonymous_bloch( + return BlochSphereRotation.try_match_replace_with_default( BlochSphereRotation( qubit=bsr_a.qubit, axis=combined_axis, angle=combined_angle, phase=combined_phase, - generator=generator, # type: ignore[arg-type] - arguments=arguments, ) ) -def try_name_anonymous_bloch(bsr: BlochSphereRotation) -> BlochSphereRotation: - """Try converting a given BlochSphereRotation to a default BlochSphereRotation. - It does that by checking if the input BlochSphereRotation is close to a default BlochSphereRotation. - - Returns: - A default BlockSphereRotation if this BlochSphereRotation is close to it, - or the input BlochSphereRotation otherwise. - """ - if not bsr.is_anonymous: - return bsr - for default_bsr_callable in default_bloch_sphere_rotation_set.values(): - try: - default_bsr = default_bsr_callable(*bsr.get_qubit_operands()) - if ( - np.allclose(default_bsr.axis, bsr.axis, atol=ATOL) - and isclose(default_bsr.angle, bsr.angle, rel_tol=ATOL) - and isclose(default_bsr.phase, bsr.phase, rel_tol=ATOL) - ): - return default_bsr - except TypeError: # noqa: PERF203 - pass - return bsr - - def can_move_statement_before_barrier(instruction: Instruction, barriers: list[Instruction]) -> bool: """Checks whether an instruction can be moved before a group of 'linked' barriers. Returns True if none of the qubits used by the instruction are part of any barrier, False otherwise. @@ -171,6 +130,8 @@ def rearrange_barriers(ir: IR) -> None: class Merger(ABC): + def __init__(self, **kwargs: Any) -> None: ... + @abstractmethod def merge(self, ir: IR, qubit_register_size: int) -> None: raise NotImplementedError diff --git a/opensquirrel/passes/merger/single_qubit_gates_merger.py b/opensquirrel/passes/merger/single_qubit_gates_merger.py index 7709d28e..9259e053 100644 --- a/opensquirrel/passes/merger/single_qubit_gates_merger.py +++ b/opensquirrel/passes/merger/single_qubit_gates_merger.py @@ -1,7 +1,7 @@ from typing import cast from opensquirrel import I -from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Instruction, Qubit +from opensquirrel.ir import IR, AsmDeclaration, Barrier, BlochSphereRotation, Instruction, Qubit from opensquirrel.passes.merger.general_merger import Merger, compose_bloch_sphere_rotations @@ -41,7 +41,7 @@ def insert_accumulated_bloch_sphere_rotations(qubits: list[Qubit]) -> None: # For barrier directives, insert all accumulated Bloch sphere rotations # For other instructions, insert accumulated Bloch sphere rotations on qubits used by those instructions # In any case, reset the dictionary entry for the inserted accumulated Bloch sphere rotations - if isinstance(instruction, Barrier): + if isinstance(instruction, Barrier) or isinstance(statement, AsmDeclaration): insert_accumulated_bloch_sphere_rotations([Qubit(i) for i in range(qubit_register_size)]) else: insert_accumulated_bloch_sphere_rotations(instruction.get_qubit_operands()) diff --git a/opensquirrel/passes/router/__init__.py b/opensquirrel/passes/router/__init__.py index 4870bc21..afdfe837 100644 --- a/opensquirrel/passes/router/__init__.py +++ b/opensquirrel/passes/router/__init__.py @@ -1,7 +1,5 @@ -from opensquirrel.passes.router.general_router import Router -from opensquirrel.passes.router.routing_checker import RoutingChecker +from opensquirrel.passes.router.general_router import Router # noqa: I001 +from opensquirrel.passes.router.astar_router import AStarRouter +from opensquirrel.passes.router.shortest_path_router import ShortestPathRouter -__all__ = [ - "Router", - "RoutingChecker", -] +__all__ = ["AStarRouter", "Router", "ShortestPathRouter"] diff --git a/opensquirrel/passes/router/astar_router.py b/opensquirrel/passes/router/astar_router.py new file mode 100644 index 00000000..b6fe01d6 --- /dev/null +++ b/opensquirrel/passes/router/astar_router.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +import math +from typing import Any + +import networkx as nx + +from opensquirrel.exceptions import NoRoutingPathError +from opensquirrel.ir import IR, SWAP, Gate +from opensquirrel.passes.router import Router +from opensquirrel.passes.router.heuristics import DistanceMetric, calculate_distance + + +class AStarRouter(Router): + def __init__(self, connectivity: dict[str, list[int]], distance_metric: DistanceMetric, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.connectivity = connectivity + self.distance_metric = distance_metric + + def route(self, ir: IR) -> IR: + """ + Routes the circuit by inserting SWAP gates, with A*, to make it executable given the hardware connectivity. + Args: + ir: The intermediate representation of the circuit. + Returns: + The intermediate representation of the routed circuit (including the additional SWAP gates). + """ + graph_data = {int(start_node): end_nodes for start_node, end_nodes in self.connectivity.items()} + graph = nx.Graph(graph_data) + num_available_qubits = max(graph.nodes) + 1 + # Calculate the number of columns in a grid layout of the qubits. + # This assumes the qubits are arranged in a square or rectangular grid. + # The number of columns is derived from the total number of qubits on the hardware. + num_columns = math.ceil(math.sqrt(num_available_qubits)) + statement_index = 0 + while statement_index < len(ir.statements): + statement = ir.statements[statement_index] + if isinstance(statement, Gate) and len(statement.get_qubit_operands()) == 2: + q0, q1 = statement.get_qubit_operands() + if not graph.has_edge(q0.index, q1.index): + try: + if self.distance_metric is None: + shortest_path = nx.astar_path(graph, source=q0.index, target=q1.index) + else: + shortest_path = nx.astar_path( + graph, + source=q0.index, + target=q1.index, + heuristic=lambda u, v: calculate_distance(u, v, num_columns, self.distance_metric), + ) + for start_qubit_index, end_qubit_index in zip(shortest_path[:-1], shortest_path[1:]): + ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) + statement_index += 1 + except nx.NetworkXNoPath as e: + msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" + raise NoRoutingPathError(msg) from e + statement_index += 1 + return ir diff --git a/opensquirrel/passes/router/general_router.py b/opensquirrel/passes/router/general_router.py index b6d8958f..8fb756b6 100644 --- a/opensquirrel/passes/router/general_router.py +++ b/opensquirrel/passes/router/general_router.py @@ -1,9 +1,12 @@ from abc import ABC, abstractmethod +from typing import Any from opensquirrel.ir import IR class Router(ABC): + def __init__(self, **kwargs: Any) -> None: ... + @abstractmethod - def route(self, ir: IR) -> None: + def route(self, ir: IR) -> IR: raise NotImplementedError diff --git a/opensquirrel/passes/router/heuristics.py b/opensquirrel/passes/router/heuristics.py new file mode 100644 index 00000000..02d99505 --- /dev/null +++ b/opensquirrel/passes/router/heuristics.py @@ -0,0 +1,33 @@ +# This module defines basic distance metrics that can be used as heuristics in routing algorithms. + +from enum import Enum + + +class DistanceMetric(Enum): + MANHATTAN = "manhattan" + EUCLIDEAN = "euclidean" + CHEBYSHEV = "chebyshev" + + +def calculate_distance(a: int, b: int, num_columns: int, distance_metric: DistanceMetric) -> float: + """ + Calculate the distance between two qubits based on the specified distance metric. + Args: + a: The index of the first qubit. + b: The index of the second qubit. + num_columns: The number of columns in the grid. + distance_metric: Distance metric to be used (Manhattan, Euclidean, or Chebyshev). + Returns: + float: The distance between the two qubits. + """ + x1, y1 = divmod(a, num_columns) + x2, y2 = divmod(b, num_columns) + + if distance_metric == DistanceMetric.MANHATTAN: + return abs(x1 - x2) + abs(y1 - y2) + if distance_metric == DistanceMetric.EUCLIDEAN: + return float(((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5) + if distance_metric == DistanceMetric.CHEBYSHEV: + return max(abs(x1 - x2), abs(y1 - y2)) + msg = "Invalid distance metric. Choose Manhattan, Euclidean, or Chebyshev." + raise ValueError(msg) diff --git a/opensquirrel/passes/router/shortest_path_router.py b/opensquirrel/passes/router/shortest_path_router.py new file mode 100644 index 00000000..b6e7902b --- /dev/null +++ b/opensquirrel/passes/router/shortest_path_router.py @@ -0,0 +1,41 @@ +from typing import Any + +import networkx as nx + +from opensquirrel.exceptions import NoRoutingPathError +from opensquirrel.ir import IR, SWAP, Gate +from opensquirrel.passes.router import Router + + +class ShortestPathRouter(Router): + def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: + super().__init__(**kwargs) + self.connectivity = connectivity + + def route(self, ir: IR) -> IR: + """ + Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not # noqa: W291 + interact with each other, to make it executable given the hardware connectivity. + Args: + ir: The intermediate representation of the circuit. + Returns: + The intermediate representation of the routed circuit (including the additional SWAP gates). + """ + graph_data = {int(start_node): end_nodes for start_node, end_nodes in self.connectivity.items()} + graph = nx.Graph(graph_data) + statement_index = 0 + while statement_index < len(ir.statements): + statement = ir.statements[statement_index] + if isinstance(statement, Gate) and len(statement.get_qubit_operands()) == 2: + q0, q1 = statement.get_qubit_operands() + if not graph.has_edge(q0.index, q1.index): + try: + shortest_path = nx.shortest_path(graph, source=q0.index, target=q1.index) + for start_qubit_index, end_qubit_index in zip(shortest_path[:-1], shortest_path[1:]): + ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) + statement_index += 1 + except nx.NetworkXNoPath as e: + msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" + raise NoRoutingPathError(msg) from e + statement_index += 1 + return ir diff --git a/opensquirrel/passes/validator/__init__.py b/opensquirrel/passes/validator/__init__.py index c88cc843..4a0d992c 100644 --- a/opensquirrel/passes/validator/__init__.py +++ b/opensquirrel/passes/validator/__init__.py @@ -1,6 +1,7 @@ """Init file for the validator passes.""" from opensquirrel.passes.validator.general_validator import Validator -from opensquirrel.passes.validator.native_gate_validator import NativeGateValidator +from opensquirrel.passes.validator.primitive_gate_validator import PrimitiveGateValidator +from opensquirrel.passes.validator.routing_validator import RoutingValidator -__all__ = ["NativeGateValidator", "Validator"] +__all__ = ["PrimitiveGateValidator", "RoutingValidator", "Validator"] diff --git a/opensquirrel/passes/validator/general_validator.py b/opensquirrel/passes/validator/general_validator.py index fd9da472..38366234 100644 --- a/opensquirrel/passes/validator/general_validator.py +++ b/opensquirrel/passes/validator/general_validator.py @@ -1,9 +1,12 @@ from abc import ABC, abstractmethod +from typing import Any from opensquirrel.ir import IR class Validator(ABC): + def __init__(self, **kwargs: Any) -> None: ... + @abstractmethod def validate(self, ir: IR) -> None: """Base validate method to be implemented by inheriting validator classes.""" diff --git a/opensquirrel/passes/validator/native_gate_validator.py b/opensquirrel/passes/validator/native_gate_validator.py deleted file mode 100644 index 2f6cd4ae..00000000 --- a/opensquirrel/passes/validator/native_gate_validator.py +++ /dev/null @@ -1,26 +0,0 @@ -from opensquirrel.ir import IR, Unitary -from opensquirrel.passes.validator import Validator - - -class NativeGateValidator(Validator): - def __init__(self, native_gate_set: list[str]) -> None: - self.native_gate_set = native_gate_set - - def validate(self, ir: IR) -> None: - """ - Check if all unitary gates in the circuit are part of the native gate set. - - Args: - ir (IR): The intermediate representation of the circuit to be checked. - - Raises: - ValueError: If any unitary gate in the circuit is not part of the native gate set. - """ - gates_not_in_native_gate_set = [ - statement.name - for statement in ir.statements - if isinstance(statement, Unitary) and statement.name not in self.native_gate_set - ] - if gates_not_in_native_gate_set: - error_message = f"the following gates are not in the native gate set: {set(gates_not_in_native_gate_set)}" - raise ValueError(error_message) diff --git a/opensquirrel/passes/validator/primitive_gate_validator.py b/opensquirrel/passes/validator/primitive_gate_validator.py new file mode 100644 index 00000000..a84e73c1 --- /dev/null +++ b/opensquirrel/passes/validator/primitive_gate_validator.py @@ -0,0 +1,30 @@ +from typing import Any + +from opensquirrel.ir import IR, Instruction +from opensquirrel.passes.validator import Validator + + +class PrimitiveGateValidator(Validator): + def __init__(self, primitive_gate_set: list[str], **kwargs: Any) -> None: + super().__init__(**kwargs) + self.primitive_gate_set = primitive_gate_set + + def validate(self, ir: IR) -> None: + """ + Check if all unitary gates in the circuit are part of the primitive gate set. + + Args: + ir (IR): The intermediate representation of the circuit to be checked. + + Raises: + ValueError: If any unitary gate in the circuit is not part of the primitive gate set. + """ + gates_not_in_primitive_gate_set = [ + statement.name + for statement in ir.statements + if isinstance(statement, Instruction) and statement.name not in self.primitive_gate_set + ] + if gates_not_in_primitive_gate_set: + unsupported_gates = list(set(gates_not_in_primitive_gate_set)) + error_message = "the following gates are not in the primitive gate set: " + ", ".join(unsupported_gates) + raise ValueError(error_message) diff --git a/opensquirrel/passes/router/routing_checker.py b/opensquirrel/passes/validator/routing_validator.py similarity index 63% rename from opensquirrel/passes/router/routing_checker.py rename to opensquirrel/passes/validator/routing_validator.py index 10312578..dfb65da4 100644 --- a/opensquirrel/passes/router/routing_checker.py +++ b/opensquirrel/passes/validator/routing_validator.py @@ -1,14 +1,24 @@ -from typing import cast +from typing import Any, cast from opensquirrel.ir import IR, Instruction, Qubit -from opensquirrel.passes.router.general_router import Router +from opensquirrel.passes.validator import Validator -class RoutingChecker(Router): - def __init__(self, connectivity: dict[str, list[int]]) -> None: +class RoutingValidator(Validator): + def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: + super().__init__(**kwargs) self.connectivity = connectivity - def route(self, ir: IR) -> None: + def validate(self, ir: IR) -> None: + """ + Check if the circuit interactions faciliate a 1-to-1 mapping to the target hardware. + + Args: + ir (IR): The intermediate representation of the circuit to be checked. + + Raises: + ValueError: If the circuit can't be mapped to the target hardware. + """ non_executable_interactions = [] for statement in ir.statements: instruction: Instruction = cast("Instruction", statement) diff --git a/opensquirrel/reindexer/qubit_reindexer.py b/opensquirrel/reindexer/qubit_reindexer.py index 7ca14c7e..cbbe46d2 100644 --- a/opensquirrel/reindexer/qubit_reindexer.py +++ b/opensquirrel/reindexer/qubit_reindexer.py @@ -4,10 +4,18 @@ from typing import TYPE_CHECKING from opensquirrel.ir import ( + CNOT, + CR, + CZ, IR, + SWAP, Barrier, BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, ControlledGate, + CRk, Gate, Init, IRVisitor, @@ -55,23 +63,48 @@ def visit_barrier(self, barrier: Barrier) -> Barrier: def visit_wait(self, wait: Wait) -> Wait: return Wait(qubit=self.qubit_indices.index(wait.qubit.index), time=wait.time) - def visit_bloch_sphere_rotation(self, g: BlochSphereRotation) -> BlochSphereRotation: + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> BlochSphereRotation: return BlochSphereRotation( - qubit=self.qubit_indices.index(g.qubit.index), - angle=g.angle, - axis=g.axis, - phase=g.phase, + qubit=self.qubit_indices.index(gate.qubit.index), + axis=gate.axis, + angle=gate.angle, + phase=gate.phase, + name=gate.name, ) - def visit_matrix_gate(self, g: MatrixGate) -> MatrixGate: - reindexed_operands = [self.qubit_indices.index(op.index) for op in g.operands] - return MatrixGate(matrix=g.matrix, operands=reindexed_operands) + def visit_bsr_no_params(self, gate: BsrNoParams) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) - def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: - control_qubit = self.qubit_indices.index(controlled_gate.control_qubit.index) - target_gate = controlled_gate.target_gate.accept(self) + def visit_bsr_full_params(self, gate: BsrFullParams) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> BlochSphereRotation: + return self.visit_bloch_sphere_rotation(gate) + + def visit_matrix_gate(self, gate: MatrixGate) -> MatrixGate: + reindexed_operands = [self.qubit_indices.index(op.index) for op in gate.operands] + return MatrixGate(matrix=gate.matrix, operands=reindexed_operands) + + def visit_swap(self, gate: SWAP) -> MatrixGate: + return self.visit_matrix_gate(gate) + + def visit_controlled_gate(self, gate: ControlledGate) -> ControlledGate: + control_qubit = self.qubit_indices.index(gate.control_qubit.index) + target_gate = gate.target_gate.accept(self) return ControlledGate(control_qubit=control_qubit, target_gate=target_gate) + def visit_cnot(self, gate: CNOT) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_cz(self, gate: CZ) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_cr(self, gate: CR) -> ControlledGate: + return self.visit_controlled_gate(gate) + + def visit_crk(self, gate: CRk) -> ControlledGate: + return self.visit_controlled_gate(gate) + def get_reindexed_circuit( replacement_gates: Iterable[Gate], diff --git a/opensquirrel/utils/check_mapper.py b/opensquirrel/utils/check_mapper.py index cc2d3d05..73921c80 100644 --- a/opensquirrel/utils/check_mapper.py +++ b/opensquirrel/utils/check_mapper.py @@ -4,9 +4,8 @@ from copy import deepcopy -from opensquirrel import I from opensquirrel.circuit import Circuit -from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, Measure +from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, I, Measure from opensquirrel.passes.mapper.general_mapper import Mapper from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py index 649c046b..01085c7b 100644 --- a/opensquirrel/utils/matrix_expander.py +++ b/opensquirrel/utils/matrix_expander.py @@ -3,15 +3,24 @@ import cmath import math from collections.abc import Iterable +from typing import Any import numpy as np from numpy.typing import NDArray from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, Axis, AxisLike, BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, ControlledGate, + CRk, Gate, IRVisitor, MatrixGate, @@ -105,23 +114,32 @@ class MatrixExpander(IRVisitor): def __init__(self, qubit_register_size: int) -> None: self.qubit_register_size = qubit_register_size - def visit_bloch_sphere_rotation(self, rot: BlochSphereRotation) -> NDArray[np.complex128]: - if rot.qubit.index >= self.qubit_register_size: + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> NDArray[np.complex128]: + if gate.qubit.index >= self.qubit_register_size: msg = "index out of range" raise IndexError(msg) result = np.kron( np.kron( - np.eye(1 << (self.qubit_register_size - rot.qubit.index - 1)), - can1(rot.axis, rot.angle, rot.phase), + np.eye(1 << (self.qubit_register_size - gate.qubit.index - 1)), + can1(gate.axis, gate.angle, gate.phase), ), - np.eye(1 << rot.qubit.index), + np.eye(1 << gate.qubit.index), ) if result.shape != (1 << self.qubit_register_size, 1 << self.qubit_register_size): msg = "result has incorrect shape" ValueError(msg) return np.asarray(result, dtype=np.complex128) + def visit_bsr_no_params(self, gate: BsrNoParams) -> NDArray[np.complex128]: + return self.visit_bloch_sphere_rotation(gate) + + def visit_bsr_full_params(self, gate: BsrFullParams) -> NDArray[np.complex128]: + return self.visit_bloch_sphere_rotation(gate) + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> NDArray[np.complex128]: + return self.visit_bloch_sphere_rotation(gate) + def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: if gate.control_qubit.index >= self.qubit_register_size: msg = "index out of range" @@ -134,6 +152,18 @@ def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: col[col_index] = 1 return np.asarray(expanded_matrix, dtype=np.complex128) + def visit_cnot(self, gate: CNOT) -> Any: + return self.visit_controlled_gate(gate) + + def visit_cz(self, gate: CZ) -> Any: + return self.visit_controlled_gate(gate) + + def visit_cr(self, gate: CR) -> Any: + return self.visit_controlled_gate(gate) + + def visit_crk(self, gate: CRk) -> Any: + return self.visit_controlled_gate(gate) + def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: # The convention is to write gate matrices with operands reversed. # For instance, the first operand of CNOT is the control qubit, and this is written as @@ -142,7 +172,7 @@ def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: # 0, 0, 0, 1 # 0, 0, 1, 0 # which corresponds to control being q[1] and target being q[0], - # since qubit #i corresponds to the i-th LEAST significant bit. + # since qubit #i corresponds to the i-th least significant bit. qubit_operands = list(reversed(gate.operands)) if any(q.index >= self.qubit_register_size for q in qubit_operands): @@ -172,6 +202,9 @@ def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: raise ValueError(msg) return expanded_matrix + def visit_swap(self, gate: SWAP) -> NDArray[np.complex128]: + return self.visit_matrix_gate(gate) + X = np.array([[0, 1], [1, 0]]) Y = np.array([[0, -1j], [1j, 0]]) diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py index e6822ba8..706fbabd 100644 --- a/opensquirrel/writer/writer.py +++ b/opensquirrel/writer/writer.py @@ -1,16 +1,32 @@ -import inspect -from typing import SupportsFloat, SupportsInt +from typing import Any, SupportsFloat, SupportsInt from opensquirrel.circuit import Circuit from opensquirrel.ir import ( + CNOT, + CR, + CZ, + SWAP, + AsmDeclaration, + Barrier, Bit, + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + CRk, Float, Gate, + Init, Int, IRVisitor, - NonUnitary, + MatrixGate, + Measure, Qubit, - QubitLike, + Reset, + String, + SupportsStr, + Wait, ) from opensquirrel.register_manager import RegisterManager @@ -33,6 +49,18 @@ def __init__(self, register_manager: RegisterManager) -> None: (f"bit[{bit_register_size}] {bit_register_name}" if bit_register_size > 0 else ""), ) + def visit_str(self, s: SupportsStr) -> str: + s = String(s) + return f"{s.value}" + + def visit_float(self, f: SupportsFloat) -> str: + f = Float(f) + return f"{f.value:.{self.FLOAT_PRECISION}}" + + def visit_int(self, i: SupportsInt) -> str: + i = Int(i) + return f"{i.value}" + def visit_bit(self, bit: Bit) -> str: bit_register_name = self.register_manager.get_bit_register_name() return f"{bit_register_name}[{bit.index}]" @@ -41,52 +69,93 @@ def visit_qubit(self, qubit: Qubit) -> str: qubit_register_name = self.register_manager.get_qubit_register_name() return f"{qubit_register_name}[{qubit.index}]" - def visit_int(self, i: SupportsInt) -> str: - i = Int(i) - return f"{i.value}" - - def visit_float(self, f: SupportsFloat) -> str: - f = Float(f) - return f"{f.value:.{self.FLOAT_PRECISION}}" - - def visit_non_unitary(self, non_unitary: NonUnitary) -> None: - output_instruction = non_unitary.name - qubit_argument = non_unitary.arguments[0].accept(self) # type: ignore[index] - if non_unitary.name == "measure": - bit_argument = non_unitary.arguments[1].accept(self) # type: ignore[index] - output_instruction = f"{bit_argument} = {non_unitary.name}" - else: - params = [param.accept(self) for param in non_unitary.arguments[1::]] # type: ignore[index] - if params: - output_instruction = f"{non_unitary.name}({', '.join(params)})" - self.output += f"{output_instruction} {qubit_argument}\n" + def visit_asm_declaration(self, asm_declaration: AsmDeclaration) -> None: + backend_name = asm_declaration.backend_name.accept(self) + backend_code = asm_declaration.backend_code.accept(self) + self.output += f"asm({backend_name}) '''{backend_code}'''\n" def visit_gate(self, gate: Gate) -> None: - gate_name = gate.name - gate_generator = [] - if gate.generator is not None: - gate_generator = list(inspect.signature(gate.generator).parameters.keys()) - qubit_function_keys = ["target", "control", "qubit", "qubit0", "qubit1"] - if gate.is_anonymous: - if "MatrixGate" in gate_name: - # In the case of a MatrixGate the newlines should be removed from the array - # such that the array is printed on a single line. - gate_name = gate_name.replace("\n", "") - self.output += f"{gate_name}\n" - return - - params = [] - qubit_args = [] - if gate.arguments is not None: - for arg in gate.arguments: - pos = gate.arguments.index(arg) - if gate_generator[pos] not in qubit_function_keys: - params.append(arg.accept(self)) - gate_name += f"({', '.join(params)})" - elif gate_generator[pos] in qubit_function_keys and isinstance(arg, QubitLike.__args__): # type: ignore[attr-defined] - qubit_args.append(Qubit(arg).accept(self)) - - self.output += f"{gate_name} {', '.join(qubit_args)}\n" + if gate.name == "Gate": + self.output += f"{gate}\n" + + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: + if gate.name == "BlochSphereRotation": + self.output += f"{gate}\n" + + def visit_bsr_no_params(self, gate: BsrNoParams) -> None: + qubit_operand = gate.qubit.accept(self) + self.output += f"{gate.name} {qubit_operand}\n" + + def visit_bsr_full_params(self, gate: BsrFullParams) -> None: + nx = gate.nx.accept(self) + ny = gate.ny.accept(self) + nz = gate.nz.accept(self) + theta_argument = gate.theta.accept(self) + phi_argument = gate.phi.accept(self) + qubit_operand = gate.qubit.accept(self) + self.output += f"{gate.name}({nx}, {ny}, {nz}, {theta_argument}, {phi_argument}) {qubit_operand}\n" + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: + theta_argument = gate.theta.accept(self) + qubit_operand = gate.qubit.accept(self) + self.output += f"{gate.name}({theta_argument}) {qubit_operand}\n" + + def visit_matrix_gate(self, gate: MatrixGate) -> None: + if gate.name == "MatrixGate": + self.output += f"{gate}\n" + + def visit_swap(self, gate: SWAP) -> Any: + qubit_operand_0 = gate.qubit_0.accept(self) + qubit_operand_1 = gate.qubit_1.accept(self) + self.output += f"SWAP {qubit_operand_0}, {qubit_operand_1}\n" + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + if gate.name == "ControlledGate": + self.output += f"{gate}\n" + + def visit_cnot(self, gate: CNOT) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"CNOT {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_cz(self, gate: CZ) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"CZ {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_cr(self, gate: CR) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + theta_argument = gate.theta.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"CR({theta_argument}) {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_crk(self, gate: CRk) -> None: + control_qubit_operand = gate.control_qubit.accept(self) + k_argument = gate.k.accept(self) + target_qubit_operand = gate.target_qubit.accept(self) + self.output += f"CRk({k_argument}) {control_qubit_operand}, {target_qubit_operand}\n" + + def visit_measure(self, measure: Measure) -> None: + qubit_operand = measure.qubit.accept(self) + bit_operand = measure.bit.accept(self) + self.output += f"{bit_operand} = measure {qubit_operand}\n" + + def visit_init(self, init: Init) -> None: + qubit_operand = init.qubit.accept(self) + self.output += f"init {qubit_operand}\n" + + def visit_reset(self, reset: Reset) -> None: + qubit_operand = reset.qubit.accept(self) + self.output += f"reset {qubit_operand}\n" + + def visit_barrier(self, barrier: Barrier) -> None: + qubit_operand = barrier.qubit.accept(self) + self.output += f"barrier {qubit_operand}\n" + + def visit_wait(self, wait: Wait) -> None: + time_parameter = wait.time.accept(self) + qubit_operand = wait.qubit.accept(self) + self.output += f"wait({time_parameter}) {qubit_operand}\n" def circuit_to_string(circuit: Circuit) -> str: diff --git a/poetry.lock b/poetry.lock index 6838ac3e..e45def8b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,16 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "adaptive" -version = "1.3.1" +version = "1.3.2" description = "Parallel active learning of mathematical functions" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "adaptive-1.3.1-py3-none-any.whl", hash = "sha256:719362bc7215d631abd9ee307a362dabbfd31a35befdd51d006203b1a85b486f"}, - {file = "adaptive-1.3.1.tar.gz", hash = "sha256:0bfcc906b7381c837148b8e129d98f346a33e7cf805478e10174f62c4011253a"}, + {file = "adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637"}, + {file = "adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294"}, ] [package.dependencies] @@ -22,7 +24,7 @@ versioningit = "*" [package.extras] notebook = ["bokeh", "holoviews (>=1.9.1)", "ipykernel (>=4.8.0)", "ipython", "ipywidgets", "jupyter-client (>=5.2.2)", "matplotlib", "pandas", "plotly"] -other = ["dill", "distributed", "ipyparallel (>=6.2.5)", "pexpect", "wexpect"] +other = ["dill", "distributed", "ipyparallel (>=6.2.5)", "pexpect ; os_name != \"nt\"", "wexpect ; os_name == \"nt\""] testing = ["flaky", "pre-commit", "pytest", "pytest-cov", "pytest-randomly", "pytest-timeout", "typeguard"] [[package]] @@ -31,6 +33,8 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -38,13 +42,14 @@ files = [ [[package]] name = "anyio" -version = "4.8.0" +version = "4.9.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" +groups = ["examples"] files = [ - {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, - {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, ] [package.dependencies] @@ -54,8 +59,8 @@ sniffio = ">=1.1" typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -64,10 +69,12 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["examples", "export"] files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] +markers = {examples = "platform_system == \"Darwin\"", export = "python_version < \"3.10\""} [[package]] name = "argon2-cffi" @@ -75,6 +82,7 @@ version = "23.1.0" description = "Argon2 for Python" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, @@ -95,6 +103,7 @@ version = "21.2.0" description = "Low-level CFFI bindings for Argon2" optional = false python-versions = ">=3.6" +groups = ["examples"] files = [ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, @@ -132,6 +141,7 @@ version = "1.3.0" description = "Better dates & times for Python" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, @@ -151,6 +161,8 @@ version = "0.3.3" description = "Draws ASCII trees." optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e"}, ] @@ -161,6 +173,8 @@ version = "1.0.6" description = "Safe, minimalistic evaluator of python expression using ast module" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc"}, {file = "asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f"}, @@ -178,10 +192,12 @@ version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" +groups = ["dev", "examples", "export"] files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] astroid = ["astroid (>=2,<4)"] @@ -189,64 +205,90 @@ test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "async-lru" -version = "2.0.4" +version = "2.0.5" description = "Simple LRU cache for asyncio" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["examples"] files = [ - {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, - {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, + {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, + {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, ] [package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "25.1.0" +version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ - {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, - {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "babel" -version = "2.16.0" +version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["docs", "examples"] files = [ - {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, - {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, ] [package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + +[[package]] +name = "backrefs" +version = "5.8" +description = "A wrapper around re and regex that adds additional back references." +optional = false +python-versions = ">=3.9" +groups = ["docs"] +files = [ + {file = "backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d"}, + {file = "backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b"}, + {file = "backrefs-5.8-py312-none-any.whl", hash = "sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486"}, + {file = "backrefs-5.8-py313-none-any.whl", hash = "sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585"}, + {file = "backrefs-5.8-py39-none-any.whl", hash = "sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc"}, + {file = "backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd"}, +] + +[package.extras] +extras = ["regex"] [[package]] name = "beautifulsoup4" -version = "4.12.3" +version = "4.13.3" description = "Screen-scraping library" optional = false -python-versions = ">=3.6.0" +python-versions = ">=3.7.0" +groups = ["examples", "export"] files = [ - {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, - {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, + {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, + {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] soupsieve = ">1.2" +typing-extensions = ">=4.0.0" [package.extras] cchardet = ["cchardet"] @@ -261,6 +303,7 @@ version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.9" +groups = ["examples"] files = [ {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, @@ -279,6 +322,8 @@ version = "0.14.0" description = "Package for easily generating and manipulating signal pulses." optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7"}, {file = "broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c"}, @@ -296,25 +341,28 @@ test = ["black (>=22.3.0)", "coverage[toml] (>=6.2)", "hypothesis (>=5.49.0)", " [[package]] name = "cachetools" -version = "5.5.1" +version = "5.5.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ - {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, - {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, + {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, + {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, ] [[package]] name = "certifi" -version = "2024.12.14" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["docs", "examples", "export"] files = [ - {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, - {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "cf-xarray" @@ -322,6 +370,8 @@ version = "0.9.4" description = "A convenience wrapper for using CF attributes on xarray objects" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "cf_xarray-0.9.4-py3-none-any.whl", hash = "sha256:9f7acf73fe14bed66680bdb135682656ea8451e1f6c59221bc31a912b62ea46a"}, {file = "cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb"}, @@ -339,6 +389,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -408,6 +459,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {export = "python_version < \"3.10\" and implementation_name == \"pypy\""} [package.dependencies] pycparser = "*" @@ -418,6 +470,8 @@ version = "1.6.4.post1" description = "Time-handling functionality from netcdf4-python" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "cftime-1.6.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0baa9bc4850929da9f92c25329aa1f651e2d6f23e237504f337ee9e12a769f5d"}, {file = "cftime-1.6.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bb6b087f4b2513c37670bccd457e2a666ca489c5f2aad6e2c0e94604dc1b5b9"}, @@ -466,6 +520,7 @@ version = "5.2.0" description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, @@ -477,6 +532,7 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["docs", "examples", "export"] files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -571,6 +627,7 @@ files = [ {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "click" @@ -578,10 +635,12 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["docs", "export"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -592,6 +651,8 @@ version = "3.1.1" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, @@ -603,10 +664,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "docs", "examples", "export"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {examples = "sys_platform == \"win32\"", export = "python_version < \"3.10\" and platform_system == \"Windows\" or sys_platform == \"win32\" and python_version < \"3.11\""} [[package]] name = "columnar" @@ -614,6 +677,8 @@ version = "1.4.1" description = "A tool for printing data in a columnar format." optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798"}, {file = "Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72"}, @@ -629,10 +694,12 @@ version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] traitlets = ">=4" @@ -646,6 +713,8 @@ version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, @@ -726,80 +795,82 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.10" +version = "7.8.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" -files = [ - {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, - {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165"}, - {file = "coverage-7.6.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3"}, - {file = "coverage-7.6.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5"}, - {file = "coverage-7.6.10-cp310-cp310-win32.whl", hash = "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244"}, - {file = "coverage-7.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3"}, - {file = "coverage-7.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f"}, - {file = "coverage-7.6.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd"}, - {file = "coverage-7.6.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377"}, - {file = "coverage-7.6.10-cp311-cp311-win32.whl", hash = "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8"}, - {file = "coverage-7.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853"}, - {file = "coverage-7.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50"}, - {file = "coverage-7.6.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0"}, - {file = "coverage-7.6.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852"}, - {file = "coverage-7.6.10-cp312-cp312-win32.whl", hash = "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359"}, - {file = "coverage-7.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9"}, - {file = "coverage-7.6.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18"}, - {file = "coverage-7.6.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e"}, - {file = "coverage-7.6.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694"}, - {file = "coverage-7.6.10-cp313-cp313-win32.whl", hash = "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6"}, - {file = "coverage-7.6.10-cp313-cp313-win_amd64.whl", hash = "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe"}, - {file = "coverage-7.6.10-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098"}, - {file = "coverage-7.6.10-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf"}, - {file = "coverage-7.6.10-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2"}, - {file = "coverage-7.6.10-cp313-cp313t-win32.whl", hash = "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312"}, - {file = "coverage-7.6.10-cp313-cp313t-win_amd64.whl", hash = "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a"}, - {file = "coverage-7.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f"}, - {file = "coverage-7.6.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90"}, - {file = "coverage-7.6.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d"}, - {file = "coverage-7.6.10-cp39-cp39-win32.whl", hash = "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18"}, - {file = "coverage-7.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59"}, - {file = "coverage-7.6.10-pp39.pp310-none-any.whl", hash = "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f"}, - {file = "coverage-7.6.10.tar.gz", hash = "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23"}, +groups = ["dev"] +files = [ + {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, + {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f"}, + {file = "coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f"}, + {file = "coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9"}, + {file = "coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c"}, + {file = "coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe"}, + {file = "coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545"}, + {file = "coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3"}, + {file = "coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d"}, + {file = "coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883"}, + {file = "coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada"}, + {file = "coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899"}, + {file = "coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f"}, + {file = "coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3"}, + {file = "coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd"}, + {file = "coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7"}, + {file = "coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501"}, ] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] -toml = ["tomli"] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "cycler" @@ -807,6 +878,8 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -822,6 +895,8 @@ version = "2024.8.0" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309"}, {file = "dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee"}, @@ -851,6 +926,8 @@ version = "0.6.7" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, @@ -862,66 +939,72 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "debugpy" -version = "1.8.12" +version = "1.8.13" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" -files = [ - {file = "debugpy-1.8.12-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:a2ba7ffe58efeae5b8fad1165357edfe01464f9aef25e814e891ec690e7dd82a"}, - {file = "debugpy-1.8.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbbd4149c4fc5e7d508ece083e78c17442ee13b0e69bfa6bd63003e486770f45"}, - {file = "debugpy-1.8.12-cp310-cp310-win32.whl", hash = "sha256:b202f591204023b3ce62ff9a47baa555dc00bb092219abf5caf0e3718ac20e7c"}, - {file = "debugpy-1.8.12-cp310-cp310-win_amd64.whl", hash = "sha256:9649eced17a98ce816756ce50433b2dd85dfa7bc92ceb60579d68c053f98dff9"}, - {file = "debugpy-1.8.12-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:36f4829839ef0afdfdd208bb54f4c3d0eea86106d719811681a8627ae2e53dd5"}, - {file = "debugpy-1.8.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28ed481d530e3138553be60991d2d61103ce6da254e51547b79549675f539b7"}, - {file = "debugpy-1.8.12-cp311-cp311-win32.whl", hash = "sha256:4ad9a94d8f5c9b954e0e3b137cc64ef3f579d0df3c3698fe9c3734ee397e4abb"}, - {file = "debugpy-1.8.12-cp311-cp311-win_amd64.whl", hash = "sha256:4703575b78dd697b294f8c65588dc86874ed787b7348c65da70cfc885efdf1e1"}, - {file = "debugpy-1.8.12-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:7e94b643b19e8feb5215fa508aee531387494bf668b2eca27fa769ea11d9f498"}, - {file = "debugpy-1.8.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086b32e233e89a2740c1615c2f775c34ae951508b28b308681dbbb87bba97d06"}, - {file = "debugpy-1.8.12-cp312-cp312-win32.whl", hash = "sha256:2ae5df899732a6051b49ea2632a9ea67f929604fd2b036613a9f12bc3163b92d"}, - {file = "debugpy-1.8.12-cp312-cp312-win_amd64.whl", hash = "sha256:39dfbb6fa09f12fae32639e3286112fc35ae976114f1f3d37375f3130a820969"}, - {file = "debugpy-1.8.12-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:696d8ae4dff4cbd06bf6b10d671e088b66669f110c7c4e18a44c43cf75ce966f"}, - {file = "debugpy-1.8.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898fba72b81a654e74412a67c7e0a81e89723cfe2a3ea6fcd3feaa3395138ca9"}, - {file = "debugpy-1.8.12-cp313-cp313-win32.whl", hash = "sha256:22a11c493c70413a01ed03f01c3c3a2fc4478fc6ee186e340487b2edcd6f4180"}, - {file = "debugpy-1.8.12-cp313-cp313-win_amd64.whl", hash = "sha256:fdb3c6d342825ea10b90e43d7f20f01535a72b3a1997850c0c3cefa5c27a4a2c"}, - {file = "debugpy-1.8.12-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:b0232cd42506d0c94f9328aaf0d1d0785f90f87ae72d9759df7e5051be039738"}, - {file = "debugpy-1.8.12-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9af40506a59450f1315168d47a970db1a65aaab5df3833ac389d2899a5d63b3f"}, - {file = "debugpy-1.8.12-cp38-cp38-win32.whl", hash = "sha256:5cc45235fefac57f52680902b7d197fb2f3650112379a6fa9aa1b1c1d3ed3f02"}, - {file = "debugpy-1.8.12-cp38-cp38-win_amd64.whl", hash = "sha256:557cc55b51ab2f3371e238804ffc8510b6ef087673303890f57a24195d096e61"}, - {file = "debugpy-1.8.12-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:b5c6c967d02fee30e157ab5227706f965d5c37679c687b1e7bbc5d9e7128bd41"}, - {file = "debugpy-1.8.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a77f422f31f170c4b7e9ca58eae2a6c8e04da54121900651dfa8e66c29901a"}, - {file = "debugpy-1.8.12-cp39-cp39-win32.whl", hash = "sha256:a4042edef80364239f5b7b5764e55fd3ffd40c32cf6753da9bda4ff0ac466018"}, - {file = "debugpy-1.8.12-cp39-cp39-win_amd64.whl", hash = "sha256:f30b03b0f27608a0b26c75f0bb8a880c752c0e0b01090551b9d87c7d783e2069"}, - {file = "debugpy-1.8.12-py2.py3-none-any.whl", hash = "sha256:274b6a2040349b5c9864e475284bce5bb062e63dce368a394b8cc865ae3b00c6"}, - {file = "debugpy-1.8.12.tar.gz", hash = "sha256:646530b04f45c830ceae8e491ca1c9320a2d2f0efea3141487c82130aba70dce"}, -] +groups = ["examples", "export"] +files = [ + {file = "debugpy-1.8.13-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90"}, + {file = "debugpy-1.8.13-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520"}, + {file = "debugpy-1.8.13-cp310-cp310-win32.whl", hash = "sha256:46abe0b821cad751fc1fb9f860fb2e68d75e2c5d360986d0136cd1db8cad4428"}, + {file = "debugpy-1.8.13-cp310-cp310-win_amd64.whl", hash = "sha256:dc7b77f5d32674686a5f06955e4b18c0e41fb5a605f5b33cf225790f114cfeec"}, + {file = "debugpy-1.8.13-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:eee02b2ed52a563126c97bf04194af48f2fe1f68bb522a312b05935798e922ff"}, + {file = "debugpy-1.8.13-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4caca674206e97c85c034c1efab4483f33971d4e02e73081265ecb612af65377"}, + {file = "debugpy-1.8.13-cp311-cp311-win32.whl", hash = "sha256:7d9a05efc6973b5aaf076d779cf3a6bbb1199e059a17738a2aa9d27a53bcc888"}, + {file = "debugpy-1.8.13-cp311-cp311-win_amd64.whl", hash = "sha256:62f9b4a861c256f37e163ada8cf5a81f4c8d5148fc17ee31fb46813bd658cdcc"}, + {file = "debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1"}, + {file = "debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522"}, + {file = "debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f"}, + {file = "debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea"}, + {file = "debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503"}, + {file = "debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb"}, + {file = "debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02"}, + {file = "debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8"}, + {file = "debugpy-1.8.13-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:acf39a6e98630959763f9669feddee540745dfc45ad28dbc9bd1f9cd60639391"}, + {file = "debugpy-1.8.13-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:924464d87e7d905eb0d79fb70846558910e906d9ee309b60c4fe597a2e802590"}, + {file = "debugpy-1.8.13-cp38-cp38-win32.whl", hash = "sha256:3dae443739c6b604802da9f3e09b0f45ddf1cf23c99161f3a1a8039f61a8bb89"}, + {file = "debugpy-1.8.13-cp38-cp38-win_amd64.whl", hash = "sha256:ed93c3155fc1f888ab2b43626182174e457fc31b7781cd1845629303790b8ad1"}, + {file = "debugpy-1.8.13-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:6fab771639332bd8ceb769aacf454a30d14d7a964f2012bf9c4e04c60f16e85b"}, + {file = "debugpy-1.8.13-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b6857f8263a969ce2ca098f228e5cc0604d277447ec05911a8c46cf3e7e307"}, + {file = "debugpy-1.8.13-cp39-cp39-win32.whl", hash = "sha256:f14d2c4efa1809da125ca62df41050d9c7cd9cb9e380a2685d1e453c4d450ccb"}, + {file = "debugpy-1.8.13-cp39-cp39-win_amd64.whl", hash = "sha256:ea869fe405880327497e6945c09365922c79d2a1eed4c3ae04d77ac7ae34b2b5"}, + {file = "debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f"}, + {file = "debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce"}, +] +markers = {export = "python_version < \"3.10\""} [[package]] name = "decorator" -version = "5.1.1" +version = "5.2.1" description = "Decorators for Humans" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["dev", "examples", "export"] files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] +markers = {export = "python_version < \"3.11\""} [[package]] name = "deepdiff" -version = "8.1.1" +version = "8.4.1" description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "deepdiff-8.1.1-py3-none-any.whl", hash = "sha256:b0231fa3afb0f7184e82535f2b4a36636442ed21e94a0cf3aaa7982157e7ebca"}, - {file = "deepdiff-8.1.1.tar.gz", hash = "sha256:dd7bc7d5c8b51b5b90f01b0e2fe23c801fd8b4c6a7ee7e31c5a3c3663fcc7ceb"}, + {file = "deepdiff-8.4.1-py3-none-any.whl", hash = "sha256:c853011336f3b6bc0f48f1ef564656f84a2cd78fbc8ee5da2033a3e017f52e79"}, + {file = "deepdiff-8.4.1.tar.gz", hash = "sha256:b863d2552909160eccfeae2c9882bf1f75c69888499a04ca1597c706d12fe87f"}, ] [package.dependencies] -orderly-set = ">=5.2.3,<6" +orderly-set = ">=5.3.0,<6" [package.extras] -cli = ["click (==8.1.7)", "pyyaml (==6.0.2)"] +cli = ["click (==8.1.8)", "pyyaml (==6.0.2)"] optimize = ["orjson"] [[package]] @@ -930,6 +1013,7 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["examples"] files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -941,6 +1025,8 @@ version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, @@ -950,7 +1036,7 @@ files = [ wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "dill" @@ -958,6 +1044,8 @@ version = "0.3.9" description = "serialize all of Python" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, @@ -973,6 +1061,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -984,6 +1073,8 @@ version = "0.9.0" description = "Jazzband-maintained fork of docopt, the humane command line arguments parser." optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9"}, {file = "docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7"}, @@ -995,6 +1086,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev", "examples", "export"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1009,13 +1102,15 @@ version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["dev", "examples", "export"] files = [ {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] [[package]] name = "fasteners" @@ -1023,6 +1118,8 @@ version = "0.19" description = "A python package that provides useful locks" optional = false python-versions = ">=3.6" +groups = ["export"] +markers = "python_version < \"3.10\" and sys_platform != \"emscripten\"" files = [ {file = "fasteners-0.19-py3-none-any.whl", hash = "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237"}, {file = "fasteners-0.19.tar.gz", hash = "sha256:b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c"}, @@ -1034,102 +1131,108 @@ version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" +groups = ["examples", "export"] files = [ {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] [[package]] name = "filelock" -version = "3.17.0" +version = "3.18.0" description = "A platform independent file lock." optional = false python-versions = ">=3.9" +groups = ["main", "dev", "export"] files = [ - {file = "filelock-3.17.0-py3-none-any.whl", hash = "sha256:533dc2f7ba78dc2f0f531fc6c4940addf7b70a481e269a5a3b93be94ffbe8338"}, - {file = "filelock-3.17.0.tar.gz", hash = "sha256:ee4e77401ef576ebb38cd7f13b9b28893194acc20a8e68e18730ba9c0e54660e"}, + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "fonttools" -version = "4.55.7" +version = "4.56.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" -files = [ - {file = "fonttools-4.55.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c2680a3e6e2e2d104a7ea81fb89323e1a9122c23b03d6569d0768887d0d76e69"}, - {file = "fonttools-4.55.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7831d16c95b60866772a15fdcc03772625c4bb6d858e0ad8ef3d6e48709b2ef"}, - {file = "fonttools-4.55.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:833927d089e6585019f2c85e3f8f7d87733e3fe81cd704ebaca7afa27e2e7113"}, - {file = "fonttools-4.55.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7858dc6823296a053d85b831fa8428781c6c6f06fca44582bf7b6b2ff32a9089"}, - {file = "fonttools-4.55.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:05568a66b090ed9d79aefdce2ceb180bb64fc856961deaedc29f5ad51355ce2c"}, - {file = "fonttools-4.55.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2dbc08e227fbeb716776905a7bd3c4fc62c8e37c8ef7d481acd10cb5fde12222"}, - {file = "fonttools-4.55.7-cp310-cp310-win32.whl", hash = "sha256:6eb93cbba484a463b5ee83f7dd3211905f27a3871d20d90fb72de84c6c5056e3"}, - {file = "fonttools-4.55.7-cp310-cp310-win_amd64.whl", hash = "sha256:7ff8e606f905048dc91a55a06d994b68065bf35752ae199df54a9bf30013dcaa"}, - {file = "fonttools-4.55.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:916e1d926823b4b3b3815c59fc79f4ed670696fdd5fd9a5e690a0503eef38f79"}, - {file = "fonttools-4.55.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b89da448e0073408d7b2c44935f9fdae4fdc93644899f99f6102ef883ecf083c"}, - {file = "fonttools-4.55.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087ace2d06894ccdb03e6975d05da6bb9cec0c689b2a9983c059880e33a1464a"}, - {file = "fonttools-4.55.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775ed0700ee6f781436641f18a0c61b1846a8c1aecae6da6b395c4417e2cb567"}, - {file = "fonttools-4.55.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9ec71d0cc0242899f87e4c230ed0b22c7b8681f288fb80e3d81c2c54c5bd2c79"}, - {file = "fonttools-4.55.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d4b1c5939c0521525f45522823508e6fad21175bca978583688ea3b3736e6625"}, - {file = "fonttools-4.55.7-cp311-cp311-win32.whl", hash = "sha256:23df0f1003abaf8a435543f59583fc247e7ae1b047ee2263510e0654a5f207e0"}, - {file = "fonttools-4.55.7-cp311-cp311-win_amd64.whl", hash = "sha256:82163d58b43eff6e2025a25c32905fdb9042a163cc1ff82dab393e7ffc77a7d5"}, - {file = "fonttools-4.55.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:12e81d44f762156d28b5c93a6b65d98ed73678be45b22546de8ed29736c3cb96"}, - {file = "fonttools-4.55.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c26445a7be689f8b70df7d5d2e2c85ec4407bdb769902a23dd45ac44f767575d"}, - {file = "fonttools-4.55.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2cbafedb9462be7cf68c66b6ca1d8309842fe36b729f1b1969595f5d660e5c2"}, - {file = "fonttools-4.55.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4bde87985012adbd7559bc363d802fb335e92a07ff86a76cf02bebb0b8566d1"}, - {file = "fonttools-4.55.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:69ed0660750993150f7c4d966c0c1ffaa0385f23ccef85c2ff108062d80dd7ea"}, - {file = "fonttools-4.55.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3098355e7a7b5ac48d5dc29684a65271187b865b85675033958b57c40364ee34"}, - {file = "fonttools-4.55.7-cp312-cp312-win32.whl", hash = "sha256:ee7aa8bb716318e3d835ef473978e22b7a39c0f1b3b08cc0b0ee1bba6f73bc1e"}, - {file = "fonttools-4.55.7-cp312-cp312-win_amd64.whl", hash = "sha256:e696d6e2baf4cc57ded34bb87e5d3a9e4da9732f3d9e8e2c6db0746e57a6dc0b"}, - {file = "fonttools-4.55.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e10c7fb80cdfdc32244514cbea0906e9f53e3cc80d64d3389da09502fd999b55"}, - {file = "fonttools-4.55.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1101976c703ff4008a928fc3fef42caf06d035bfc4614230d7e797cbe356feb0"}, - {file = "fonttools-4.55.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6dffe9cbcd163ef617fab1f81682e4d1629b7a5b9c5e598274dc2d03e88bcd"}, - {file = "fonttools-4.55.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e5115a425d53be6e31cd0fe9210f62a488bccf81eb113ab5dd7f4fa88e4d81"}, - {file = "fonttools-4.55.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f0c45eae32d090763820756b18322a70571dada3f1cbe003debc37a9c35bc260"}, - {file = "fonttools-4.55.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd4ebc475d43f3de2b26e0cf551eff92c24e22d1aee03dc1b33adb52fc2e6cb2"}, - {file = "fonttools-4.55.7-cp313-cp313-win32.whl", hash = "sha256:371197de1283cc99f5f10eb91496520eb0e2d079312d014fd6cef9e802174c6a"}, - {file = "fonttools-4.55.7-cp313-cp313-win_amd64.whl", hash = "sha256:418ece624fbc04e199f58398ffef3eaad645baba65434871b09eb7350a3a346b"}, - {file = "fonttools-4.55.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3976db357484bf4cb533dfd0d1a444b38ad06062458715ebf21e38c71aff325d"}, - {file = "fonttools-4.55.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:30c3501328363b73a90acc8a722dd199c993f2c4369ea16886128d94e91897ec"}, - {file = "fonttools-4.55.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0899cd23967950e7b902ea75af06cfe5f59ac71eb38e98a774c9e596790e6aa"}, - {file = "fonttools-4.55.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f669910b64d27750398f6c56c651367d4954b05c86ff067af1c9949e109cf1e2"}, - {file = "fonttools-4.55.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1d4be8354c245c00aecfc90f5d3da8606226f0ac22e1cb0837b39139e4c2df85"}, - {file = "fonttools-4.55.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9074a2848ea5b607377e16998dfcf90cf5eb614d0c388541b9782d5cc038e149"}, - {file = "fonttools-4.55.7-cp38-cp38-win32.whl", hash = "sha256:5ff0daf8b2e0612e5761fed2e4a2f54eff9d9ec0aeb4091c9f3666f9a118325e"}, - {file = "fonttools-4.55.7-cp38-cp38-win_amd64.whl", hash = "sha256:0ed25d7b5fa4ae6a805c2a9cc0e5307d45cbb3b8e155584fe932d0f3b6a997bf"}, - {file = "fonttools-4.55.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ef5ee98fc320c158e4e459a5ee40d1ac3728d4ce11c3c8dfd854aa0aa5c042f"}, - {file = "fonttools-4.55.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09740feed51f9ed816aebf5d82071b7fecf693ac3a7e0fc8ea433f5dc3bd92f5"}, - {file = "fonttools-4.55.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3d19ea483b3cd8833e9e2ee8115f3d2044d55d3743d84f9c23b48b52d7516d8"}, - {file = "fonttools-4.55.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c135c91d47351b84893fb6fcbb8f178eba14f7cb195850264c0675c85e4238b6"}, - {file = "fonttools-4.55.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bee4920ebeb540849bc3555d871e2a8487e39ce8263c281f74d5b6d44d2bf1df"}, - {file = "fonttools-4.55.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f3b63648600dd0081bdd6856a86d014a7f1d2d11c3c974542f866478d832e103"}, - {file = "fonttools-4.55.7-cp39-cp39-win32.whl", hash = "sha256:d4bd27f0fa5120aaa39f76de5768959bc97300e0f59a3160d466b51436a38aea"}, - {file = "fonttools-4.55.7-cp39-cp39-win_amd64.whl", hash = "sha256:c665df9c9d99937a5bf807bace1c0c95bd13f55de8c82aaf9856b868dcbfe5d9"}, - {file = "fonttools-4.55.7-py3-none-any.whl", hash = "sha256:3304dfcf9ca204dd0ef691a287bd851ddd8e8250108658c0677c3fdfec853a20"}, - {file = "fonttools-4.55.7.tar.gz", hash = "sha256:6899e3d97225a8218f525e9754da0376e1c62953a0d57a76c5abaada51e0d140"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:331954d002dbf5e704c7f3756028e21db07097c19722569983ba4d74df014000"}, + {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d1613abd5af2f93c05867b3a3759a56e8bf97eb79b1da76b2bc10892f96ff16"}, + {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:705837eae384fe21cee5e5746fd4f4b2f06f87544fa60f60740007e0aa600311"}, + {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc871904a53a9d4d908673c6faa15689874af1c7c5ac403a8e12d967ebd0c0dc"}, + {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:38b947de71748bab150259ee05a775e8a0635891568e9fdb3cdd7d0e0004e62f"}, + {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:86b2a1013ef7a64d2e94606632683f07712045ed86d937c11ef4dde97319c086"}, + {file = "fonttools-4.56.0-cp310-cp310-win32.whl", hash = "sha256:133bedb9a5c6376ad43e6518b7e2cd2f866a05b1998f14842631d5feb36b5786"}, + {file = "fonttools-4.56.0-cp310-cp310-win_amd64.whl", hash = "sha256:17f39313b649037f6c800209984a11fc256a6137cbe5487091c6c7187cae4685"}, + {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ef04bc7827adb7532be3d14462390dd71287644516af3f1e67f1e6ff9c6d6df"}, + {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ffda9b8cd9cb8b301cae2602ec62375b59e2e2108a117746f12215145e3f786c"}, + {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e993e8db36306cc3f1734edc8ea67906c55f98683d6fd34c3fc5593fdbba4c"}, + {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003548eadd674175510773f73fb2060bb46adb77c94854af3e0cc5bc70260049"}, + {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd9825822e7bb243f285013e653f6741954d8147427aaa0324a862cdbf4cbf62"}, + {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b23d30a2c0b992fb1c4f8ac9bfde44b5586d23457759b6cf9a787f1a35179ee0"}, + {file = "fonttools-4.56.0-cp311-cp311-win32.whl", hash = "sha256:47b5e4680002ae1756d3ae3b6114e20aaee6cc5c69d1e5911f5ffffd3ee46c6b"}, + {file = "fonttools-4.56.0-cp311-cp311-win_amd64.whl", hash = "sha256:14a3e3e6b211660db54ca1ef7006401e4a694e53ffd4553ab9bc87ead01d0f05"}, + {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9"}, + {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f"}, + {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2"}, + {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563"}, + {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a"}, + {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28"}, + {file = "fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c"}, + {file = "fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba"}, + {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692"}, + {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0"}, + {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1"}, + {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea"}, + {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3"}, + {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278"}, + {file = "fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f"}, + {file = "fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6"}, + {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3fd3fccb7b9adaaecfa79ad51b759f2123e1aba97f857936ce044d4f029abd71"}, + {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:193b86e9f769320bc98ffdb42accafb5d0c8c49bd62884f1c0702bc598b3f0a2"}, + {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e81c1cc80c1d8bf071356cc3e0e25071fbba1c75afc48d41b26048980b3c771"}, + {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9270505a19361e81eecdbc2c251ad1e1a9a9c2ad75fa022ccdee533f55535dc"}, + {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53f5e9767978a4daf46f28e09dbeb7d010319924ae622f7b56174b777258e5ba"}, + {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9da650cb29bc098b8cfd15ef09009c914b35c7986c8fa9f08b51108b7bc393b4"}, + {file = "fonttools-4.56.0-cp38-cp38-win32.whl", hash = "sha256:965d0209e6dbdb9416100123b6709cb13f5232e2d52d17ed37f9df0cc31e2b35"}, + {file = "fonttools-4.56.0-cp38-cp38-win_amd64.whl", hash = "sha256:654ac4583e2d7c62aebc6fc6a4c6736f078f50300e18aa105d87ce8925cfac31"}, + {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ca7962e8e5fc047cc4e59389959843aafbf7445b6c08c20d883e60ced46370a5"}, + {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1af375734018951c31c0737d04a9d5fd0a353a0253db5fbed2ccd44eac62d8c"}, + {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:442ad4122468d0e47d83bc59d0e91b474593a8c813839e1872e47c7a0cb53b10"}, + {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf4f8d2a30b454ac682e12c61831dcb174950c406011418e739de592bbf8f76"}, + {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96a4271f63a615bcb902b9f56de00ea225d6896052c49f20d0c91e9f43529a29"}, + {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c1d38642ca2dddc7ae992ef5d026e5061a84f10ff2b906be5680ab089f55bb8"}, + {file = "fonttools-4.56.0-cp39-cp39-win32.whl", hash = "sha256:2d351275f73ebdd81dd5b09a8b8dac7a30f29a279d41e1c1192aedf1b6dced40"}, + {file = "fonttools-4.56.0-cp39-cp39-win_amd64.whl", hash = "sha256:d6ca96d1b61a707ba01a43318c9c40aaf11a5a568d1e61146fafa6ab20890793"}, + {file = "fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14"}, + {file = "fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] -type1 = ["xattr"] +type1 = ["xattr ; sys_platform == \"darwin\""] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] name = "fqdn" @@ -1137,6 +1240,7 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["examples"] files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -1144,13 +1248,15 @@ files = [ [[package]] name = "fsspec" -version = "2024.12.0" +version = "2025.3.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, - {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, + {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, + {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, ] [package.extras] @@ -1177,7 +1283,7 @@ sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] -test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] @@ -1187,6 +1293,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -1200,13 +1307,14 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "griffe" -version = "1.5.5" +version = "1.6.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "griffe-1.5.5-py3-none-any.whl", hash = "sha256:2761b1e8876c6f1f9ab1af274df93ea6bbadd65090de5f38f4cb5cc84897c7dd"}, - {file = "griffe-1.5.5.tar.gz", hash = "sha256:35ee5b38b93d6a839098aad0f92207e6ad6b70c3e8866c08ca669275b8cba585"}, + {file = "griffe-1.6.0-py3-none-any.whl", hash = "sha256:9f1dfe035d4715a244ed2050dfbceb05b1f470809ed4f6bb10ece5a7302f8dd1"}, + {file = "griffe-1.6.0.tar.gz", hash = "sha256:eb5758088b9c73ad61c7ac014f3cdfb4c57b5c2fcbfca69996584b702aefa354"}, ] [package.dependencies] @@ -1218,6 +1326,7 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1225,13 +1334,15 @@ files = [ [[package]] name = "h5netcdf" -version = "1.5.0" +version = "1.6.1" description = "netCDF4 via h5py" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "h5netcdf-1.5.0-py3-none-any.whl", hash = "sha256:1baca17d395e14cd06899d0334385c9a27e86baa4c6ff2fc51ac44fd210fd843"}, - {file = "h5netcdf-1.5.0.tar.gz", hash = "sha256:9d6c28147677bd075787881aadb24d2fdb0bc0319481bcb5d2a54dc4b94c4ba9"}, + {file = "h5netcdf-1.6.1-py3-none-any.whl", hash = "sha256:1ec75cabd6ab50c6e7109d0c6595eb2960ba0e79fef2257607ab80838d84e6f6"}, + {file = "h5netcdf-1.6.1.tar.gz", hash = "sha256:7ef4ecd811374d94d29ac5e7f7db71ff59b55ef8eeefbe4ccc2c316853d31894"}, ] [package.dependencies] @@ -1243,37 +1354,39 @@ test = ["netCDF4", "pytest"] [[package]] name = "h5py" -version = "3.12.1" +version = "3.13.0" description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.9" -files = [ - {file = "h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda"}, - {file = "h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3"}, - {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2"}, - {file = "h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307"}, - {file = "h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e"}, - {file = "h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93"}, - {file = "h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef"}, - {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e"}, - {file = "h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166"}, - {file = "h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4"}, - {file = "h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed"}, - {file = "h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351"}, - {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834"}, - {file = "h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9"}, - {file = "h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc"}, - {file = "h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc"}, - {file = "h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653"}, - {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32"}, - {file = "h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f"}, - {file = "h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8"}, - {file = "h5py-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2b8dd64f127d8b324f5d2cd1c0fd6f68af69084e9e47d27efeb9e28e685af3e"}, - {file = "h5py-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4532c7e97fbef3d029735db8b6f5bf01222d9ece41e309b20d63cfaae2fb5c4d"}, - {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdf6d7936fa824acfa27305fe2d9f39968e539d831c5bae0e0d83ed521ad1ac"}, - {file = "h5py-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84342bffd1f82d4f036433e7039e241a243531a1d3acd7341b35ae58cdab05bf"}, - {file = "h5py-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:62be1fc0ef195891949b2c627ec06bc8e837ff62d5b911b6e42e38e0f20a897d"}, - {file = "h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "h5py-3.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5540daee2b236d9569c950b417f13fd112d51d78b4c43012de05774908dff3f5"}, + {file = "h5py-3.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10894c55d46df502d82a7a4ed38f9c3fdbcb93efb42e25d275193e093071fade"}, + {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb267ce4b83f9c42560e9ff4d30f60f7ae492eacf9c7ede849edf8c1b860e16b"}, + {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2cf6a231a07c14acd504a945a6e9ec115e0007f675bde5e0de30a4dc8d86a31"}, + {file = "h5py-3.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:851ae3a8563d87a5a0dc49c2e2529c75b8842582ccaefbf84297d2cfceeacd61"}, + {file = "h5py-3.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a8e38ef4ceb969f832cc230c0cf808c613cc47e31e768fd7b1106c55afa1cb8"}, + {file = "h5py-3.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f35640e81b03c02a88b8bf99fb6a9d3023cc52f7c627694db2f379e0028f2868"}, + {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:337af114616f3656da0c83b68fcf53ecd9ce9989a700b0883a6e7c483c3235d4"}, + {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:782ff0ac39f455f21fd1c8ebc007328f65f43d56718a89327eec76677ebf238a"}, + {file = "h5py-3.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:22ffe2a25770a2d67213a1b94f58006c14dce06933a42d2aaa0318c5868d1508"}, + {file = "h5py-3.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:477c58307b6b9a2509c59c57811afb9f598aedede24a67da808262dfa0ee37b4"}, + {file = "h5py-3.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:57c4c74f627c616f02b7aec608a8c706fe08cb5b0ba7c08555a4eb1dde20805a"}, + {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:357e6dc20b101a805ccfd0024731fbaf6e8718c18c09baf3b5e4e9d198d13fca"}, + {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6f13f9b5ce549448c01e4dfe08ea8d1772e6078799af2c1c8d09e941230a90d"}, + {file = "h5py-3.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:21daf38171753899b5905f3d82c99b0b1ec2cbbe282a037cad431feb620e62ec"}, + {file = "h5py-3.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e520ec76de00943dd017c8ea3f354fa1d2f542eac994811943a8faedf2a7d5cb"}, + {file = "h5py-3.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e79d8368cd9295045956bfb436656bea3f915beaa11d342e9f79f129f5178763"}, + {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56dd172d862e850823c4af02dc4ddbc308f042b85472ffdaca67f1598dff4a57"}, + {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be949b46b7388074c5acae017fbbe3e5ba303fd9daaa52157fdfef30bbdacadd"}, + {file = "h5py-3.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:4f97ecde7ac6513b21cd95efdfc38dc6d19f96f6ca6f2a30550e94e551458e0a"}, + {file = "h5py-3.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82690e89c72b85addf4fc4d5058fb1e387b6c14eb063b0b879bf3f42c3b93c35"}, + {file = "h5py-3.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d571644958c5e19a61c793d8d23cd02479572da828e333498c9acc463f4a3997"}, + {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:560e71220dc92dfa254b10a4dcb12d56b574d2d87e095db20466b32a93fec3f9"}, + {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10f061764d8dce0a9592ce08bfd5f243a00703325c388f1086037e5d619c5f1"}, + {file = "h5py-3.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c82ece71ed1c2b807b6628e3933bc6eae57ea21dac207dca3470e3ceaaf437c"}, + {file = "h5py-3.13.0.tar.gz", hash = "sha256:1870e46518720023da85d0895a1960ff2ce398c5671eac3b1a41ec696b7105c3"}, ] [package.dependencies] @@ -1285,6 +1398,8 @@ version = "5.0.3" description = "Hickle - an HDF5 based version of pickle" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad"}, {file = "hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e"}, @@ -1300,6 +1415,7 @@ version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, @@ -1321,6 +1437,7 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1333,7 +1450,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -1345,10 +1462,12 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["docs", "examples", "export"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] @@ -1359,6 +1478,8 @@ version = "0.2.0" description = "Cross-platform network interface and IP address enumeration library" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"}, {file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"}, @@ -1370,6 +1491,8 @@ version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" +groups = ["docs", "examples", "export"] +markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, @@ -1379,12 +1502,12 @@ files = [ zipp = ">=3.20" [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -1393,6 +1516,8 @@ version = "6.5.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, @@ -1402,7 +1527,7 @@ files = [ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -1415,6 +1540,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -1426,10 +1552,12 @@ version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} @@ -1459,10 +1587,12 @@ version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" +groups = ["dev", "examples", "export"] files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] +markers = {export = "python_version < \"3.11\""} [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} @@ -1496,10 +1626,12 @@ version = "8.1.5" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" +groups = ["examples", "export"] files = [ {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] comm = ">=0.1.3" @@ -1517,6 +1649,7 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1531,10 +1664,12 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["dev", "examples", "export"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] +markers = {export = "python_version < \"3.11\""} [package.dependencies] parso = ">=0.8.4,<0.9.0" @@ -1546,14 +1681,16 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.5" +version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["docs", "examples", "export"] files = [ - {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, - {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] MarkupSafe = ">=2.0" @@ -1567,6 +1704,8 @@ version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -1578,6 +1717,7 @@ version = "0.10.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" +groups = ["examples"] files = [ {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, @@ -1592,6 +1732,7 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1603,10 +1744,12 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] attrs = ">=22.2.0" @@ -1632,10 +1775,12 @@ version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["examples", "export"] files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] referencing = ">=0.31.0" @@ -1646,6 +1791,7 @@ version = "1.1.1" description = "Jupyter metapackage. Install all the Jupyter components in one go." optional = false python-versions = "*" +groups = ["examples"] files = [ {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, @@ -1665,10 +1811,12 @@ version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} @@ -1680,7 +1828,7 @@ traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-console" @@ -1688,6 +1836,7 @@ version = "6.6.3" description = "Jupyter terminal console" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, @@ -1712,10 +1861,12 @@ version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] platformdirs = ">=2.5" @@ -1728,17 +1879,19 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.11.0" +version = "0.12.0" description = "Jupyter Event System library" optional = false python-versions = ">=3.9" +groups = ["examples"] files = [ - {file = "jupyter_events-0.11.0-py3-none-any.whl", hash = "sha256:36399b41ce1ca45fe8b8271067d6a140ffa54cec4028e95491c93b78a855cacf"}, - {file = "jupyter_events-0.11.0.tar.gz", hash = "sha256:c0bc56a37aac29c1fbc3bcfbddb8c8c49533f9cf11f1c4e6adadba936574ab90"}, + {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, + {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, ] [package.dependencies] jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +packaging = "*" python-json-logger = ">=2.0.4" pyyaml = ">=5.3" referencing = "*" @@ -1757,6 +1910,7 @@ version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, @@ -1772,6 +1926,7 @@ version = "2.15.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.9" +groups = ["examples"] files = [ {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, @@ -1808,6 +1963,7 @@ version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1823,13 +1979,14 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.4" +version = "4.3.6" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ - {file = "jupyterlab-4.3.4-py3-none-any.whl", hash = "sha256:b754c2601c5be6adf87cb5a1d8495d653ffb945f021939f77776acaa94dae952"}, - {file = "jupyterlab-4.3.4.tar.gz", hash = "sha256:f0bb9b09a04766e3423cccc2fc23169aa2ffedcdf8713e9e0fb33cac0b6859d0"}, + {file = "jupyterlab-4.3.6-py3-none-any.whl", hash = "sha256:fc9eb0455562a56a9bd6d2977cf090842f321fa1a298fcee9bf8c19de353d5fd"}, + {file = "jupyterlab-4.3.6.tar.gz", hash = "sha256:2900ffdbfca9ed37c4ad7fdda3eb76582fd945d46962af3ac64741ae2d6b2ff4"}, ] [package.dependencies] @@ -1862,6 +2019,7 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1873,6 +2031,7 @@ version = "2.27.3" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, @@ -1899,10 +2058,12 @@ version = "3.0.13" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" +groups = ["examples", "export"] files = [ {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "kiwisolver" @@ -1910,6 +2071,8 @@ version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, @@ -2033,6 +2196,8 @@ version = "0.4" description = "Makes it easy to load subpackages and functions on demand." optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"}, {file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"}, @@ -2048,31 +2213,32 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] [[package]] name = "libqasm" -version = "0.6.9" +version = "1.2.0" description = "libqasm Python Package" optional = false python-versions = "*" -files = [ - {file = "libqasm-0.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:31da6dbeaf14df4c3c796f1ae09d49bcdd5a52fb85ab8a7aa7475ad099691521"}, - {file = "libqasm-0.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3b66ec559db7ffaea0bd586139e4119fdbfaebd0c7c47ed899bb6744ba7964ef"}, - {file = "libqasm-0.6.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6db57611f5e048b04fede7f6dd102f5d94dfef6e77ac7301185d55673f122dab"}, - {file = "libqasm-0.6.9-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62017c9630f20f3fa775dddae09dc1c70e7c44afeb26fde93c082c38393c5902"}, - {file = "libqasm-0.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:1f5f80f2ca02c16f590d0c02c6065ce400c39bdc7b3406d33934a63d54d5cf82"}, - {file = "libqasm-0.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3cb4a7f75de569a23c43581b6d0e793c6218334b1b4d8d56b1ab8954083a5fd"}, - {file = "libqasm-0.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:06b1227deb4711bd8318abf8bea3f37c1c65bd0003ff4b4b2f286e0a1601a734"}, - {file = "libqasm-0.6.9-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72cccc68793785e55cc16a288c7502781b324830ce868ce59fb09a35e75bfad0"}, - {file = "libqasm-0.6.9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c5ec4d7eccbc06a49591c10101b2c6e5f76901854c9c998b0f216f0f11d2607"}, - {file = "libqasm-0.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:aaea4dad2c3742dc8e5d885363a2670249270f87c9c9030f67ae2b20355eeedb"}, - {file = "libqasm-0.6.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:64b2fe7ce804b26e107ec1e5ddae4c37e311f056331b4fae723933fcd0901d54"}, - {file = "libqasm-0.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:67ecc40f9c6f50dd5db0f1b949f677b3d8126b1bd3836fdf544c1e56d5fc11ba"}, - {file = "libqasm-0.6.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68ff5857a877be0d44ea3d746c936ccc112b10312d686b74d890b8effb000799"}, - {file = "libqasm-0.6.9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:822bbec51dba5cdf2fe865fa74b6a0e01c2c46fefc84c18a3e9159d6f1f1c33b"}, - {file = "libqasm-0.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:84c99d94a9d45c9487f6ff9be31ac849a4c8a704396ae67254db78b384942b7a"}, - {file = "libqasm-0.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49a04ccc5c271b496ecbc83c42beae95b3753f1180e19e242b613314e495874d"}, - {file = "libqasm-0.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c2340455a85603ba8d1fd63f78e79bde1dd2902fed89b5bd40a8a643c15273"}, - {file = "libqasm-0.6.9-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9e1e46d170ebe820e4e1215be56cbd2b83a5963638e2f69cc10269514b32e6d"}, - {file = "libqasm-0.6.9-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ebb0890a90cf9a31bc3d8be9d208aca7f906a7420d7eced54678df2ed72da53"}, - {file = "libqasm-0.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:388c42972ca6700dd64612d6e5d7e1627ca37e1b9ed5e3eb69f85d68b0cb3508"}, +groups = ["main"] +files = [ + {file = "libqasm-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b54c706e929d33dbdbcfefb9473c5280f816a091293bbf62a6733e0ead3502f"}, + {file = "libqasm-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:11b30ebd51b2419257022d17e15185b6eadb5ba3917f145bd38cac374fc9f25a"}, + {file = "libqasm-1.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb641a6f02930ee3a82483e88684ab290e24f8125641c08a615fb4b2d744a3dd"}, + {file = "libqasm-1.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11771ea65f31114d8d8f9226839445a46436a0656f90e30fe2fddf979e0fa37f"}, + {file = "libqasm-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d7d1a412ad94c0121c6ee8d707cd1ff344f7bda72557a8038b500639655fe46"}, + {file = "libqasm-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:249358d98fca493651e4eec6dd594ead16a69ebfd08139b196cf1409cf0e03f3"}, + {file = "libqasm-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5891147046dac02ff3a2e057a3c6a66ea0138d6f6ce0e0d3680314181ec5cdfd"}, + {file = "libqasm-1.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:123b8aa085569f25bfd852a72067fc1ac2892593852c678f320c121f6a15be3a"}, + {file = "libqasm-1.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:110c01bcbd12e3b2ed6e8aa50dd73e95dae8a3383b38bd1351fb90392cc46c4b"}, + {file = "libqasm-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:3737086fbd0601433c56fab2f0cb50298aaed1ea9323e8f97d3c67656e763c1f"}, + {file = "libqasm-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bfe887d1f9bbbcd98428bc908d2336453247958eb750f7282e6fa7f0b9df45d"}, + {file = "libqasm-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c7c3bbb747219e3fc48f93b0d36cfea898268686767f5b683ecdd1d7701da20e"}, + {file = "libqasm-1.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72084cd13047c0f9fc6a87682eb8ee1e91dc7715594ce7ca74f8a062e575ebdd"}, + {file = "libqasm-1.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2da87aae9ba94f1d0e420ee24e3c68bef90bc51d53a96aa0b3ff3010d866ad2e"}, + {file = "libqasm-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:d587a9f50b96824b34033649d5c12f74f87e1059bc4ac18a643b54cdcf413929"}, + {file = "libqasm-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c61432086a243b8dea9515bb230d1ff7e7f22851da64f89b8448a842e3fa7a6b"}, + {file = "libqasm-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4d223d1790d6d640b6178e224cc0a3f0c4521a81aa3be9ed1aa8a9f0f28a4130"}, + {file = "libqasm-1.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bb360afe4376dc42289ee86e708bb369ec5923e57000d3fe577b45d3d47a4a88"}, + {file = "libqasm-1.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c67b5698c858f8a0fc460e36a2cebaa0d4760e033cd6b7a8f34626c9c97e91d7"}, + {file = "libqasm-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:8aced05bc75529c34c4be5afec824a04bcd30dfa00c498b9be696c41de0f1556"}, ] [package.dependencies] @@ -2080,26 +2246,28 @@ numpy = "*" [[package]] name = "lmfit" -version = "1.3.2" +version = "1.3.3" description = "Least-Squares Minimization with Bounds and Constraints" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "lmfit-1.3.2-py3-none-any.whl", hash = "sha256:2b834f054cd7a5172f3b431345b292e5d95ea387d6f96d60ad35a11b8efee6ac"}, - {file = "lmfit-1.3.2.tar.gz", hash = "sha256:31beeae1f027c1b8c14dcd7f2e8488a80b75fb389e77fca677549bdc2fe597bb"}, + {file = "lmfit-1.3.3-py3-none-any.whl", hash = "sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2"}, + {file = "lmfit-1.3.3.tar.gz", hash = "sha256:73321e6b881f2f686235721a7dfc02af6bb0f030a25efeb66638f62b1c6053a1"}, ] [package.dependencies] asteval = ">=1.0" dill = ">=0.3.4" -numpy = ">=1.19" -scipy = ">=1.6" +numpy = ">=1.24" +scipy = ">=1.10.0" uncertainties = ">=3.2.2" [package.extras] all = ["lmfit[dev,doc,test]"] dev = ["build", "check-wheel-contents", "flake8-pyproject", "pre-commit", "twine"] -doc = ["Pillow", "Sphinx", "cairosvg", "corner", "emcee (>=3.0.0)", "ipykernel", "jupyter-sphinx (>=0.2.4)", "matplotlib", "numdifftools", "numexpr", "pandas", "pycairo", "sphinx-gallery (>=0.10)", "sphinxcontrib-svg2pdfconverter", "sympy"] +doc = ["Pillow", "Sphinx", "cairosvg", "corner", "emcee (>=3.0.0)", "ipykernel", "jupyter_sphinx (>=0.2.4)", "matplotlib", "numdifftools", "pandas", "pycairo ; platform_system == \"Windows\"", "sphinx-gallery (>=0.10)", "sphinxcontrib-svg2pdfconverter", "sympy"] test = ["coverage", "flaky", "pytest", "pytest-cov"] [[package]] @@ -2108,6 +2276,8 @@ version = "1.0.0" description = "File-based locks for Python on Linux and Windows" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, @@ -2115,13 +2285,15 @@ files = [ [[package]] name = "loky" -version = "3.4.1" +version = "3.5.0" description = "A robust implementation of concurrent.futures.ProcessPoolExecutor" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "loky-3.4.1-py3-none-any.whl", hash = "sha256:7132da80d1a057b5917ff32c7867b65ed164aae84c259a1dbc44375791280c87"}, - {file = "loky-3.4.1.tar.gz", hash = "sha256:66db350de68c301299c882ace3b8f06ba5c4cb2c45f8fcffd498160ce8280753"}, + {file = "loky-3.5.0-py3-none-any.whl", hash = "sha256:9481712107902174df88e86b49793fcb2bd41053c1326b22480b8fd989bea587"}, + {file = "loky-3.5.0.tar.gz", hash = "sha256:0ac7648a2c02758c37dcf3587ee4832d245ec5a4b0fec5cc0c6a9cc8e5695b53"}, ] [package.dependencies] @@ -2129,157 +2301,159 @@ cloudpickle = "*" [[package]] name = "lxml" -version = "5.3.0" +version = "5.3.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" -files = [ - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, - {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, - {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, - {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, - {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, - {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, - {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, - {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, - {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, - {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, - {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, - {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, - {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, - {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, - {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, - {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, - {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, - {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, - {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, - {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, - {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, - {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4058f16cee694577f7e4dd410263cd0ef75644b43802a689c2b3c2a7e69453b"}, + {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:364de8f57d6eda0c16dcfb999af902da31396949efa0e583e12675d09709881b"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:528f3a0498a8edc69af0559bdcf8a9f5a8bf7c00051a6ef3141fdcf27017bbf5"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db4743e30d6f5f92b6d2b7c86b3ad250e0bad8dee4b7ad8a0c44bfb276af89a3"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b5d7f8acf809465086d498d62a981fa6a56d2718135bb0e4aa48c502055f5c"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:928e75a7200a4c09e6efc7482a1337919cc61fe1ba289f297827a5b76d8969c2"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a997b784a639e05b9d4053ef3b20c7e447ea80814a762f25b8ed5a89d261eac"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7b82e67c5feb682dbb559c3e6b78355f234943053af61606af126df2183b9ef9"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:f1de541a9893cf8a1b1db9bf0bf670a2decab42e3e82233d36a74eda7822b4c9"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:de1fc314c3ad6bc2f6bd5b5a5b9357b8c6896333d27fdbb7049aea8bd5af2d79"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7c0536bd9178f754b277a3e53f90f9c9454a3bd108b1531ffff720e082d824f2"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68018c4c67d7e89951a91fbd371e2e34cd8cfc71f0bb43b5332db38497025d51"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa826340a609d0c954ba52fd831f0fba2a4165659ab0ee1a15e4aac21f302406"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:796520afa499732191e39fc95b56a3b07f95256f2d22b1c26e217fb69a9db5b5"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3effe081b3135237da6e4c4530ff2a868d3f80be0bda027e118a5971285d42d0"}, + {file = "lxml-5.3.1-cp310-cp310-win32.whl", hash = "sha256:a22f66270bd6d0804b02cd49dae2b33d4341015545d17f8426f2c4e22f557a23"}, + {file = "lxml-5.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:0bcfadea3cdc68e678d2b20cb16a16716887dd00a881e16f7d806c2138b8ff0c"}, + {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e220f7b3e8656ab063d2eb0cd536fafef396829cafe04cb314e734f87649058f"}, + {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f2cfae0688fd01f7056a17367e3b84f37c545fb447d7282cf2c242b16262607"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67d2f8ad9dcc3a9e826bdc7802ed541a44e124c29b7d95a679eeb58c1c14ade8"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db0c742aad702fd5d0c6611a73f9602f20aec2007c102630c06d7633d9c8f09a"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:198bb4b4dd888e8390afa4f170d4fa28467a7eaf857f1952589f16cfbb67af27"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2a3e412ce1849be34b45922bfef03df32d1410a06d1cdeb793a343c2f1fd666"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8969dbc8d09d9cd2ae06362c3bad27d03f433252601ef658a49bd9f2b22d79"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5be8f5e4044146a69c96077c7e08f0709c13a314aa5315981185c1f00235fe65"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:133f3493253a00db2c870d3740bc458ebb7d937bd0a6a4f9328373e0db305709"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:52d82b0d436edd6a1d22d94a344b9a58abd6c68c357ed44f22d4ba8179b37629"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b6f92e35e2658a5ed51c6634ceb5ddae32053182851d8cad2a5bc102a359b33"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:203b1d3eaebd34277be06a3eb880050f18a4e4d60861efba4fb946e31071a295"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:155e1a5693cf4b55af652f5c0f78ef36596c7f680ff3ec6eb4d7d85367259b2c"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22ec2b3c191f43ed21f9545e9df94c37c6b49a5af0a874008ddc9132d49a2d9c"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7eda194dd46e40ec745bf76795a7cccb02a6a41f445ad49d3cf66518b0bd9cff"}, + {file = "lxml-5.3.1-cp311-cp311-win32.whl", hash = "sha256:fb7c61d4be18e930f75948705e9718618862e6fc2ed0d7159b2262be73f167a2"}, + {file = "lxml-5.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c809eef167bf4a57af4b03007004896f5c60bd38dc3852fcd97a26eae3d4c9e6"}, + {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e69add9b6b7b08c60d7ff0152c7c9a6c45b4a71a919be5abde6f98f1ea16421c"}, + {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4e52e1b148867b01c05e21837586ee307a01e793b94072d7c7b91d2c2da02ffe"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b382e0e636ed54cd278791d93fe2c4f370772743f02bcbe431a160089025c9"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2e49dc23a10a1296b04ca9db200c44d3eb32c8d8ec532e8c1fd24792276522a"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4399b4226c4785575fb20998dc571bc48125dc92c367ce2602d0d70e0c455eb0"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5412500e0dc5481b1ee9cf6b38bb3b473f6e411eb62b83dc9b62699c3b7b79f7"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c93ed3c998ea8472be98fb55aed65b5198740bfceaec07b2eba551e55b7b9ae"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:63d57fc94eb0bbb4735e45517afc21ef262991d8758a8f2f05dd6e4174944519"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:b450d7cabcd49aa7ab46a3c6aa3ac7e1593600a1a0605ba536ec0f1b99a04322"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:4df0ec814b50275ad6a99bc82a38b59f90e10e47714ac9871e1b223895825468"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d184f85ad2bb1f261eac55cddfcf62a70dee89982c978e92b9a74a1bfef2e367"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b725e70d15906d24615201e650d5b0388b08a5187a55f119f25874d0103f90dd"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a31fa7536ec1fb7155a0cd3a4e3d956c835ad0a43e3610ca32384d01f079ea1c"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c3c8b55c7fc7b7e8877b9366568cc73d68b82da7fe33d8b98527b73857a225f"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d61ec60945d694df806a9aec88e8f29a27293c6e424f8ff91c80416e3c617645"}, + {file = "lxml-5.3.1-cp312-cp312-win32.whl", hash = "sha256:f4eac0584cdc3285ef2e74eee1513a6001681fd9753b259e8159421ed28a72e5"}, + {file = "lxml-5.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:29bfc8d3d88e56ea0a27e7c4897b642706840247f59f4377d81be8f32aa0cfbf"}, + {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c093c7088b40d8266f57ed71d93112bd64c6724d31f0794c1e52cc4857c28e0e"}, + {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0884e3f22d87c30694e625b1e62e6f30d39782c806287450d9dc2fdf07692fd"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1637fa31ec682cd5760092adfabe86d9b718a75d43e65e211d5931809bc111e7"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a364e8e944d92dcbf33b6b494d4e0fb3499dcc3bd9485beb701aa4b4201fa414"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:779e851fd0e19795ccc8a9bb4d705d6baa0ef475329fe44a13cf1e962f18ff1e"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4393600915c308e546dc7003d74371744234e8444a28622d76fe19b98fa59d1"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:673b9d8e780f455091200bba8534d5f4f465944cbdd61f31dc832d70e29064a5"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2e4a570f6a99e96c457f7bec5ad459c9c420ee80b99eb04cbfcfe3fc18ec6423"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:71f31eda4e370f46af42fc9f264fafa1b09f46ba07bdbee98f25689a04b81c20"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:42978a68d3825eaac55399eb37a4d52012a205c0c6262199b8b44fcc6fd686e8"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8b1942b3e4ed9ed551ed3083a2e6e0772de1e5e3aca872d955e2e86385fb7ff9"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85c4f11be9cf08917ac2a5a8b6e1ef63b2f8e3799cec194417e76826e5f1de9c"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:231cf4d140b22a923b1d0a0a4e0b4f972e5893efcdec188934cc65888fd0227b"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5865b270b420eda7b68928d70bb517ccbe045e53b1a428129bb44372bf3d7dd5"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7bebc2275016cddf3c997bf8a0f7044160714c64a9b83975670a04e6d2252"}, + {file = "lxml-5.3.1-cp313-cp313-win32.whl", hash = "sha256:d0751528b97d2b19a388b302be2a0ee05817097bab46ff0ed76feeec24951f78"}, + {file = "lxml-5.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:91fb6a43d72b4f8863d21f347a9163eecbf36e76e2f51068d59cd004c506f332"}, + {file = "lxml-5.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:016b96c58e9a4528219bb563acf1aaaa8bc5452e7651004894a973f03b84ba81"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82a4bb10b0beef1434fb23a09f001ab5ca87895596b4581fd53f1e5145a8934a"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d68eeef7b4d08a25e51897dac29bcb62aba830e9ac6c4e3297ee7c6a0cf6439"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:f12582b8d3b4c6be1d298c49cb7ae64a3a73efaf4c2ab4e37db182e3545815ac"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2df7ed5edeb6bd5590914cd61df76eb6cce9d590ed04ec7c183cf5509f73530d"}, + {file = "lxml-5.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:585c4dc429deebc4307187d2b71ebe914843185ae16a4d582ee030e6cfbb4d8a"}, + {file = "lxml-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:06a20d607a86fccab2fc15a77aa445f2bdef7b49ec0520a842c5c5afd8381576"}, + {file = "lxml-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:057e30d0012439bc54ca427a83d458752ccda725c1c161cc283db07bcad43cf9"}, + {file = "lxml-5.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4867361c049761a56bd21de507cab2c2a608c55102311d142ade7dab67b34f32"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dddf0fb832486cc1ea71d189cb92eb887826e8deebe128884e15020bb6e3f61"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bcc211542f7af6f2dfb705f5f8b74e865592778e6cafdfd19c792c244ccce19"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaca5a812f050ab55426c32177091130b1e49329b3f002a32934cd0245571307"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:236610b77589faf462337b3305a1be91756c8abc5a45ff7ca8f245a71c5dab70"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:aed57b541b589fa05ac248f4cb1c46cbb432ab82cbd467d1c4f6a2bdc18aecf9"}, + {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:75fa3d6946d317ffc7016a6fcc44f42db6d514b7fdb8b4b28cbe058303cb6e53"}, + {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:96eef5b9f336f623ffc555ab47a775495e7e8846dde88de5f941e2906453a1ce"}, + {file = "lxml-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:ef45f31aec9be01379fc6c10f1d9c677f032f2bac9383c827d44f620e8a88407"}, + {file = "lxml-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0611da6b07dd3720f492db1b463a4d1175b096b49438761cc9f35f0d9eaaef5"}, + {file = "lxml-5.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2aca14c235c7a08558fe0a4786a1a05873a01e86b474dfa8f6df49101853a4e"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82fce1d964f065c32c9517309f0c7be588772352d2f40b1574a214bd6e6098"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7aae7a3d63b935babfdc6864b31196afd5145878ddd22f5200729006366bc4d5"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8e0d177b1fe251c3b1b914ab64135475c5273c8cfd2857964b2e3bb0fe196a7"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:6c4dd3bfd0c82400060896717dd261137398edb7e524527438c54a8c34f736bf"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f1208c1c67ec9e151d78aa3435aa9b08a488b53d9cfac9b699f15255a3461ef2"}, + {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c6aacf00d05b38a5069826e50ae72751cb5bc27bdc4d5746203988e429b385bb"}, + {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5881aaa4bf3a2d086c5f20371d3a5856199a0d8ac72dd8d0dbd7a2ecfc26ab73"}, + {file = "lxml-5.3.1-cp38-cp38-win32.whl", hash = "sha256:45fbb70ccbc8683f2fb58bea89498a7274af1d9ec7995e9f4af5604e028233fc"}, + {file = "lxml-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:7512b4d0fc5339d5abbb14d1843f70499cab90d0b864f790e73f780f041615d7"}, + {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5885bc586f1edb48e5d68e7a4b4757b5feb2a496b64f462b4d65950f5af3364f"}, + {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1b92fe86e04f680b848fff594a908edfa72b31bfc3499ef7433790c11d4c8cd8"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a091026c3bf7519ab1e64655a3f52a59ad4a4e019a6f830c24d6430695b1cf6a"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ffb141361108e864ab5f1813f66e4e1164181227f9b1f105b042729b6c15125"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3715cdf0dd31b836433af9ee9197af10e3df41d273c19bb249230043667a5dfd"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88b72eb7222d918c967202024812c2bfb4048deeb69ca328363fb8e15254c549"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa59974880ab5ad8ef3afaa26f9bda148c5f39e06b11a8ada4660ecc9fb2feb3"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3bb8149840daf2c3f97cebf00e4ed4a65a0baff888bf2605a8d0135ff5cf764e"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:0d6b2fa86becfa81f0a0271ccb9eb127ad45fb597733a77b92e8a35e53414914"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:136bf638d92848a939fd8f0e06fcf92d9f2e4b57969d94faae27c55f3d85c05b"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:89934f9f791566e54c1d92cdc8f8fd0009447a5ecdb1ec6b810d5f8c4955f6be"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8ade0363f776f87f982572c2860cc43c65ace208db49c76df0a21dde4ddd16e"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfbbab9316330cf81656fed435311386610f78b6c93cc5db4bebbce8dd146675"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:172d65f7c72a35a6879217bcdb4bb11bc88d55fb4879e7569f55616062d387c2"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e3c623923967f3e5961d272718655946e5322b8d058e094764180cdee7bab1af"}, + {file = "lxml-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ce0930a963ff593e8bb6fda49a503911accc67dee7e5445eec972668e672a0f0"}, + {file = "lxml-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7b64fcd670bca8800bc10ced36620c6bbb321e7bc1214b9c0c0df269c1dddc2"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:afa578b6524ff85fb365f454cf61683771d0170470c48ad9d170c48075f86725"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f5e80adf0aafc7b5454f2c1cb0cde920c9b1f2cbd0485f07cc1d0497c35c5d"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd0b80ac2d8f13ffc906123a6f20b459cb50a99222d0da492360512f3e50f84"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:422c179022ecdedbe58b0e242607198580804253da220e9454ffe848daa1cfd2"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:524ccfded8989a6595dbdda80d779fb977dbc9a7bc458864fc9a0c2fc15dc877"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:48fd46bf7155def2e15287c6f2b133a2f78e2d22cdf55647269977b873c65499"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:05123fad495a429f123307ac6d8fd6f977b71e9a0b6d9aeeb8f80c017cb17131"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a243132767150a44e6a93cd1dde41010036e1cbc63cc3e9fe1712b277d926ce3"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c92ea6d9dd84a750b2bae72ff5e8cf5fdd13e58dda79c33e057862c29a8d5b50"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2f1be45d4c15f237209bbf123a0e05b5d630c8717c42f59f31ea9eae2ad89394"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a83d3adea1e0ee36dac34627f78ddd7f093bb9cfc0a8e97f1572a949b695cb98"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3edbb9c9130bac05d8c3fe150c51c337a471cc7fdb6d2a0a7d3a88e88a829314"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f23cf50eccb3255b6e913188291af0150d89dab44137a69e14e4dcb7be981f1"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7e5edac4778127f2bf452e0721a58a1cfa4d1d9eac63bdd650535eb8543615"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:094b28ed8a8a072b9e9e2113a81fda668d2053f2ca9f2d202c2c8c7c2d6516b1"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:514fe78fc4b87e7a7601c92492210b20a1b0c6ab20e71e81307d9c2e377c64de"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8fffc08de02071c37865a155e5ea5fce0282e1546fd5bde7f6149fcaa32558ac"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4b0d5cdba1b655d5b18042ac9c9ff50bda33568eb80feaaca4fc237b9c4fbfde"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3031e4c16b59424e8d78522c69b062d301d951dc55ad8685736c3335a97fc270"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb659702a45136c743bc130760c6f137870d4df3a9e14386478b8a0511abcfca"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a11b16a33656ffc43c92a5343a28dc71eefe460bcc2a4923a96f292692709f6"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5ae125276f254b01daa73e2c103363d3e99e3e10505686ac7d9d2442dd4627a"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76722b5ed4a31ba103e0dc77ab869222ec36efe1a614e42e9bcea88a36186fe"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:33e06717c00c788ab4e79bc4726ecc50c54b9bfb55355eae21473c145d83c2d2"}, + {file = "lxml-5.3.1.tar.gz", hash = "sha256:106b7b5d2977b339f1e97efe2778e2ab20e99994cbb0ec5e55771ed0795920c8"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml-html-clean"] +html-clean = ["lxml_html_clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11)"] +source = ["Cython (>=3.0.11,<3.1.0)"] [[package]] name = "markdown" @@ -2287,6 +2461,7 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -2305,6 +2480,8 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2329,6 +2506,7 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["docs", "examples", "export"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2392,16 +2570,19 @@ files = [ {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "marshmallow" -version = "3.26.0" +version = "3.26.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "marshmallow-3.26.0-py3-none-any.whl", hash = "sha256:1287bca04e6a5f4094822ac153c03da5e214a0a60bcd557b140f3e66991b8ca1"}, - {file = "marshmallow-3.26.0.tar.gz", hash = "sha256:eb36762a1cc76d7abf831e18a3a1b26d3d481bbc74581b8e532a3d3a8115e1cb"}, + {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, + {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, ] [package.dependencies] @@ -2418,6 +2599,8 @@ version = "3.9.4" description = "Python plotting package" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, @@ -2483,10 +2666,12 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["dev", "examples", "export"] files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] +markers = {export = "python_version < \"3.11\""} [package.dependencies] traitlets = "*" @@ -2497,6 +2682,8 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2508,6 +2695,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -2519,6 +2707,8 @@ version = "0.4.7" description = "Expand standard functools to methods" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11"}, {file = "methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba"}, @@ -2529,17 +2719,18 @@ wirerope = ">=0.4.7" [package.extras] doc = ["sphinx"] -test = ["functools32 (>=3.2.3-2)", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] +test = ["functools32 (>=3.2.3-2) ; python_version < \"3\"", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] [[package]] name = "mistune" -version = "3.1.1" +version = "3.1.2" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ - {file = "mistune-3.1.1-py3-none-any.whl", hash = "sha256:02106ac2aa4f66e769debbfa028509a275069dcffce0dfa578edd7b991ee700a"}, - {file = "mistune-3.1.1.tar.gz", hash = "sha256:e0740d635f515119f7d1feb6f9b192ee60f0cc649f80a8f944f905706a21654c"}, + {file = "mistune-3.1.2-py3-none-any.whl", hash = "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319"}, + {file = "mistune-3.1.2.tar.gz", hash = "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff"}, ] [package.dependencies] @@ -2551,6 +2742,7 @@ version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -2574,17 +2766,18 @@ watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" -version = "1.3.0" +version = "1.4.1" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, - {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, + {file = "mkdocs_autorefs-1.4.1-py3-none-any.whl", hash = "sha256:9793c5ac06a6ebbe52ec0f8439256e66187badf4b5334b5fde0b128ec134df4f"}, + {file = "mkdocs_autorefs-1.4.1.tar.gz", hash = "sha256:4b5b6235a4becb2b10425c2fa191737e415b37aa3418919db33e5d774c9db079"}, ] [package.dependencies] @@ -2598,6 +2791,7 @@ version = "0.5.0" description = "MkDocs plugin to programmatically generate documentation pages during the build" optional = false python-versions = ">=3.7" +groups = ["docs"] files = [ {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, @@ -2612,6 +2806,7 @@ version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -2625,40 +2820,42 @@ pyyaml = ">=5.1" [[package]] name = "mkdocs-literate-nav" -version = "0.6.1" +version = "0.6.2" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, - {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, + {file = "mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630"}, + {file = "mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75"}, ] [package.dependencies] -mkdocs = ">=1.0.3" +mkdocs = ">=1.4.1" [[package]] name = "mkdocs-material" -version = "9.5.50" +version = "9.6.12" description = "Documentation that simply works" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, - {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, + {file = "mkdocs_material-9.6.12-py3-none-any.whl", hash = "sha256:92b4fbdc329e4febc267ca6e2c51e8501fa97b2225c5f4deb4d4e43550f8e61e"}, + {file = "mkdocs_material-9.6.12.tar.gz", hash = "sha256:add6a6337b29f9ea7912cb1efc661de2c369060b040eb5119855d794ea85b473"}, ] [package.dependencies] babel = ">=2.10,<3.0" +backrefs = ">=5.7.post1,<6.0" colorama = ">=0.4,<1.0" -jinja2 = ">=3.0,<4.0" +jinja2 = ">=3.1,<4.0" markdown = ">=3.2,<4.0" mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" pymdown-extensions = ">=10.2,<11.0" -regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] @@ -2672,6 +2869,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -2679,48 +2877,48 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.27.0" +version = "0.29.1" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, - {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, + {file = "mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6"}, + {file = "mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42"}, ] [package.dependencies] -click = ">=7.0" importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" Markdown = ">=3.6" MarkupSafe = ">=1.1" -mkdocs = ">=1.4" -mkdocs-autorefs = ">=1.2" -mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} -platformdirs = ">=2.2" +mkdocs = ">=1.6" +mkdocs-autorefs = ">=1.4" +mkdocstrings-python = {version = ">=1.16.2", optional = true, markers = "extra == \"python\""} pymdown-extensions = ">=6.3" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} [package.extras] crystal = ["mkdocstrings-crystal (>=0.3.4)"] -python = ["mkdocstrings-python (>=0.5.2)"] +python = ["mkdocstrings-python (>=1.16.2)"] python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.13.0" +version = "1.16.5" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, - {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, + {file = "mkdocstrings_python-1.16.5-py3-none-any.whl", hash = "sha256:0899a12e356eab8e83720c63e15d0ff51cd96603216c837618de346e086b39ba"}, + {file = "mkdocstrings_python-1.16.5.tar.gz", hash = "sha256:706b28dd0f59249a7c22cc5d517c9521e06c030b57e2a5478e1928a58f900abb"}, ] [package.dependencies] griffe = ">=0.49" -mkdocs-autorefs = ">=1.2" -mkdocstrings = ">=0.26" +mkdocs-autorefs = ">=1.4" +mkdocstrings = ">=0.28.3" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [[package]] name = "mpmath" @@ -2728,6 +2926,7 @@ version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" +groups = ["dev", "examples"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2736,54 +2935,49 @@ files = [ [package.extras] develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] +gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""] tests = ["pytest (>=4.6)"] [[package]] name = "mypy" -version = "1.14.1" +version = "1.15.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] @@ -2804,28 +2998,32 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev", "export"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "narwhals" -version = "1.24.1" +version = "1.30.0" description = "Extremely lightweight compatibility layer between dataframe libraries" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "narwhals-1.24.1-py3-none-any.whl", hash = "sha256:d8983fe14851c95d60576ddca37c094bd4ed24ab9ea98396844fb20ad9aaf184"}, - {file = "narwhals-1.24.1.tar.gz", hash = "sha256:b09b8253d945f23cdb683a84685abf3afb9f96114d89e9f35dc876e143f65007"}, + {file = "narwhals-1.30.0-py3-none-any.whl", hash = "sha256:443aa0a1abfae89bc65a6b888a7e310a03d1818bfb2ccd61c150199a5f954c17"}, + {file = "narwhals-1.30.0.tar.gz", hash = "sha256:0c50cc67a5404da501302882838ec17dce51703d22cd8ad89162d6f60ea0bb19"}, ] [package.extras] core = ["duckdb", "pandas", "polars", "pyarrow", "pyarrow-stubs"] cudf = ["cudf (>=24.10.0)"] dask = ["dask[dataframe] (>=2024.8)"] -dev = ["covdefaults", "hypothesis", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] -docs = ["black", "duckdb", "jinja2", "markdown-exec[ansi]", "mkdocs", "mkdocs-autorefs", "mkdocs-material", "mkdocstrings[python]", "pandas", "polars (>=1.0.0)", "pyarrow"] +dev = ["covdefaults", "hypothesis", "mypy (>=1.15.0,<1.16.0)", "pandas-stubs", "pre-commit", "pyright", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] +docs = ["black", "duckdb", "jinja2", "markdown-exec[ansi]", "mkdocs", "mkdocs-autorefs", "mkdocs-material", "mkdocstrings-python (>=1.16)", "mkdocstrings[python]", "pandas", "polars (>=1.0.0)", "pyarrow"] duckdb = ["duckdb (>=1.0)"] extra = ["scikit-learn"] ibis = ["ibis-framework (>=6.0.0)", "packaging", "pyarrow-hotfix", "rich"] @@ -2834,6 +3032,9 @@ pandas = ["pandas (>=0.25.3)"] polars = ["polars (>=0.20.3)"] pyarrow = ["pyarrow (>=11.0.0)"] pyspark = ["pyspark (>=3.5.0)"] +sqlframe = ["sqlframe (>=3.22.0)"] +tests = ["covdefaults", "hypothesis", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] +typing = ["mypy (>=1.15.0,<1.16.0)", "pandas-stubs", "pyright", "typing-extensions"] [[package]] name = "nbclient" @@ -2841,6 +3042,7 @@ version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.9.0" +groups = ["examples"] files = [ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, @@ -2863,6 +3065,7 @@ version = "7.16.6" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, @@ -2900,6 +3103,7 @@ version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -2921,10 +3125,12 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" +groups = ["examples", "export"] files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "netcdf4" @@ -2932,6 +3138,8 @@ version = "1.7.2" description = "Provides an object-oriented python interface to the netCDF version 4 library" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "netCDF4-1.7.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5e9b485e3bd9294d25ff7dc9addefce42b3d23c1ee7e3627605277d159819392"}, {file = "netCDF4-1.7.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:118b476fd00d7e3ab9aa7771186d547da645ae3b49c0c7bdab866793ebf22f07"}, @@ -2979,10 +3187,12 @@ version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.9" +groups = ["main", "export"] files = [ {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] @@ -2993,18 +3203,19 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "notebook" -version = "7.3.2" +version = "7.3.3" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ - {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"}, - {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"}, + {file = "notebook-7.3.3-py3-none-any.whl", hash = "sha256:b193df0878956562d5171c8e25c9252b8e86c9fcc16163b8ee3fe6c5e3f422f7"}, + {file = "notebook-7.3.3.tar.gz", hash = "sha256:707a313fb882d35f921989eb3d204de942ed5132a44e4aa1fe0e8f24bb9dc25d"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.3.4,<4.4" +jupyterlab = ">=4.3.6,<4.4" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -3012,7 +3223,7 @@ tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -3020,6 +3231,7 @@ version = "0.2.4" description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -3037,6 +3249,8 @@ version = "0.12.1" description = "A Python package providing buffer compression and transformation codecs for use in data storage and communication applications." optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "numcodecs-0.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d37f628fe92b3699e65831d5733feca74d2e33b50ef29118ffd41c13c677210e"}, {file = "numcodecs-0.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:941b7446b68cf79f089bcfe92edaa3b154533dcbcd82474f994b28f2eedb1c60"}, @@ -3077,6 +3291,7 @@ version = "2.0.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" +groups = ["main", "export"] files = [ {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, @@ -3124,31 +3339,36 @@ files = [ {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, ] +markers = {export = "python_version < \"3.11\""} [[package]] name = "opentelemetry-api" -version = "1.16.0" +version = "1.31.0" description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "opentelemetry_api-1.16.0-py3-none-any.whl", hash = "sha256:79e8f0cf88dbdd36b6abf175d2092af1efcaa2e71552d0d2b3b181a9707bf4bc"}, - {file = "opentelemetry_api-1.16.0.tar.gz", hash = "sha256:4b0e895a3b1f5e1908043ebe492d33e33f9ccdbe6d02d3994c2f8721a63ddddb"}, + {file = "opentelemetry_api-1.31.0-py3-none-any.whl", hash = "sha256:145b72c6c16977c005c568ec32f4946054ab793d8474a17fd884b0397582c5f2"}, + {file = "opentelemetry_api-1.31.0.tar.gz", hash = "sha256:d8da59e83e8e3993b4726e4c1023cd46f57c4d5a73142e239247e7d814309de1"}, ] [package.dependencies] deprecated = ">=1.2.6" -setuptools = ">=16.0" +importlib-metadata = ">=6.0,<8.7.0" [[package]] name = "orderly-set" -version = "5.2.3" +version = "5.3.0" description = "Orderly set" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "orderly_set-5.2.3-py3-none-any.whl", hash = "sha256:d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"}, - {file = "orderly_set-5.2.3.tar.gz", hash = "sha256:571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"}, + {file = "orderly_set-5.3.0-py3-none-any.whl", hash = "sha256:c2c0bfe604f5d3d9b24e8262a06feb612594f37aa3845650548befd7772945d1"}, + {file = "orderly_set-5.3.0.tar.gz", hash = "sha256:80b3d8fdd3d39004d9aad389eaa0eab02c71f0a0511ba3a6d54a935a6c6a0acc"}, ] [[package]] @@ -3157,6 +3377,7 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["examples"] files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -3168,10 +3389,12 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs", "examples", "export"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "paginate" @@ -3179,6 +3402,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -3194,6 +3418,8 @@ version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -3278,6 +3504,7 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["examples"] files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -3289,10 +3516,12 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["dev", "examples", "export"] files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] @@ -3304,6 +3533,8 @@ version = "1.4.2" description = "Appendable key-value storage" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, @@ -3322,6 +3553,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -3333,6 +3565,8 @@ version = "3.2.3" description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pathvalidate-3.2.3-py3-none-any.whl", hash = "sha256:5eaf0562e345d4b6d0c0239d0f690c3bd84d2a9a3c4c73b99ea667401b27bee1"}, {file = "pathvalidate-3.2.3.tar.gz", hash = "sha256:59b5b9278e30382d6d213497623043ebe63f10e29055be4419a9c04c721739cb"}, @@ -3349,10 +3583,12 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["dev", "examples", "export"] files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] +markers = {dev = "sys_platform != \"win32\"", examples = "sys_platform != \"win32\"", export = "python_version < \"3.11\" and sys_platform != \"win32\""} [package.dependencies] ptyprocess = ">=0.5" @@ -3363,6 +3599,8 @@ version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, @@ -3442,7 +3680,7 @@ docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions"] +typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] [[package]] @@ -3451,10 +3689,12 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs", "examples", "export"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] @@ -3467,6 +3707,8 @@ version = "6.0.0" description = "An open-source, interactive data visualization library for Python" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "plotly-6.0.0-py3-none-any.whl", hash = "sha256:f708871c3a9349a68791ff943a5781b1ec04de7769ea69068adcd9202e57653a"}, {file = "plotly-6.0.0.tar.gz", hash = "sha256:c4aad38b8c3d65e4a5e7dd308b084143b9025c2cc9d5317fc1f1d30958db87d3"}, @@ -3485,6 +3727,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3500,6 +3743,8 @@ version = "1.8.2" description = "A friend to fetch your data files" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"}, {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"}, @@ -3521,6 +3766,7 @@ version = "0.21.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, @@ -3535,42 +3781,39 @@ version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.8.0" +groups = ["dev", "examples", "export"] files = [ {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] +markers = {export = "python_version < \"3.11\""} [package.dependencies] wcwidth = "*" [[package]] name = "psutil" -version = "6.1.1" -description = "Cross-platform lib for process and system monitoring in Python." +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.6" +groups = ["examples", "export"] files = [ - {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, - {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, - {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, - {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, - {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, - {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, - {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, - {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, - {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, - {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, - {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, - {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, - {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, - {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, - {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] -dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] test = ["pytest", "pytest-xdist", "setuptools"] [[package]] @@ -3579,10 +3822,12 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["dev", "examples", "export"] files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +markers = {dev = "sys_platform != \"win32\"", examples = "sys_platform != \"win32\" or os_name != \"nt\"", export = "python_version < \"3.11\" and sys_platform != \"win32\""} [[package]] name = "pure-eval" @@ -3590,63 +3835,67 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["dev", "examples", "export"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] tests = ["pytest"] [[package]] name = "pyarrow" -version = "19.0.0" +version = "19.0.1" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" -files = [ - {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"}, - {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"}, - {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503"}, - {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17"}, - {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34"}, - {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44"}, - {file = "pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c"}, - {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a"}, - {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735"}, - {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4"}, - {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1"}, - {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042"}, - {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263"}, - {file = "pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2"}, - {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68"}, - {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351"}, - {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b"}, - {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c"}, - {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451"}, - {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1"}, - {file = "pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136"}, - {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463"}, - {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352"}, - {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d"}, - {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae"}, - {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098"}, - {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04"}, - {file = "pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9"}, - {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560"}, - {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849"}, - {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e"}, - {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5"}, - {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73"}, - {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89"}, - {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a"}, - {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7"}, - {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8"}, - {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d"}, - {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1"}, - {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d"}, - {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, - {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69"}, + {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76aef7f5f7e4a757fddcdcf010a8290958f09e3470ea458c80d26f4316ae89"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d03c9d6f2a3dffbd62671ca070f13fc527bb1867b4ec2b98c7eeed381d4f389a"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:65cf9feebab489b19cdfcfe4aa82f62147218558d8d3f0fc1e9dea0ab8e7905a"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:41f9706fbe505e0abc10e84bf3a906a1338905cbbcf1177b71486b03e6ea6608"}, + {file = "pyarrow-19.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb2335a411b713fdf1e82a752162f72d4a7b5dbc588e32aa18383318b05866"}, + {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90"}, + {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6"}, + {file = "pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466"}, + {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b"}, + {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832"}, + {file = "pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960"}, + {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e45274b20e524ae5c39d7fc1ca2aa923aab494776d2d4b316b49ec7572ca324c"}, + {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d9dedeaf19097a143ed6da37f04f4051aba353c95ef507764d344229b2b740ae"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebfb5171bb5f4a52319344ebbbecc731af3f021e49318c74f33d520d31ae0c4"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a21d39fbdb948857f67eacb5bbaaf36802de044ec36fbef7a1c8f0dd3a4ab2"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:99bc1bec6d234359743b01e70d4310d0ab240c3d6b0da7e2a93663b0158616f6"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1b93ef2c93e77c442c979b0d596af45e4665d8b96da598db145b0fec014b9136"}, + {file = "pyarrow-19.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9d46e06846a41ba906ab25302cf0fd522f81aa2a85a71021826f34639ad31ef"}, + {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c0fe3dbbf054a00d1f162fda94ce236a899ca01123a798c561ba307ca38af5f0"}, + {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:96606c3ba57944d128e8a8399da4812f56c7f61de8c647e3470b417f795d0ef9"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f04d49a6b64cf24719c080b3c2029a3a5b16417fd5fd7c4041f94233af732f3"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9137cf7e1640dce4c190551ee69d478f7121b5c6f323553b319cac936395f6"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7c1bca1897c28013db5e4c83944a2ab53231f541b9e0c3f4791206d0c0de389a"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:58d9397b2e273ef76264b45531e9d552d8ec8a6688b7390b5be44c02a37aade8"}, + {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b9766a47a9cb56fefe95cb27f535038b5a195707a08bf61b180e642324963b46"}, + {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:6c5941c1aac89a6c2f2b16cd64fe76bcdb94b2b1e99ca6459de4e6f07638d755"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd44d66093a239358d07c42a91eebf5015aa54fccba959db899f932218ac9cc8"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:335d170e050bcc7da867a1ed8ffb8b44c57aaa6e0843b156a501298657b1e972"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:1c7556165bd38cf0cd992df2636f8bcdd2d4b26916c6b7e646101aff3c16f76f"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:699799f9c80bebcf1da0983ba86d7f289c5a2a5c04b945e2f2bcf7e874a91911"}, + {file = "pyarrow-19.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8464c9fbe6d94a7fe1599e7e8965f350fd233532868232ab2596a71586c5a429"}, + {file = "pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e"}, ] [package.extras] @@ -3658,10 +3907,12 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +markers = {export = "python_version < \"3.10\" and implementation_name == \"pypy\""} [[package]] name = "pydantic" @@ -3669,6 +3920,8 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -3681,7 +3934,7 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" @@ -3689,6 +3942,8 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -3801,6 +4056,8 @@ version = "3.5" description = "A pure python implementation of the Data Access Protocol." optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pydap-3.5-py3-none-any.whl", hash = "sha256:e157aefdbc26657ef531ecea73907bbf09a503499bfefada2f0ad5f3aaff4021"}, {file = "pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab"}, @@ -3832,23 +4089,26 @@ version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["dev", "docs", "examples", "export"] files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.14.2" +version = "10.14.3" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "pymdown_extensions-10.14.2-py3-none-any.whl", hash = "sha256:f45bc5892410e54fd738ab8ccd736098b7ff0cb27fdb4bf24d0a0c6584bc90e1"}, - {file = "pymdown_extensions-10.14.2.tar.gz", hash = "sha256:7a77b8116dc04193f2c01143760a43387bd9dc4aa05efacb7d838885a7791253"}, + {file = "pymdown_extensions-10.14.3-py3-none-any.whl", hash = "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9"}, + {file = "pymdown_extensions-10.14.3.tar.gz", hash = "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"}, ] [package.dependencies] @@ -3864,6 +4124,8 @@ version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -3878,6 +4140,7 @@ version = "1.9.0" description = "API to interact with the python pyproject.toml based projects" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"}, {file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"}, @@ -3897,6 +4160,8 @@ version = "5.15.11" description = "Python bindings for the Qt cross platform application toolkit" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2"}, {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6"}, @@ -3916,6 +4181,8 @@ version = "5.15.2" description = "The subset of a Qt installation needed by PyQt5." optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154"}, {file = "PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a"}, @@ -3925,32 +4192,34 @@ files = [ [[package]] name = "pyqt5-sip" -version = "12.16.1" +version = "12.17.0" description = "The sip module support for PyQt5" optional = false python-versions = ">=3.9" -files = [ - {file = "PyQt5_sip-12.16.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:72e8be41f053cd2338d373b70cfa8f725f05c7551e014161ae0484c7ffdb5b3d"}, - {file = "PyQt5_sip-12.16.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:389ea632df16794325652fe1a84d4ea77c7ed0240040979dada725473ad1d875"}, - {file = "PyQt5_sip-12.16.1-cp310-cp310-win32.whl", hash = "sha256:b3bfe33e849818a32164fc19346fc889a47ba8b23f803508eac9a5d9d06f59d9"}, - {file = "PyQt5_sip-12.16.1-cp310-cp310-win_amd64.whl", hash = "sha256:7fd6fbff57ba2cda32f1d5ea49500cff6f29e1cafdf41f40b99ed744bdac14a0"}, - {file = "PyQt5_sip-12.16.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09bfdb5f9adea15a542cbe4b89873a6b290c4f1669f66bb5f1a24993ce8bbdd0"}, - {file = "PyQt5_sip-12.16.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:98b99fcdebbbfc999f4ab10829749151eb371b79201ecd98f20e934c16d0193e"}, - {file = "PyQt5_sip-12.16.1-cp311-cp311-win32.whl", hash = "sha256:67dbdc1b3be045caebfc75ee87966e23c6bee61d94cb634ddd71b634c9089890"}, - {file = "PyQt5_sip-12.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:8afd633d5f35e4e5205680d310800d10d30fcbfb6bb7b852bfaa31097c1be449"}, - {file = "PyQt5_sip-12.16.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f6724c590de3d556c730ebda8b8f906b38373934472209e94d99357b52b56f5f"}, - {file = "PyQt5_sip-12.16.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:633cba509a98bd626def951bb948d4e736635acbd0b7fabd7be55a3a096a8a0b"}, - {file = "PyQt5_sip-12.16.1-cp312-cp312-win32.whl", hash = "sha256:2b35ff92caa569e540675ffcd79ffbf3e7092cccf7166f89e2a8b388db80aa1c"}, - {file = "PyQt5_sip-12.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:a0f83f554727f43dfe92afbf3a8c51e83bb8b78c5f160b635d4359fad681cebe"}, - {file = "PyQt5_sip-12.16.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2349f118dc6f01ee71fe57d8bab9e606ecf241468989abb23b5691d5538d7a69"}, - {file = "PyQt5_sip-12.16.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bbabdcc031e40417333bdd9e59d8add815c8f0663ebfcbcd3024bdeb55f35e9c"}, - {file = "PyQt5_sip-12.16.1-cp313-cp313-win32.whl", hash = "sha256:b6d06f6b49c7cd70db44277e21134390dcabb709da434d63754c9968ff6d98e2"}, - {file = "PyQt5_sip-12.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:e2bd572cfb969089c2813c85d6e1393ec1a0aeecebc53934ba9f062acf440b50"}, - {file = "PyQt5_sip-12.16.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:639d0f3767f17c9b7e2c1161a563f1a8da8dc16a348f9fc24314882c0ba57c5e"}, - {file = "PyQt5_sip-12.16.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c2b99bbd915f7649536b46be6f4740122c0ff1a76dc3dcb0c856c7cc770b3545"}, - {file = "PyQt5_sip-12.16.1-cp39-cp39-win32.whl", hash = "sha256:9f6878df5cca870cd48b406c48136842c02f7b0e2a3b7c47cb84dcddcebc5758"}, - {file = "PyQt5_sip-12.16.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffd748efbc9396a7a72de0d617acfd248c04e02dd28cd80e6bc3bf26214786e7"}, - {file = "pyqt5_sip-12.16.1.tar.gz", hash = "sha256:8c831f8b619811a32369d72339faa50ae53a963f5fdfa4d71f845c63e9673125"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "PyQt5_sip-12.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec47914cc751608e587c1c2fdabeaf4af7fdc28b9f62796c583bea01c1a1aa3e"}, + {file = "PyQt5_sip-12.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2f2a8dcc7626fe0da73a0918e05ce2460c7a14ddc946049310e6e35052105434"}, + {file = "PyQt5_sip-12.17.0-cp310-cp310-win32.whl", hash = "sha256:0c75d28b8282be3c1d7dbc76950d6e6eba1e334783224e9b9835ce1a9c64f482"}, + {file = "PyQt5_sip-12.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c4bc535bae0dfa764e8534e893619fe843ce5a2e25f901c439bcb960114f686"}, + {file = "PyQt5_sip-12.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2c912807dd638644168ea8c7a447bfd9d85a19471b98c2c588c4d2e911c09b0a"}, + {file = "PyQt5_sip-12.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:71514a7d43b44faa1d65a74ad2c5da92c03a251bdc749f009c313f06cceacc9a"}, + {file = "PyQt5_sip-12.17.0-cp311-cp311-win32.whl", hash = "sha256:023466ae96f72fbb8419b44c3f97475de6642fa5632520d0f50fc1a52a3e8200"}, + {file = "PyQt5_sip-12.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb565469d08dcb0a427def0c45e722323beb62db79454260482b6948bfd52d47"}, + {file = "PyQt5_sip-12.17.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ea08341c8a5da00c81df0d689ecd4ee47a95e1ecad9e362581c92513f2068005"}, + {file = "PyQt5_sip-12.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a92478d6808040fbe614bb61500fbb3f19f72714b99369ec28d26a7e3494115"}, + {file = "PyQt5_sip-12.17.0-cp312-cp312-win32.whl", hash = "sha256:b0ff280b28813e9bfd3a4de99490739fc29b776dc48f1c849caca7239a10fc8b"}, + {file = "PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c"}, + {file = "PyQt5_sip-12.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c7a7ff355e369616b6bcb41d45b742327c104b2bf1674ec79b8d67f8f2fa9543"}, + {file = "PyQt5_sip-12.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:419b9027e92b0b707632c370cfc6dc1f3b43c6313242fc4db57a537029bd179c"}, + {file = "PyQt5_sip-12.17.0-cp313-cp313-win32.whl", hash = "sha256:351beab964a19f5671b2a3e816ecf4d3543a99a7e0650f88a947fea251a7589f"}, + {file = "PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca"}, + {file = "PyQt5_sip-12.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d65a9c1b4cbbd8e856254609f56e897d2cb5c903f77b75fb720cb3a32c76b92b"}, + {file = "PyQt5_sip-12.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:32b03e7e77ecd7b4119eba486b0706fa59b490bcceb585f9b6ddec8a582082db"}, + {file = "PyQt5_sip-12.17.0-cp39-cp39-win32.whl", hash = "sha256:5b6c734f4ad28f3defac4890ed747d391d246af279200935d49953bc7d915b8c"}, + {file = "PyQt5_sip-12.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:855e8f5787d57e26a48d8c3de1220a8e92ab83be8d73966deac62fdae03ea2f9"}, + {file = "pyqt5_sip-12.17.0.tar.gz", hash = "sha256:682dadcdbd2239af9fdc0c0628e2776b820e128bec88b49b8d692fe682f90b4f"}, ] [[package]] @@ -3959,6 +4228,8 @@ version = "0.13.7" description = "Scientific Graphics and GUI Library for Python" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a"}, {file = "pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3"}, @@ -3973,6 +4244,8 @@ version = "3.5" description = "Python Serial Port Extension" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, @@ -3983,13 +4256,14 @@ cp2110 = ["hidapi"] [[package]] name = "pytest" -version = "8.3.4" +version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, - {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, ] [package.dependencies] @@ -4005,13 +4279,14 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-cov" -version = "6.0.0" +version = "6.1.1" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ - {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, - {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, + {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, + {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, ] [package.dependencies] @@ -4027,40 +4302,45 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["docs", "examples", "export"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] six = ">=1.5" [[package]] name = "python-json-logger" -version = "3.2.1" +version = "3.3.0" description = "JSON Log Formatter for the Python Logging Package" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ - {file = "python_json_logger-3.2.1-py3-none-any.whl", hash = "sha256:cdc17047eb5374bd311e748b42f99d71223f3b0e186f4206cc5d52aefe85b090"}, - {file = "python_json_logger-3.2.1.tar.gz", hash = "sha256:8eb0554ea17cb75b05d2848bc14fb02fbdbd9d6972120781b974380bfa162008"}, + {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, + {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, ] [package.dependencies] typing_extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] [[package]] name = "pytz" -version = "2024.2" +version = "2025.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, - {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, + {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, + {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, ] [[package]] @@ -4069,6 +4349,8 @@ version = "1.14.1" description = "Python VISA bindings for GPIB, RS232, TCPIP and USB instruments" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "PyVISA-1.14.1-py3-none-any.whl", hash = "sha256:6e4dfc9b6029b4f00d0d4960348c4889c2747aa7f83276950d48a349eab36a45"}, {file = "PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79"}, @@ -4079,44 +4361,47 @@ typing-extensions = "*" [[package]] name = "pywin32" -version = "308" +version = "310" description = "Python for Window Extensions" optional = false python-versions = "*" -files = [ - {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, - {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, - {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, - {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, - {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, - {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, - {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, - {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, - {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, - {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, - {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, - {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, - {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, - {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, - {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, - {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, - {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, - {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, -] +groups = ["examples", "export"] +files = [ + {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, + {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, + {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, + {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, + {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, + {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, + {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, + {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, + {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, + {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, + {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, + {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, + {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, + {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, + {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, + {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, +] +markers = {examples = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"", export = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" and python_version < \"3.10\""} [[package]] name = "pywinpty" -version = "2.0.14" +version = "2.0.15" description = "Pseudo terminal support for Windows from Python." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["examples"] +markers = "os_name == \"nt\"" files = [ - {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, - {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, - {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"}, - {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"}, - {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"}, - {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"}, + {file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"}, + {file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"}, + {file = "pywinpty-2.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc"}, + {file = "pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408"}, + {file = "pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901"}, + {file = "pywinpty-2.0.15-cp39-cp39-win_amd64.whl", hash = "sha256:d261cd88fcd358cfb48a7ca0700db3e1c088c9c10403c9ebc0d8a8b57aa6a117"}, + {file = "pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2"}, ] [[package]] @@ -4125,6 +4410,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["docs", "examples", "export"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -4180,6 +4466,7 @@ files = [ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "pyyaml-env-tag" @@ -4187,6 +4474,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -4197,121 +4485,107 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "26.2.0" +version = "26.3.0" description = "Python bindings for 0MQ" optional = false -python-versions = ">=3.7" -files = [ - {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, - {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, - {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, - {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, - {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, - {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, - {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, - {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, - {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, - {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, - {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, - {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, - {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, - {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, - {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, - {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, - {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, - {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, - {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, - {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, - {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, - {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, - {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, - {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, - {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, - {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, - {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, - {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, - {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, - {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, - {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, - {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, - {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, - {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, - {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, - {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, - {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, - {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, - {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, - {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, - {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, - {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, - {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, - {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, - {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, - {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, - {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, - {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, - {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, - {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, - {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, - {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, - {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, - {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, - {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, -] +python-versions = ">=3.8" +groups = ["examples", "export"] +files = [ + {file = "pyzmq-26.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1586944f4736515af5c6d3a5b150c7e8ca2a2d6e46b23057320584d6f2438f4a"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7efc695d1fc9f72d91bf9b6c6fe2d7e1b4193836ec530a98faf7d7a7577a58"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd84441e4021cec6e4dd040550386cd9c9ea1d9418ea1a8002dbb7b576026b2b"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9176856f36c34a8aa5c0b35ddf52a5d5cd8abeece57c2cd904cfddae3fd9acd3"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:49334faa749d55b77f084389a80654bf2e68ab5191c0235066f0140c1b670d64"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd30fc80fe96efb06bea21667c5793bbd65c0dc793187feb39b8f96990680b00"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b2eddfbbfb473a62c3a251bb737a6d58d91907f6e1d95791431ebe556f47d916"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:70b3acb9ad729a53d4e751dace35404a024f188aad406013454216aba5485b4e"}, + {file = "pyzmq-26.3.0-cp310-cp310-win32.whl", hash = "sha256:c1bd75d692cd7c6d862a98013bfdf06702783b75cffbf5dae06d718fecefe8f2"}, + {file = "pyzmq-26.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d7165bcda0dbf203e5ad04d79955d223d84b2263df4db92f525ba370b03a12ab"}, + {file = "pyzmq-26.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:e34a63f71d2ecffb3c643909ad2d488251afeb5ef3635602b3448e609611a7ed"}, + {file = "pyzmq-26.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:2833602d9d42c94b9d0d2a44d2b382d3d3a4485be018ba19dddc401a464c617a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8270d104ec7caa0bdac246d31d48d94472033ceab5ba142881704350b28159c"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c208a977843d18d3bd185f323e4eaa912eb4869cb230947dc6edd8a27a4e558a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eddc2be28a379c218e0d92e4a432805dcb0ca5870156a90b54c03cd9799f9f8a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c0b519fa2159c42272f8a244354a0e110d65175647e5185b04008ec00df9f079"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1595533de3a80bf8363372c20bafa963ec4bf9f2b8f539b1d9a5017f430b84c9"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bbef99eb8d18ba9a40f00e8836b8040cdcf0f2fa649684cf7a66339599919d21"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:979486d444ca3c469cd1c7f6a619ce48ff08b3b595d451937db543754bfacb65"}, + {file = "pyzmq-26.3.0-cp311-cp311-win32.whl", hash = "sha256:4b127cfe10b4c56e4285b69fd4b38ea1d368099ea4273d8fb349163fce3cd598"}, + {file = "pyzmq-26.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cf736cc1298ef15280d9fcf7a25c09b05af016656856dc6fe5626fd8912658dd"}, + {file = "pyzmq-26.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2dc46ec09f5d36f606ac8393303149e69d17121beee13c8dac25e2a2078e31c4"}, + {file = "pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66"}, + {file = "pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37"}, + {file = "pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495"}, + {file = "pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d"}, + {file = "pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36"}, + {file = "pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14"}, + {file = "pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca"}, + {file = "pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce"}, + {file = "pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f"}, + {file = "pyzmq-26.3.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18183cc3851b995fdc7e5f03d03b8a4e1b12b0f79dff1ec1da75069af6357a05"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da87e977f92d930a3683e10ba2b38bcc59adfc25896827e0b9d78b208b7757a6"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf6db401f4957afbf372a4730c6d5b2a234393af723983cbf4bcd13d54c71e1a"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03caa2ffd64252122139d50ec92987f89616b9b92c9ba72920b40e92709d5e26"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fbf206e5329e20937fa19bd41cf3af06d5967f8f7e86b59d783b26b40ced755c"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6fb539a6382a048308b409d8c66d79bf636eda1b24f70c78f2a1fd16e92b037b"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7897b8c8bbbb2bd8cad887bffcb07aede71ef1e45383bd4d6ac049bf0af312a4"}, + {file = "pyzmq-26.3.0-cp38-cp38-win32.whl", hash = "sha256:91dead2daca698ae52ce70ee2adbb94ddd9b5f96877565fd40aa4efd18ecc6a3"}, + {file = "pyzmq-26.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:8c088e009a6d6b9f563336adb906e3a8d3fd64db129acc8d8fd0e9fe22b2dac8"}, + {file = "pyzmq-26.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2eaed0d911fb3280981d5495978152fab6afd9fe217fd16f411523665089cef1"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7998b60ef1c105846fb3bfca494769fde3bba6160902e7cd27a8df8257890ee9"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:96c0006a8d1d00e46cb44c8e8d7316d4a232f3d8f2ed43179d4578dbcb0829b6"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e17cc198dc50a25a0f245e6b1e56f692df2acec3ccae82d1f60c34bfb72bbec"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:92a30840f4f2a31f7049d0a7de5fc69dd03b19bd5d8e7fed8d0bde49ce49b589"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f52eba83272a26b444f4b8fc79f2e2c83f91d706d693836c9f7ccb16e6713c31"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:952085a09ff32115794629ba47f8940896d7842afdef1283332109d38222479d"}, + {file = "pyzmq-26.3.0-cp39-cp39-win32.whl", hash = "sha256:0240289e33e3fbae44a5db73e54e955399179332a6b1d47c764a4983ec1524c3"}, + {file = "pyzmq-26.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b2db7c82f08b8ce44c0b9d1153ce63907491972a7581e8b6adea71817f119df8"}, + {file = "pyzmq-26.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:2d3459b6311463c96abcb97808ee0a1abb0d932833edb6aa81c30d622fd4a12d"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad03f4252d9041b0635c37528dfa3f44b39f46024ae28c8567f7423676ee409b"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f3dfb68cf7bf4cfdf34283a75848e077c5defa4907506327282afe92780084d"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:356ec0e39c5a9cda872b65aca1fd8a5d296ffdadf8e2442b70ff32e73ef597b1"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:749d671b0eec8e738bbf0b361168369d8c682b94fcd458c20741dc4d69ef5278"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f950f17ae608e0786298340163cac25a4c5543ef25362dd5ddb6dcb10b547be9"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4fc9903a73c25be9d5fe45c87faababcf3879445efa16140146b08fccfac017"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c15b69af22030960ac63567e98ad8221cddf5d720d9cf03d85021dfd452324ef"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cf9ab0dff4dbaa2e893eb608373c97eb908e53b7d9793ad00ccbd082c0ee12f"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ec332675f6a138db57aad93ae6387953763f85419bdbd18e914cb279ee1c451"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:eb96568a22fe070590942cd4780950e2172e00fb033a8b76e47692583b1bd97c"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:009a38241c76184cb004c869e82a99f0aee32eda412c1eb44df5820324a01d25"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c22a12713707467abedc6d75529dd365180c4c2a1511268972c6e1d472bd63e"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1614fcd116275d24f2346ffca4047a741c546ad9d561cbf7813f11226ca4ed2c"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e2cafe7e9c7fed690e8ecf65af119f9c482923b5075a78f6f7629c63e1b4b1d"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:14e0b81753424bd374075df6cc30b87f2c99e5f022501d97eff66544ca578941"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:21c6ddb98557a77cfe3366af0c5600fb222a1b2de5f90d9cd052b324e0c295e8"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fc81d5d60c9d40e692de14b8d884d43cf67562402b931681f0ccb3ce6b19875"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52b064fafef772d0f5dbf52d4c39f092be7bc62d9a602fe6e82082e001326de3"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b72206eb041f780451c61e1e89dbc3705f3d66aaaa14ee320d4f55864b13358a"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab78dc21c7b1e13053086bcf0b4246440b43b5409904b73bfd1156654ece8a1"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0b42403ad7d1194dca9574cd3c56691c345f4601fa2d0a33434f35142baec7ac"}, + {file = "pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3"}, +] +markers = {export = "python_version < \"3.10\""} [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} @@ -4322,6 +4596,8 @@ version = "0.11.2" description = "Instrument drivers for Qblox devices." optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504"}, ] @@ -4342,6 +4618,8 @@ version = "0.46.0" description = "Python-based data acquisition framework developed by the Copenhagen / Delft / Sydney / Microsoft quantum computing consortium" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "qcodes-0.46.0-py3-none-any.whl", hash = "sha256:6c7de543ef6048d82fad755a8ef5c4e63f866085314e2fb69f1a839bb39d0eff"}, {file = "qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99"}, @@ -4391,6 +4669,8 @@ version = "0.1.3" description = "Features previously in QCoDeS" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a"}, {file = "qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c"}, @@ -4420,6 +4700,8 @@ version = "0.7.9" description = "Quantify-core is a unified quantum computing, solid-state and pulse sequencing physical experimentation framework." optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "quantify_core-0.7.9-py3-none-any.whl", hash = "sha256:9aa4277371058a114d422e0c398efea6fc21024ce89573589d386ef2848d4291"}, {file = "quantify_core-0.7.9.tar.gz", hash = "sha256:bc0aabe3317577a9bf0d499fc4ac9ae1fcf63e18d0637fe18940e2fe18250f49"}, @@ -4459,6 +4741,8 @@ version = "0.18.2" description = "Quantify-scheduler is a Python package for writing quantum programs featuring a hybrid gate-pulse control model with explicit timing control." optional = false python-versions = "<3.10,>=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910"}, {file = "quantify_scheduler-0.18.2-py3-none-any.whl", hash = "sha256:761d1e85f53e3744a28a3e56382d162ada2face3b127e83ea0e40a050566a812"}, @@ -4487,7 +4771,7 @@ zhinst-qcodes = "0.1.4" zhinst-toolkit = "0.1.5" [package.extras] -dev = ["black", "coverage", "eval-type-backport", "pre-commit", "pre-commit-hooks", "prospector", "pyright (!=1.1.309)", "pytest-cov", "pytest-xdist", "quantify-scheduler[docs,test]", "ruff", "sphinx-autobuild"] +dev = ["black", "coverage", "eval-type-backport ; python_version < \"3.9\"", "pre-commit", "pre-commit-hooks", "prospector", "pyright (!=1.1.309)", "pytest-cov", "pytest-xdist", "quantify-scheduler[docs,test]", "ruff", "sphinx-autobuild"] docs = ["astroid (<3.0)", "hvplot", "jupyter-sphinx (>=0.4.0)", "jupytext", "myst-nb", "pydata-sphinx-theme", "pylint", "rich[jupyter]", "scanpydoc (<0.12)", "sphinx", "sphinx-autoapi", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema", "sphinx-togglebutton", "sphinxcontrib-bibtex", "sphinxcontrib-mermaid"] test = ["pytest", "pytest-mock"] @@ -4497,129 +4781,30 @@ version = "0.36.2" description = "JSON Referencing + Python" optional = false python-versions = ">=3.9" +groups = ["examples", "export"] files = [ {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} -[[package]] -name = "regex" -version = "2024.11.6" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, -] - [[package]] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["docs", "examples", "export"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] +markers = {export = "python_version < \"3.10\""} [package.dependencies] certifi = ">=2017.4.17" @@ -4637,6 +4822,7 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["examples"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -4651,6 +4837,7 @@ version = "0.1.1" description = "Pure python rfc3986 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["examples"] files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -4662,6 +4849,8 @@ version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -4678,115 +4867,117 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.22.3" +version = "0.23.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" -files = [ - {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, - {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, - {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, - {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, - {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, - {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, - {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, - {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, - {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, - {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, - {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, - {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, - {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, - {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, - {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, - {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, - {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, - {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, - {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, - {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, - {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, - {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, - {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, - {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, - {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, - {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, - {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, - {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, - {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, - {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, - {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, - {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, - {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, - {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, - {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, - {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, - {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, - {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, -] +groups = ["examples", "export"] +files = [ + {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, + {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a"}, + {file = "rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12"}, + {file = "rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522"}, + {file = "rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6"}, + {file = "rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad"}, + {file = "rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057"}, + {file = "rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93"}, + {file = "rpds_py-0.23.1-cp313-cp313-win32.whl", hash = "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd"}, + {file = "rpds_py-0.23.1-cp313-cp313-win_amd64.whl", hash = "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win32.whl", hash = "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f"}, + {file = "rpds_py-0.23.1-cp39-cp39-win32.whl", hash = "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495"}, + {file = "rpds_py-0.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00"}, + {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, +] +markers = {export = "python_version < \"3.10\""} [[package]] name = "ruamel-yaml" @@ -4794,6 +4985,8 @@ version = "0.18.10" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, @@ -4812,6 +5005,8 @@ version = "0.2.12" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "platform_python_implementation == \"CPython\" and python_version < \"3.10\"" files = [ {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, @@ -4863,29 +5058,30 @@ files = [ [[package]] name = "ruff" -version = "0.9.3" +version = "0.11.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" -files = [ - {file = "ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624"}, - {file = "ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c"}, - {file = "ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4"}, - {file = "ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519"}, - {file = "ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b"}, - {file = "ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c"}, - {file = "ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4"}, - {file = "ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b"}, - {file = "ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a"}, +groups = ["dev"] +files = [ + {file = "ruff-0.11.7-py3-none-linux_armv6l.whl", hash = "sha256:d29e909d9a8d02f928d72ab7837b5cbc450a5bdf578ab9ebee3263d0a525091c"}, + {file = "ruff-0.11.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dd1fb86b168ae349fb01dd497d83537b2c5541fe0626e70c786427dd8363aaee"}, + {file = "ruff-0.11.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d3d7d2e140a6fbbc09033bce65bd7ea29d6a0adeb90b8430262fbacd58c38ada"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4809df77de390a1c2077d9b7945d82f44b95d19ceccf0c287c56e4dc9b91ca64"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3a0c2e169e6b545f8e2dba185eabbd9db4f08880032e75aa0e285a6d3f48201"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49b888200a320dd96a68e86736cf531d6afba03e4f6cf098401406a257fcf3d6"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2b19cdb9cf7dae00d5ee2e7c013540cdc3b31c4f281f1dacb5a799d610e90db4"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64e0ee994c9e326b43539d133a36a455dbaab477bc84fe7bfbd528abe2f05c1e"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bad82052311479a5865f52c76ecee5d468a58ba44fb23ee15079f17dd4c8fd63"}, + {file = "ruff-0.11.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7940665e74e7b65d427b82bffc1e46710ec7f30d58b4b2d5016e3f0321436502"}, + {file = "ruff-0.11.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:169027e31c52c0e36c44ae9a9c7db35e505fee0b39f8d9fca7274a6305295a92"}, + {file = "ruff-0.11.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:305b93f9798aee582e91e34437810439acb28b5fc1fee6b8205c78c806845a94"}, + {file = "ruff-0.11.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a681db041ef55550c371f9cd52a3cf17a0da4c75d6bd691092dfc38170ebc4b6"}, + {file = "ruff-0.11.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:07f1496ad00a4a139f4de220b0c97da6d4c85e0e4aa9b2624167b7d4d44fd6b6"}, + {file = "ruff-0.11.7-py3-none-win32.whl", hash = "sha256:f25dfb853ad217e6e5f1924ae8a5b3f6709051a13e9dad18690de6c8ff299e26"}, + {file = "ruff-0.11.7-py3-none-win_amd64.whl", hash = "sha256:0a931d85959ceb77e92aea4bbedfded0a31534ce191252721128f77e5ae1f98a"}, + {file = "ruff-0.11.7-py3-none-win_arm64.whl", hash = "sha256:778c1e5d6f9e91034142dfd06110534ca13220bfaad5c3735f6cb844654f6177"}, + {file = "ruff-0.11.7.tar.gz", hash = "sha256:655089ad3224070736dc32844fde783454f8558e71f501cb207485fe4eee23d4"}, ] [[package]] @@ -4894,6 +5090,8 @@ version = "0.7.7" description = "Simple data validation library" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde"}, {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, @@ -4905,6 +5103,8 @@ version = "1.6.1" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"}, {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"}, @@ -4959,6 +5159,8 @@ version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, @@ -5001,35 +5203,38 @@ version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["examples"] files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, ] [package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] +nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] +objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] +win32 = ["pywin32 ; sys_platform == \"win32\""] [[package]] name = "setuptools" -version = "75.8.0" +version = "76.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["examples", "export"] files = [ - {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, - {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, + {file = "setuptools-76.0.0-py3-none-any.whl", hash = "sha256:199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6"}, + {file = "setuptools-76.0.0.tar.gz", hash = "sha256:43b4ee60e10b0d0ee98ad11918e114c70701bc6051662a9a675a0496c1a158f4"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "six" @@ -5037,10 +5242,12 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["docs", "examples", "export"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "sniffio" @@ -5048,6 +5255,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -5059,6 +5267,8 @@ version = "2.1.0" description = "Python Sorted Collections" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c"}, {file = "sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd"}, @@ -5073,6 +5283,8 @@ version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -5084,10 +5296,12 @@ version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "spirack" @@ -5095,6 +5309,8 @@ version = "0.2.5" description = "Drivers for the QuTech SPI-rack" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "spirack-0.2.5-py3-none-any.whl", hash = "sha256:ac144f0e43c7770281b08836f83c6f68369354397fd1394bb18a87af02d17b85"}, {file = "spirack-0.2.5.tar.gz", hash = "sha256:c1755286a3d851dd84e0d3e3021383a516748edd4b90a56ddbe7e446b0e1ec30"}, @@ -5110,10 +5326,12 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["dev", "examples", "export"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] +markers = {export = "python_version < \"3.11\""} [package.dependencies] asttokens = ">=2.1.0" @@ -5129,6 +5347,7 @@ version = "1.13.3" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" +groups = ["dev", "examples"] files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -5146,6 +5365,8 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -5160,6 +5381,7 @@ version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -5177,13 +5399,15 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "threadpoolctl" -version = "3.5.0" +version = "3.6.0" description = "threadpoolctl" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ - {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, - {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, + {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, + {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, ] [[package]] @@ -5192,6 +5416,7 @@ version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -5210,6 +5435,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "examples", "export"] files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -5244,6 +5470,7 @@ files = [ {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] +markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", examples = "python_version < \"3.11\"", export = "python_version < \"3.10\""} [[package]] name = "toolz" @@ -5251,6 +5478,8 @@ version = "1.0.0" description = "List processing tools and functional utilities" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, @@ -5262,6 +5491,7 @@ version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" +groups = ["examples", "export"] files = [ {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, @@ -5275,20 +5505,22 @@ files = [ {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "tox" -version = "4.24.1" +version = "4.25.0" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ - {file = "tox-4.24.1-py3-none-any.whl", hash = "sha256:57ba7df7d199002c6df8c2db9e6484f3de6ca8f42013c083ea2d4d1e5c6bdc75"}, - {file = "tox-4.24.1.tar.gz", hash = "sha256:083a720adbc6166fff0b7d1df9d154f9d00bfccb9403b8abf6bc0ee435d6a62e"}, + {file = "tox-4.25.0-py3-none-any.whl", hash = "sha256:4dfdc7ba2cc6fdc6688dde1b21e7b46ff6c41795fb54586c91a3533317b5255c"}, + {file = "tox-4.25.0.tar.gz", hash = "sha256:dd67f030317b80722cf52b246ff42aafd3ed27ddf331c415612d084304cf5e52"}, ] [package.dependencies] -cachetools = ">=5.5" +cachetools = ">=5.5.1" chardet = ">=5.2" colorama = ">=0.4.6" filelock = ">=3.16.1" @@ -5296,12 +5528,12 @@ packaging = ">=24.2" platformdirs = ">=4.3.6" pluggy = ">=1.5" pyproject-api = ">=1.8" -tomli = {version = ">=2.1", markers = "python_version < \"3.11\""} +tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.27.1" +virtualenv = ">=20.29.1" [package.extras] -test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.3)", "pytest-mock (>=3.14)"] +test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.4)", "pytest-mock (>=3.14)"] [[package]] name = "tqdm" @@ -5309,6 +5541,8 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -5330,10 +5564,12 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["dev", "examples", "export"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] +markers = {export = "python_version < \"3.11\""} [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] @@ -5345,6 +5581,7 @@ version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, @@ -5356,10 +5593,12 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs", "examples", "export"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +markers = {main = "python_version < \"3.11\"", docs = "python_version < \"3.11\"", export = "python_version < \"3.10\""} [[package]] name = "typing-inspect" @@ -5367,6 +5606,8 @@ version = "0.9.0" description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -5382,6 +5623,8 @@ version = "2025.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, @@ -5393,6 +5636,8 @@ version = "3.2.2" description = "calculations with values with uncertainties, error propagation" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7"}, {file = "uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b"}, @@ -5410,6 +5655,7 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" +groups = ["examples"] files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -5424,13 +5670,15 @@ version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" +groups = ["docs", "examples", "export"] files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] +markers = {export = "python_version < \"3.10\""} [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -5441,6 +5689,8 @@ version = "3.1.2" description = "Versioning It with your Version In Git" optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "versioningit-3.1.2-py3-none-any.whl", hash = "sha256:33c0905aeac7877b562171387c2c98af87b391aa9195f095455f21ddc47d4636"}, {file = "versioningit-3.1.2.tar.gz", hash = "sha256:4db83ed99f56b07d83940bee3445ca46ca120d13b6b304cdb5fb44e5aa4edec0"}, @@ -5453,13 +5703,14 @@ tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} [[package]] name = "virtualenv" -version = "20.29.1" +version = "20.29.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ - {file = "virtualenv-20.29.1-py3-none-any.whl", hash = "sha256:4e4cb403c0b0da39e13b46b1b2476e505cb0046b25f242bee80f62bf990b2779"}, - {file = "virtualenv-20.29.1.tar.gz", hash = "sha256:b8b8970138d32fb606192cb97f6cd4bb644fa486be9308fb9b63f81091b5dc35"}, + {file = "virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170"}, + {file = "virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac"}, ] [package.dependencies] @@ -5469,7 +5720,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "watchdog" @@ -5477,6 +5728,7 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -5519,10 +5771,12 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["dev", "examples", "export"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +markers = {export = "python_version < \"3.11\""} [[package]] name = "webcolors" @@ -5530,6 +5784,7 @@ version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.9" +groups = ["examples"] files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -5541,6 +5796,7 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" +groups = ["examples"] files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -5552,6 +5808,8 @@ version = "1.8.9" description = "WSGI request and response object" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9"}, {file = "webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589"}, @@ -5567,6 +5825,7 @@ version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" +groups = ["examples"] files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -5579,80 +5838,82 @@ test = ["websockets"] [[package]] name = "websockets" -version = "14.2" +version = "15.0.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" -files = [ - {file = "websockets-14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e8179f95323b9ab1c11723e5d91a89403903f7b001828161b480a7810b334885"}, - {file = "websockets-14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0d8c3e2cdb38f31d8bd7d9d28908005f6fa9def3324edb9bf336d7e4266fd397"}, - {file = "websockets-14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:714a9b682deb4339d39ffa674f7b674230227d981a37d5d174a4a83e3978a610"}, - {file = "websockets-14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e53c72052f2596fb792a7acd9704cbc549bf70fcde8a99e899311455974ca3"}, - {file = "websockets-14.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fbd68850c837e57373d95c8fe352203a512b6e49eaae4c2f4088ef8cf21980"}, - {file = "websockets-14.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b27ece32f63150c268593d5fdb82819584831a83a3f5809b7521df0685cd5d8"}, - {file = "websockets-14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4daa0faea5424d8713142b33825fff03c736f781690d90652d2c8b053345b0e7"}, - {file = "websockets-14.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:bc63cee8596a6ec84d9753fd0fcfa0452ee12f317afe4beae6b157f0070c6c7f"}, - {file = "websockets-14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a570862c325af2111343cc9b0257b7119b904823c675b22d4ac547163088d0d"}, - {file = "websockets-14.2-cp310-cp310-win32.whl", hash = "sha256:75862126b3d2d505e895893e3deac0a9339ce750bd27b4ba515f008b5acf832d"}, - {file = "websockets-14.2-cp310-cp310-win_amd64.whl", hash = "sha256:cc45afb9c9b2dc0852d5c8b5321759cf825f82a31bfaf506b65bf4668c96f8b2"}, - {file = "websockets-14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3bdc8c692c866ce5fefcaf07d2b55c91d6922ac397e031ef9b774e5b9ea42166"}, - {file = "websockets-14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c93215fac5dadc63e51bcc6dceca72e72267c11def401d6668622b47675b097f"}, - {file = "websockets-14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c9b6535c0e2cf8a6bf938064fb754aaceb1e6a4a51a80d884cd5db569886910"}, - {file = "websockets-14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a52a6d7cf6938e04e9dceb949d35fbdf58ac14deea26e685ab6368e73744e4c"}, - {file = "websockets-14.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f05702e93203a6ff5226e21d9b40c037761b2cfb637187c9802c10f58e40473"}, - {file = "websockets-14.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22441c81a6748a53bfcb98951d58d1af0661ab47a536af08920d129b4d1c3473"}, - {file = "websockets-14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd9b868d78b194790e6236d9cbc46d68aba4b75b22497eb4ab64fa640c3af56"}, - {file = "websockets-14.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1a5a20d5843886d34ff8c57424cc65a1deda4375729cbca4cb6b3353f3ce4142"}, - {file = "websockets-14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:34277a29f5303d54ec6468fb525d99c99938607bc96b8d72d675dee2b9f5bf1d"}, - {file = "websockets-14.2-cp311-cp311-win32.whl", hash = "sha256:02687db35dbc7d25fd541a602b5f8e451a238ffa033030b172ff86a93cb5dc2a"}, - {file = "websockets-14.2-cp311-cp311-win_amd64.whl", hash = "sha256:862e9967b46c07d4dcd2532e9e8e3c2825e004ffbf91a5ef9dde519ee2effb0b"}, - {file = "websockets-14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f20522e624d7ffbdbe259c6b6a65d73c895045f76a93719aa10cd93b3de100c"}, - {file = "websockets-14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:647b573f7d3ada919fd60e64d533409a79dcf1ea21daeb4542d1d996519ca967"}, - {file = "websockets-14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6af99a38e49f66be5a64b1e890208ad026cda49355661549c507152113049990"}, - {file = "websockets-14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:091ab63dfc8cea748cc22c1db2814eadb77ccbf82829bac6b2fbe3401d548eda"}, - {file = "websockets-14.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b374e8953ad477d17e4851cdc66d83fdc2db88d9e73abf755c94510ebddceb95"}, - {file = "websockets-14.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a39d7eceeea35db85b85e1169011bb4321c32e673920ae9c1b6e0978590012a3"}, - {file = "websockets-14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0a6f3efd47ffd0d12080594f434faf1cd2549b31e54870b8470b28cc1d3817d9"}, - {file = "websockets-14.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:065ce275e7c4ffb42cb738dd6b20726ac26ac9ad0a2a48e33ca632351a737267"}, - {file = "websockets-14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e9d0e53530ba7b8b5e389c02282f9d2aa47581514bd6049d3a7cffe1385cf5fe"}, - {file = "websockets-14.2-cp312-cp312-win32.whl", hash = "sha256:20e6dd0984d7ca3037afcb4494e48c74ffb51e8013cac71cf607fffe11df7205"}, - {file = "websockets-14.2-cp312-cp312-win_amd64.whl", hash = "sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce"}, - {file = "websockets-14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f1372e511c7409a542291bce92d6c83320e02c9cf392223272287ce55bc224e"}, - {file = "websockets-14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4da98b72009836179bb596a92297b1a61bb5a830c0e483a7d0766d45070a08ad"}, - {file = "websockets-14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8a86a269759026d2bde227652b87be79f8a734e582debf64c9d302faa1e9f03"}, - {file = "websockets-14.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86cf1aaeca909bf6815ea714d5c5736c8d6dd3a13770e885aafe062ecbd04f1f"}, - {file = "websockets-14.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b0f6c3ba3b1240f602ebb3971d45b02cc12bd1845466dd783496b3b05783a5"}, - {file = "websockets-14.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669c3e101c246aa85bc8534e495952e2ca208bd87994650b90a23d745902db9a"}, - {file = "websockets-14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eabdb28b972f3729348e632ab08f2a7b616c7e53d5414c12108c29972e655b20"}, - {file = "websockets-14.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2066dc4cbcc19f32c12a5a0e8cc1b7ac734e5b64ac0a325ff8353451c4b15ef2"}, - {file = "websockets-14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ab95d357cd471df61873dadf66dd05dd4709cae001dd6342edafc8dc6382f307"}, - {file = "websockets-14.2-cp313-cp313-win32.whl", hash = "sha256:a9e72fb63e5f3feacdcf5b4ff53199ec8c18d66e325c34ee4c551ca748623bbc"}, - {file = "websockets-14.2-cp313-cp313-win_amd64.whl", hash = "sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f"}, - {file = "websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe"}, - {file = "websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12"}, - {file = "websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7"}, - {file = "websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5"}, - {file = "websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0"}, - {file = "websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258"}, - {file = "websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0"}, - {file = "websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4"}, - {file = "websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc"}, - {file = "websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661"}, - {file = "websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef"}, - {file = "websockets-14.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d7d9cafbccba46e768be8a8ad4635fa3eae1ffac4c6e7cb4eb276ba41297ed29"}, - {file = "websockets-14.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c76193c1c044bd1e9b3316dcc34b174bbf9664598791e6fb606d8d29000e070c"}, - {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd475a974d5352390baf865309fe37dec6831aafc3014ffac1eea99e84e83fc2"}, - {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c6c0097a41968b2e2b54ed3424739aab0b762ca92af2379f152c1aef0187e1c"}, - {file = "websockets-14.2-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7ff794c8b36bc402f2e07c0b2ceb4a2424147ed4785ff03e2a7af03711d60a"}, - {file = "websockets-14.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dec254fcabc7bd488dab64846f588fc5b6fe0d78f641180030f8ea27b76d72c3"}, - {file = "websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f"}, - {file = "websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42"}, - {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f"}, - {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574"}, - {file = "websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270"}, - {file = "websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365"}, - {file = "websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b"}, - {file = "websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5"}, +groups = ["export"] +markers = "python_version < \"3.10\"" +files = [ + {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, + {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, + {file = "websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a"}, + {file = "websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e"}, + {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf"}, + {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb"}, + {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d"}, + {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9"}, + {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c"}, + {file = "websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256"}, + {file = "websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41"}, + {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431"}, + {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57"}, + {file = "websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905"}, + {file = "websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562"}, + {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792"}, + {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413"}, + {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8"}, + {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3"}, + {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf"}, + {file = "websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85"}, + {file = "websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065"}, + {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3"}, + {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665"}, + {file = "websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2"}, + {file = "websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215"}, + {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5"}, + {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65"}, + {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe"}, + {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4"}, + {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597"}, + {file = "websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9"}, + {file = "websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7"}, + {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931"}, + {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675"}, + {file = "websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151"}, + {file = "websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22"}, + {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f"}, + {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8"}, + {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375"}, + {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d"}, + {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4"}, + {file = "websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa"}, + {file = "websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561"}, + {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5"}, + {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a"}, + {file = "websockets-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b"}, + {file = "websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770"}, + {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb"}, + {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054"}, + {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee"}, + {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed"}, + {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880"}, + {file = "websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411"}, + {file = "websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04"}, + {file = "websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f"}, + {file = "websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123"}, + {file = "websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f"}, + {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] [[package]] @@ -5661,10 +5922,12 @@ version = "4.0.13" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" +groups = ["examples", "export"] files = [ {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, ] +markers = {export = "python_version < \"3.10\""} [[package]] name = "wirerope" @@ -5672,6 +5935,8 @@ version = "1.0.0" description = "'Turn functions and methods into fully controllable objects'" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6"}, {file = "wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0"}, @@ -5682,7 +5947,7 @@ six = ">=1.11.0" [package.extras] doc = ["sphinx"] -test = ["pytest (>=4.6.7)", "pytest-checkdocs (>=1.2.5)", "pytest-checkdocs (>=2.9.0)", "pytest-cov (>=2.6.1)"] +test = ["pytest (>=4.6.7)", "pytest-checkdocs (>=1.2.5) ; python_version < \"3\"", "pytest-checkdocs (>=2.9.0) ; python_version >= \"3\"", "pytest-cov (>=2.6.1)"] [[package]] name = "wrapt" @@ -5690,6 +5955,8 @@ version = "1.17.2" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, @@ -5778,6 +6045,8 @@ version = "2024.7.0" description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64"}, {file = "xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638"}, @@ -5800,7 +6069,7 @@ zarr = {version = "*", optional = true, markers = "extra == \"io\""} accel = ["bottleneck", "flox", "numbagg", "opt-einsum", "scipy"] complete = ["xarray[accel,dev,io,parallel,viz]"] dev = ["hypothesis", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff", "xarray[complete]"] -io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "scipy", "zarr"] +io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] parallel = ["dask[complete]"] viz = ["matplotlib", "nc-time-axis", "seaborn"] @@ -5810,6 +6079,8 @@ version = "3.5.0" description = "Python binding for xxHash" optional = false python-versions = ">=3.7" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, @@ -5942,6 +6213,8 @@ version = "2.18.2" description = "An implementation of chunked, compressed, N-dimensional arrays for Python" optional = false python-versions = ">=3.9" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38"}, {file = "zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47"}, @@ -5963,6 +6236,8 @@ version = "21.8.20515" description = "Python API for Zurich Instruments Devices" optional = false python-versions = "*" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "zhinst-21.8.20515-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:97f404b0f81209a8271f34dc56b95db5ba62f77c51c03fef39958fa39c1902c3"}, {file = "zhinst-21.8.20515-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2abc92ea573233c7402314cf2f952ed909e074ea8f2b0ac87ded84aa9ba39ad3"}, @@ -5994,6 +6269,8 @@ version = "0.1.4" description = "Zurich Instruents drivers for QCoDeS" optional = false python-versions = ">=3.6" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae"}, ] @@ -6012,6 +6289,8 @@ version = "0.1.5" description = "Zurich Instruments tools for high level device control" optional = false python-versions = ">=3.6" +groups = ["export"] +markers = "python_version < \"3.10\"" files = [ {file = "zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9"}, ] @@ -6028,20 +6307,22 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["docs", "examples", "export"] +markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.9" -content-hash = "227382df3f3f0c9c941810a7e242086570c8756e762da58daa80034e19eaea5c" +content-hash = "78f96c4af3a720770ce1fb6649d81443764cc5447f5f9ebb264c2b39a98ed3d5" diff --git a/pyproject.toml b/pyproject.toml index 26b345af..04fb08e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opensquirrel" -version = "0.3.1" +version = "0.4.0" description = "A quantum circuit transformation and manipulation tool" authors = [ "Quantum Inspire " @@ -30,7 +30,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.9" numpy = ">=1.26" -libqasm = "0.6.9" +libqasm = "1.2.0" networkx = "^3.0.0" tox = "^4.24.1" @@ -39,7 +39,7 @@ coverage = {extras = ["toml"], version = "^7.3.2"} pytest = {extras = ["toml"], version = ">=7.4.3,<9.0.0"} pytest-cov = ">=4.1,<7.0" mypy = "^1.7.0" -ruff = ">=0.5,<0.10" +ruff = ">=0.5,<0.12" tox = "^4.16.0" sympy = "^1.13.1" IPython = ">=7.12,<9.0" @@ -49,7 +49,7 @@ optional = true [tool.poetry.group.docs.dependencies] mkdocs = {extras = ["python"], version = "^1.5.3"} -mkdocstrings = {extras = ["python"], version = ">=0.24,<0.28"} +mkdocstrings = {extras = ["python"], version = ">=0.24,<0.30"} mkdocs_gen_files = {extras = ["python"], version = "^0.5.0"} mkdocs-material = "^9.4.12" mkdocs-literate-nav = "^0.6.1" @@ -155,6 +155,7 @@ select = [ ignore = [ "A005", # module shadowing a Python builtin module "ANN401", # typing.Any can be useful (for example in __eq__) + "B027", # Ignore the rule for empty methods in abstract base classes "COM812", # Conflicts with ruff format "ISC001", # Possible conflicts with ruff format "W605", # deprecated in Python 3.6 diff --git a/test/decomposer/test_cnot2cz_decomposer.py b/test/decomposer/test_cnot2cz_decomposer.py index 570aa575..0207df0b 100644 --- a/test/decomposer/test_cnot2cz_decomposer.py +++ b/test/decomposer/test_cnot2cz_decomposer.py @@ -4,8 +4,7 @@ import pytest -from opensquirrel.default_instructions import CNOT, CR, CZ, SWAP, CRk, H, Ry, X -from opensquirrel.ir import ControlledGate, Gate +from opensquirrel.ir import CNOT, CR, CZ, SWAP, ControlledGate, CRk, Gate, H, Ry, X from opensquirrel.passes.decomposer import CNOT2CZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement diff --git a/test/decomposer/test_cnot_decomposer.py b/test/decomposer/test_cnot_decomposer.py index 0ff4d08a..3fec41c1 100644 --- a/test/decomposer/test_cnot_decomposer.py +++ b/test/decomposer/test_cnot_decomposer.py @@ -4,7 +4,7 @@ import pytest -from opensquirrel import CNOT, CZ, H, Ry, Rz, X +from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz, X from opensquirrel.ir import ControlledGate, Gate from opensquirrel.passes.decomposer import CNOTDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -40,3 +40,20 @@ def test_CZ(decomposer: CNOTDecomposer) -> None: # noqa: N802 decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) assert decomposed_gate == [Rz(1, math.pi), Ry(1, math.pi / 2), CNOT(0, 1), Ry(1, -math.pi / 2), Rz(1, math.pi)] + + +@pytest.mark.parametrize( + "controlled_gate", + [ + CR(0, 1, math.pi / 2), + CR(0, 1, math.pi / 4), + CR(0, 1, 1 / math.sqrt(2)), + CRk(0, 1, 1), + CRk(0, 1, 2), + CRk(0, 1, 16), + ], + ids=["CR_1", "CR_2", "CR_3", "CRk_1", "CRk_2", "CRk_3"], +) +def test_controlled_gates(decomposer: CNOTDecomposer, controlled_gate: ControlledGate) -> None: + decomposed_gate = decomposer.decompose(controlled_gate) + check_gate_replacement(controlled_gate, decomposed_gate) diff --git a/test/decomposer/test_cz_decomposer.py b/test/decomposer/test_cz_decomposer.py new file mode 100644 index 00000000..20dd11c4 --- /dev/null +++ b/test/decomposer/test_cz_decomposer.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import math + +import pytest + +from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz, X +from opensquirrel.ir import ControlledGate, Gate +from opensquirrel.passes.decomposer import CZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> CZDecomposer: + return CZDecomposer() + + +@pytest.mark.parametrize(("gate", "expected_result"), [(H(0), [H(0)]), (Rz(0, 2.345), [Rz(0, 2.345)])]) +def test_ignores_1q_gates(decomposer: CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +def test_ignores_double_controlled(decomposer: CZDecomposer) -> None: + gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [gate] + + +def test_preserves_CZ(decomposer: CZDecomposer) -> None: # noqa: N802 + gate = CZ(0, 1) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [CZ(0, 1)] + + +def test_CNOT(decomposer: CZDecomposer) -> None: # noqa: N802 + gate = CNOT(0, 1) + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == [Ry(1, -math.pi / 2), CZ(0, 1), Ry(1, math.pi / 2)] + + +@pytest.mark.parametrize( + "controlled_gate", + [ + CR(0, 1, math.pi / 2), + CR(0, 1, math.pi / 4), + CR(0, 1, 1 / math.sqrt(2)), + CRk(0, 1, 1), + CRk(0, 1, 2), + CRk(0, 1, 16), + ], + ids=["CR_1", "CR_2", "CR_3", "CRk_1", "CRk_2", "CRk_3"], +) +def test_controlled_gates(decomposer: CZDecomposer, controlled_gate: ControlledGate) -> None: + decomposed_gate = decomposer.decompose(controlled_gate) + check_gate_replacement(controlled_gate, decomposed_gate) diff --git a/test/decomposer/test_mckay_decomposer.py b/test/decomposer/test_mckay_decomposer.py index 6aebd72c..db8c6d54 100644 --- a/test/decomposer/test_mckay_decomposer.py +++ b/test/decomposer/test_mckay_decomposer.py @@ -5,7 +5,7 @@ import numpy as np import pytest -from opensquirrel import CNOT, CR, X90, Y90, H, I, Rz, S, Sdag, X, Y, Z, mX90, mY90 +from opensquirrel import CNOT, CR, X90, Y90, H, I, MinusX90, MinusY90, Rz, S, SDagger, X, Y, Z from opensquirrel.ir import BlochSphereRotation, Gate from opensquirrel.passes.decomposer import McKayDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -122,11 +122,11 @@ def test_all_octants_of_bloch_sphere_rotation(decomposer: McKayDecomposer) -> No [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)], ), (X90(0), [X90(0)]), - (mX90(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), + (MinusX90(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), (Y90(0), [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi / 2)]), - (mY90(0), [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)]), + (MinusY90(0), [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)]), (S(0), [Rz(0, math.pi / 2)]), - (Sdag(0), [Rz(0, -math.pi / 2)]), + (SDagger(0), [Rz(0, -math.pi / 2)]), (H(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), ( BlochSphereRotation(qubit=0, axis=[1, 1, 0], angle=math.pi, phase=math.pi / 2), diff --git a/test/decomposer/test_swap2cnot_decomposer.py b/test/decomposer/test_swap2cnot_decomposer.py index b56d887a..ae7332be 100644 --- a/test/decomposer/test_swap2cnot_decomposer.py +++ b/test/decomposer/test_swap2cnot_decomposer.py @@ -5,7 +5,7 @@ import pytest -from opensquirrel.default_instructions import CNOT, CR, CZ, SWAP, CRk, H, Ry +from opensquirrel.ir import CNOT, CR, CZ, SWAP, CRk, H, Ry from opensquirrel.passes.decomposer import SWAP2CNOTDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement diff --git a/test/decomposer/test_swap2cz_decomposer.py b/test/decomposer/test_swap2cz_decomposer.py new file mode 100644 index 00000000..0a400975 --- /dev/null +++ b/test/decomposer/test_swap2cz_decomposer.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import math +from typing import TYPE_CHECKING + +import pytest + +from opensquirrel.ir import CNOT, CR, CZ, SWAP, CRk, H, Ry +from opensquirrel.passes.decomposer import SWAP2CZDecomposer +from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +@pytest.fixture(name="decomposer") +def decomposer_fixture() -> SWAP2CZDecomposer: + return SWAP2CZDecomposer() + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (H(0), [H(0)]), + (Ry(0, 2.345), [Ry(0, 2.345)]), + ], + ids=["Hadamard", "rotation_gate"], +) +def test_ignores_1q_gates(decomposer: SWAP2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + (CNOT(0, 1), [CNOT(0, 1)]), + (CR(0, 1, math.pi), [CR(0, 1, math.pi)]), + (CRk(0, 1, 2), [CRk(0, 1, 2)]), + (CZ(0, 1), [CZ(0, 1)]), + ], + ids=["CNOT_gate", "CR_gate", "CRk_gate", "CZ_gate"], +) +def test_ignores_2q_gates(decomposer: SWAP2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: + check_gate_replacement(gate, expected_result) + assert decomposer.decompose(gate) == expected_result + + +@pytest.mark.parametrize( + ("gate", "expected_result"), + [ + ( + SWAP(0, 1), + [ + Ry(1, -math.pi / 2), + CZ(0, 1), + Ry(1, math.pi / 2), + Ry(0, -math.pi / 2), + CZ(1, 0), + Ry(0, math.pi / 2), + Ry(1, -math.pi / 2), + CZ(0, 1), + Ry(1, math.pi / 2), + ], + ), + ( + SWAP(1, 0), + [ + Ry(0, -math.pi / 2), + CZ(1, 0), + Ry(0, math.pi / 2), + Ry(1, -math.pi / 2), + CZ(0, 1), + Ry(1, math.pi / 2), + Ry(0, -math.pi / 2), + CZ(1, 0), + Ry(0, math.pi / 2), + ], + ), + ], + ids=["SWAP_0_1", "SWAP_1_0"], +) +def test_decomposes_SWAP(decomposer: SWAP2CZDecomposer, gate: Gate, expected_result: list[Gate]) -> None: # noqa: N802 + decomposed_gate = decomposer.decompose(gate) + check_gate_replacement(gate, decomposed_gate) + assert decomposed_gate == expected_result diff --git a/test/decomposer/test_zyz_decomposer.py b/test/decomposer/test_zyz_decomposer.py index ed0b715e..9d674f9d 100644 --- a/test/decomposer/test_zyz_decomposer.py +++ b/test/decomposer/test_zyz_decomposer.py @@ -4,7 +4,7 @@ import pytest -from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, Sdag, X, Y, Z +from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, SDagger, X, Y, Z from opensquirrel.ir import BlochSphereRotation, Gate from opensquirrel.passes.decomposer import ZYZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -26,8 +26,8 @@ def test_identity(decomposer: ZYZDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (X(0), [S(0), Ry(0, math.pi), Sdag(0)]), - (Rx(0, 0.9), [S(0), Ry(0, 0.9), Sdag(0)]), + (X(0), [S(0), Ry(0, math.pi), SDagger(0)]), + (Rx(0, 0.9), [S(0), Ry(0, 0.9), SDagger(0)]), (Y(0), [Ry(0, math.pi)]), (Ry(0, 0.9), [Ry(0, 0.9)]), (Z(0), [Rz(0, math.pi)]), diff --git a/test/docs/test_tutorial.py b/test/docs/test_tutorial.py index 71c497e9..fb4e7214 100644 --- a/test/docs/test_tutorial.py +++ b/test/docs/test_tutorial.py @@ -1,9 +1,10 @@ import math +import numpy as np import pytest from opensquirrel import CNOT, CZ, Circuit, CircuitBuilder, H, Ry, Rz -from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate, QubitLike, named_gate +from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate, QubitLike from opensquirrel.passes.decomposer import ZYZDecomposer from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger @@ -128,8 +129,8 @@ def test_CNOT_strong_type_error_string() -> None: # noqa: N802 def test_anonymous_gate() -> None: builder = CircuitBuilder(1) - for _ in range(4): - builder.Rx(0, math.pi / 4) + builder.Rx(0, math.pi / 4) + builder.Rz(0, math.pi / 4) qc = builder.to_circuit() qc.merge(merger=SingleQubitGatesMerger()) @@ -140,42 +141,49 @@ def test_anonymous_gate() -> None: qubit[1] q -Rx(3.1415927) q[0] +Rn(0.67859835, 0.28108462, 0.67859835, 1.0960568, 0.0) q[0] """ ) def test_create_custom_gates() -> None: - @named_gate - def x(q: QubitLike) -> BlochSphereRotation: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) - - @named_gate - def cnot(control: QubitLike, target: QubitLike) -> ControlledGate: - return ControlledGate(control, x(target)) - - @named_gate - def swap(q1: QubitLike, q2: QubitLike) -> MatrixGate: - return MatrixGate( + class x(BlochSphereRotation): # noqa: N801 + def __init__(self, qubit: QubitLike) -> None: + BlochSphereRotation.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="x") + + class cnot(ControlledGate): # noqa: N801 + def __init__(self, control: QubitLike, target: QubitLike) -> None: + ControlledGate.__init__(self, control_qubit=control, target_gate=x(target), name="cnot") + + class swap(MatrixGate): # noqa: N801 + def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike) -> None: + MatrixGate.__init__( + self, + matrix=np.array( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ] + ), + operands=[qubit_0, qubit_1], + name="swap", + ) + + assert x(0) == BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="x") + assert cnot(0, 1) == ControlledGate(0, x(1), name="cnot") + assert swap(0, 1) == MatrixGate( + matrix=np.array( [ [1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1], - ], - [q1, q2], - ) - - assert x(0) == BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) - assert cnot(0, 1) == ControlledGate(0, x(1)) - assert swap(0, 1) == MatrixGate( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - [0, 1], + ] + ), + operands=[0, 1], + name="swap", ) @@ -228,7 +236,7 @@ def test_error_predefined_decomposition() -> None: """ ) with pytest.raises(ValueError, match=r"replacement for gate .*") as e_info: - qc.replace(CNOT, lambda control, target: [H(target), CZ(control, target)]) + qc.replace(CNOT, lambda control_qubit, target_qubit: [H(target_qubit), CZ(control_qubit, target_qubit)]) assert str(e_info.value) == "replacement for gate CNOT does not preserve the quantum state" diff --git a/test/mapper/test_simple_mappers.py b/test/mapper/test_simple_mappers.py index 27eacbf0..2fbb6e87 100644 --- a/test/mapper/test_simple_mappers.py +++ b/test/mapper/test_simple_mappers.py @@ -1,8 +1,11 @@ +# Tests for the simple mapper passes from __future__ import annotations +import random + import pytest -from opensquirrel.passes.mapper import HardcodedMapper, IdentityMapper +from opensquirrel.passes.mapper import HardcodedMapper, IdentityMapper, RandomMapper from opensquirrel.passes.mapper.mapping import Mapping from opensquirrel.utils import check_mapper @@ -31,3 +34,23 @@ def test_compliance(self, mapper: HardcodedMapper) -> None: def test_get_mapping(self, mapper: HardcodedMapper) -> None: assert mapper.get_mapping() == Mapping([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) + + +class TestRandomMapper: + @pytest.fixture(name="mapper") + def mapper_fixture(self) -> RandomMapper: + return RandomMapper(qubit_register_size=5) + + def test_compliance(self, mapper: RandomMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: RandomMapper) -> None: + assert len(mapper.get_mapping()) == 5 + + @pytest.mark.parametrize("seed, qubit_register_size", [(42, 5), (123, 10), (456, 20)]) # noqa PT006 + def test_mapping_uniqueness(self, seed: int, qubit_register_size: int) -> None: + random.seed(seed) + mapper = RandomMapper(qubit_register_size=qubit_register_size) + original_mapping = Mapping(list(range(qubit_register_size))) + new_mapping = mapper.get_mapping() + assert new_mapping != original_mapping diff --git a/test/merger/test_single_qubit_gates_merger.py b/test/merger/test_single_qubit_gates_merger.py index e75f5584..27039bde 100644 --- a/test/merger/test_single_qubit_gates_merger.py +++ b/test/merger/test_single_qubit_gates_merger.py @@ -3,7 +3,7 @@ import pytest from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.ir import BlochSphereRotation, Float +from opensquirrel.ir import BlochSphereRotation, Float, Rn from opensquirrel.passes.merger import SingleQubitGatesMerger from opensquirrel.passes.merger.general_merger import rearrange_barriers from test.ir_equality_test_base import modify_circuit_and_check @@ -61,7 +61,7 @@ def test_merge_different_qubits(merger: SingleQubitGatesMerger) -> None: circuit = builder1.to_circuit() builder2 = CircuitBuilder(4) - builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.ir.add_gate(Rn(0, 1, 0, 1, math.pi, 0)) # this is Hadamard with 0 phase builder2.Rz(1, 1.2345) builder2.Ry(2, Float(4.234)) expected_circuit = builder2.to_circuit() @@ -185,12 +185,12 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: qubit[2] q -Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.60376 -0.52053 0.60376], angle=-2.18173, phase=1.5708) -Anonymous gate: BlochSphereRotation(Qubit[1], axis=[0.36644 0.85525 0.36644], angle=-1.72653, phase=1.5708) +Rn(0.60376021, -0.52052591, 0.60376021, -2.1817262, 1.5707963) q[0] +Rn(0.36643768, 0.85524666, 0.36643768, -1.7265283, 1.5707963) q[1] barrier q[0] barrier q[1] H q[0] -Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.28903 -0.42028 -0.86013], angle=1.66208, phase=1.5708) +Rn(0.28903179, -0.42027578, -0.86013307, 1.6620774, 1.5707963) q[1] barrier q[0] barrier q[1] """, @@ -215,12 +215,12 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: qubit[3] q -Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +Rn(0.97706127, 0.0, -0.21295839, 3.1415927, 1.5707963) q[0] barrier q[2] barrier q[0] barrier q[1] H q[0] -Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +Rn(0.97706127, 0.0, -0.21295839, 3.1415927, 1.5707963) q[1] H q[2] barrier q[1] barrier q[2] @@ -244,12 +244,12 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: qubit[2] q -Anonymous gate: BlochSphereRotation(Qubit[0], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +Rn(0.97706127, 0.0, -0.21295839, 3.1415927, 1.5707963) q[0] barrier q[1] barrier q[0] barrier q[1] H q[0] -Anonymous gate: BlochSphereRotation(Qubit[1], axis=[ 0.97706 0. -0.21296], angle=3.14159, phase=1.5708) +Rn(0.97706127, 0.0, -0.21295839, 3.1415927, 1.5707963) q[1] barrier q[1] """, ), diff --git a/test/parser/libqasm/test_libqasm.py b/test/parser/libqasm/test_libqasm.py index 76e04961..7870dfb8 100644 --- a/test/parser/libqasm/test_libqasm.py +++ b/test/parser/libqasm/test_libqasm.py @@ -3,7 +3,7 @@ import pytest from opensquirrel import CNOT, CR, CRk, H, I, Ry, X -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.ir import ControlledGate, Gate, Rn from opensquirrel.parser.libqasm.parser import Parser @@ -116,26 +116,30 @@ def test_simplest(circuit_string: str, expected_output: str) -> None: [ ( "version 3.0; qubit q; inv.X q", - [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * -1, phase=math.pi / 2 * -1)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * -1, phi=math.pi / 2 * -1)], + ), + ( + "version 3.0; qubit q; inv.inv.X q", + [X(qubit=0)], ), ( "version 3.0; qubit q; pow(2).Rx(pi) q", - [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * 2, phase=0)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * 2, phi=0)], ), ( "version 3.0; qubit q; pow(2).inv.X q", - [BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi * -2, phase=math.pi / 2 * -2)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * -2, phi=math.pi / 2 * -2)], ), ( "version 3.0; qubit[2] q; ctrl.pow(2).inv.X q[0], q[1]", [ ControlledGate( - 0, BlochSphereRotation(qubit=1, axis=(1, 0, 0), angle=math.pi * -2, phase=math.pi / 2 * -2) + control_qubit=0, target_gate=Rn(qubit=1, nx=1, ny=0, nz=0, theta=math.pi * -2, phi=math.pi / 2 * -2) ) ], ), ], - ids=["inv", "pow_2_Rx", "pow_2_inv", "ctrl_pow_2_inv"], + ids=["inv_X", "inv_inv_X", "pow_2_Rx", "pow_2_inv_X", "ctrl_pow_2_inv_X"], ) def test_gate_modifiers(circuit_string: str, expected_result: list[Gate]) -> None: circuit = Parser().circuit_from_string(circuit_string) diff --git a/test/router/test_astar_router.py b/test/router/test_astar_router.py new file mode 100644 index 00000000..6629323e --- /dev/null +++ b/test/router/test_astar_router.py @@ -0,0 +1,96 @@ +# Tests for the AStarRouter class +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.ir import SWAP +from opensquirrel.passes.router import AStarRouter +from opensquirrel.passes.router.heuristics import DistanceMetric + + +@pytest.fixture(name="router1") +def router_fixture1() -> AStarRouter: + connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + return AStarRouter(connectivity, distance_metric=DistanceMetric.MANHATTAN) + + +@pytest.fixture(name="router2") +def router_fixture2() -> AStarRouter: + connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} + return AStarRouter(connectivity, distance_metric=DistanceMetric.EUCLIDEAN) + + +@pytest.fixture(name="router3") +def router_fixture3() -> AStarRouter: + connectivity = { + "0": [1, 2, 5], + "1": [0, 3, 6], + "2": [0, 4, 7], + "3": [1, 5, 8], + "4": [2, 6, 9], + "5": [0, 3, 7], + "6": [1, 4, 8], + "7": [2, 5, 9], + "8": [3, 6, 9], + "9": [4, 7, 8], + } + return AStarRouter(connectivity, distance_metric=DistanceMetric.CHEBYSHEV) + + +@pytest.fixture(name="circuit1") +def circuit_fixture1() -> Circuit: + builder = CircuitBuilder(5) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + return builder.to_circuit() + + +@pytest.fixture(name="circuit2") +def circuit_fixture2() -> Circuit: + builder = CircuitBuilder(7) + builder.CNOT(0, 6) + builder.CNOT(1, 5) + builder.CNOT(2, 4) + builder.CNOT(3, 6) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 5) + builder.CNOT(5, 6) + return builder.to_circuit() + + +@pytest.fixture(name="circuit3") +def circuit_fixture3() -> Circuit: + builder = CircuitBuilder(10) + builder.CNOT(0, 9) + builder.CNOT(1, 8) + builder.CNOT(2, 7) + builder.CNOT(3, 6) + builder.CNOT(4, 5) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 6) + builder.CNOT(5, 7) + builder.CNOT(8, 9) + builder.CNOT(0, 5) + builder.CNOT(1, 6) + builder.CNOT(2, 8) + builder.CNOT(3, 9) + return builder.to_circuit() + + +@pytest.mark.parametrize( + "router, circuit, expected_swap_count", # noqa: PT006 + [("router1", "circuit1", 4), ("router2", "circuit2", 8), ("router3", "circuit3", 15)], +) +def test_router( + router: AStarRouter, circuit: Circuit, expected_swap_count: int, request: pytest.FixtureRequest +) -> None: + circuit = request.getfixturevalue(circuit) # type: ignore[arg-type] + router = request.getfixturevalue(router) # type: ignore[arg-type] + circuit.route(router=router) + swap_count = sum(1 for statement in circuit.ir.statements if isinstance(statement, SWAP)) + assert swap_count == expected_swap_count diff --git a/test/router/test_shortest_path_router.py b/test/router/test_shortest_path_router.py new file mode 100644 index 00000000..3fe33c08 --- /dev/null +++ b/test/router/test_shortest_path_router.py @@ -0,0 +1,95 @@ +# Tests for the ShortestPathRouter class +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.ir import SWAP +from opensquirrel.passes.router import ShortestPathRouter + + +@pytest.fixture(name="router1") +def router_fixture1() -> ShortestPathRouter: + connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + return ShortestPathRouter(connectivity) + + +@pytest.fixture(name="router2") +def router_fixture2() -> ShortestPathRouter: + connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} + return ShortestPathRouter(connectivity) + + +@pytest.fixture(name="router3") +def router_fixture3() -> ShortestPathRouter: + connectivity = { + "0": [1, 2, 5], + "1": [0, 3, 6], + "2": [0, 4, 7], + "3": [1, 5, 8], + "4": [2, 6, 9], + "5": [0, 3, 7], + "6": [1, 4, 8], + "7": [2, 5, 9], + "8": [3, 6, 9], + "9": [4, 7, 8], + } + return ShortestPathRouter(connectivity) + + +@pytest.fixture(name="circuit1") +def circuit_fixture1() -> Circuit: + builder = CircuitBuilder(5) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + return builder.to_circuit() + + +@pytest.fixture(name="circuit2") +def circuit_fixture2() -> Circuit: + builder = CircuitBuilder(7) + builder.CNOT(0, 6) + builder.CNOT(1, 5) + builder.CNOT(2, 4) + builder.CNOT(3, 6) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 5) + builder.CNOT(5, 6) + return builder.to_circuit() + + +@pytest.fixture(name="circuit3") +def circuit_fixture3() -> Circuit: + builder = CircuitBuilder(10) + builder.CNOT(0, 9) + builder.CNOT(1, 8) + builder.CNOT(2, 7) + builder.CNOT(3, 6) + builder.CNOT(4, 5) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 6) + builder.CNOT(5, 7) + builder.CNOT(8, 9) + builder.CNOT(0, 5) + builder.CNOT(1, 6) + builder.CNOT(2, 8) + builder.CNOT(3, 9) + return builder.to_circuit() + + +@pytest.mark.parametrize( + "router, circuit, expected_swap_count", # noqa: PT006 + [("router1", "circuit1", 4), ("router2", "circuit2", 8), ("router3", "circuit3", 15)], +) +def test_router( + router: ShortestPathRouter, circuit: Circuit, expected_swap_count: int, request: pytest.FixtureRequest +) -> None: + circuit = request.getfixturevalue(circuit) # type: ignore[arg-type] + router = request.getfixturevalue(router) # type: ignore[arg-type] + circuit.route(router=router) + swap_count = sum(1 for statement in circuit.ir.statements if isinstance(statement, SWAP)) + assert swap_count == expected_swap_count diff --git a/test/test_asm_declaration.py b/test/test_asm_declaration.py new file mode 100644 index 00000000..3559118c --- /dev/null +++ b/test/test_asm_declaration.py @@ -0,0 +1,168 @@ +import math + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.parser.libqasm.parser import Parser +from opensquirrel.passes.merger import SingleQubitGatesMerger + + +def test_empty_raw_text_string() -> None: + qc = Circuit.from_string( + """ +version 3.0 + +qubit q + +asm(TestBackend) ''' +''' +""", + ) + assert ( + str(qc) + == """version 3.0 + +qubit[1] q + +asm(TestBackend) ''' +''' +""" + ) + + +def test_single_line() -> None: + qc = Circuit.from_string( + """ +version 3 + +qubit[2] q + +H q[0] + +asm(TestBackend) ''' a ' " {} () [] b ''' + +CNOT q[0], q[1] +""", + ) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q + +H q[0] +asm(TestBackend) ''' a ' " {} () [] b ''' +CNOT q[0], q[1] +""" + ) + + +def test_multi_line() -> None: + qc = Circuit.from_string( + """ +version 3 + +qubit[2] q + +H q[0] + +asm(TestBackend) ''' + a ' " {} () [] b + // This is a single line comment which ends on the newline. + /* This is a multi- + line comment block */ +''' + +CNOT q[0], q[1] + """, + ) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q + +H q[0] +asm(TestBackend) ''' + a ' " {} () [] b + // This is a single line comment which ends on the newline. + /* This is a multi- + line comment block */ +''' +CNOT q[0], q[1] +""" + ) + + +def test_invalid_backend_name() -> None: + with pytest.raises( + OSError, + match=r"Error at :5:13..16: mismatched input '100' expecting IDENTIFIER", + ): + Parser().circuit_from_string( + """version 3.0 + + qubit q + + asm(100) ''' + ''' + """ + ) + + +def test_invalid_raw_text_string() -> None: + with pytest.raises( + OSError, + match=r"Error at :5:26..29: mismatched input ''''' expecting RAW_TEXT_STRING", + ): + Parser().circuit_from_string( + """version 3 + + qubit q + + asm(TestBackend) ''' a ' " {} () [] b + """ + ) + + +def test_asm_circuit_builder() -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.asm("TestBackend", """ a ' " {} () [] b """) + builder.CNOT(0, 1) + qc = builder.to_circuit() + assert ( + str(qc) + == """version 3.0 + +qubit[2] q + +H q[0] +asm(TestBackend) ''' a ' " {} () [] b ''' +CNOT q[0], q[1] +""" + ) + + +def test_no_merging_across_asm() -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.Ry(1, math.pi / 2) + builder.asm("TestBackend", """ a ' " {} () [] b """) + builder.H(0) + builder.Rx(1, math.pi / 2) + qc = builder.to_circuit() + qc.merge(merger=SingleQubitGatesMerger()) + assert ( + str(qc) + == """version 3.0 + +qubit[2] q + +H q[0] +Y90 q[1] +asm(TestBackend) ''' a ' " {} () [] b ''' +H q[0] +X90 q[1] +""" + ) diff --git a/test/test_circuit_builder.py b/test/test_circuit_builder.py index 25b7884d..7642abad 100644 --- a/test/test_circuit_builder.py +++ b/test/test_circuit_builder.py @@ -71,7 +71,7 @@ def test_unknown_instruction(self) -> None: def test_wrong_number_of_arguments(self) -> None: builder = CircuitBuilder(3) - with pytest.raises(TypeError, match=r".* takes 1 positional argument but 2 were given"): + with pytest.raises(TypeError, match="with the wrong number or type of arguments:"): builder.H(0, 1) def test_decoupling_circuit_and_builder(self) -> None: diff --git a/test/test_instructions.py b/test/test_instructions.py new file mode 100644 index 00000000..1c093194 --- /dev/null +++ b/test/test_instructions.py @@ -0,0 +1,98 @@ +from opensquirrel import Circuit + + +def test_parse_instructions() -> None: + qc = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + // Initialization + init q + + // Control instructions + barrier q + wait(5) q + + // Single-qubit instructions + I q[0] + H q[0] + X q[0] + X90 q[0] + mX90 q[0] + Y q[0] + Y90 q[0] + mY90 q[0] + Z q[0] + S q[0] + Sdag q[0] + T q[0] + Tdag q[0] + Rn(1,0,0,pi/2,pi/4) q[0] + Rx(pi/2) q[0] + Ry(pi/2) q[0] + Rz(tau) q[0] + + // Reset instruction + reset q + + // Measurement instruction (mid-circuit) + b = measure q + + // Two-qubit instructions + CNOT q[0], q[1] + CZ q[0], q[1] + CR(pi) q[0], q[1] + CRk(2) q[0], q[1] + SWAP q[0], q[1] + + // Measurement instruction (final) + b = measure q + """, + ) + + assert ( + str(qc) + == """version 3.0 + +qubit[2] q +bit[2] b + +init q[0] +init q[1] +barrier q[0] +barrier q[1] +wait(5) q[0] +wait(5) q[1] +I q[0] +H q[0] +X q[0] +X90 q[0] +mX90 q[0] +Y q[0] +Y90 q[0] +mY90 q[0] +Z q[0] +S q[0] +Sdag q[0] +T q[0] +Tdag q[0] +Rn(1.0, 0.0, 0.0, 1.5707963, 0.78539816) q[0] +Rx(1.5707963) q[0] +Ry(1.5707963) q[0] +Rz(6.2831853) q[0] +reset q[0] +reset q[1] +b[0] = measure q[0] +b[1] = measure q[1] +CNOT q[0], q[1] +CZ q[0], q[1] +CR(3.1415927) q[0], q[1] +CRk(2) q[0], q[1] +SWAP q[0], q[1] +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) diff --git a/test/test_integration.py b/test/test_integration.py index 6ffd3adf..2a95c6f0 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -16,13 +16,13 @@ ) from opensquirrel.passes.exporter import ExportFormat from opensquirrel.passes.merger import SingleQubitGatesMerger -from opensquirrel.passes.router import RoutingChecker -from opensquirrel.passes.validator import NativeGateValidator +from opensquirrel.passes.validator import PrimitiveGateValidator, RoutingValidator def test_spin2plus_backend() -> None: qc = Circuit.from_string( """ + // Version statement version 3.0 // This is a single line comment which ends on the newline. @@ -31,46 +31,82 @@ def test_spin2plus_backend() -> None: /* This is a multi- line comment block */ - qubit[2] q + // (Qu)bit declaration + qubit[2] q // Sping-2+ has a 2-qubit register bit[4] b - H q[0:1] - Rx(1.5789) q[0] - Ry(-0.2) q[0] - Rz(1.5707963) q[0] - CNOT q[1], q[0] - CR(2.123) q[0], q[1] - CRk(2) q[0], q[1] + // Initialization + init q + + // Single-qubit gates + I q[0] + H q[1] + X q[0] + X90 q[1] + mX90 q[0] + Y q[1] + Y90 q[0] + mY90 q[1] + Z q[0] + S q[1] + Sdag q[0] + T q[1] + Tdag q[0] + Rx(pi/2) q[1] + Ry(pi/2) q[0] + Rz(tau) q[1] + + // Mid-circuit measurement + b[0,2] = measure q + + // Two-qubit gates + CNOT q[0], q[1] + CZ q[1], q[0] + CR(pi) q[0], q[1] + CRk(2) q[1], q[0] SWAP q[0], q[1] + + // Control instructions + barrier q + wait(3) q + + // Final measurement b[1,3] = measure q """, ) - # Check whether the above algorithm can be mapped to a dummy chip topology + """ + Spin-2+ chip topology: + 0 <--> 1 + """ connectivity = {"0": [1], "1": [0]} - native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] - - qc.route(router=RoutingChecker(connectivity)) - - # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer()) - - qc.decompose(decomposer=SWAP2CNOTDecomposer()) - - # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer()) - - # Replace CNOT gates with CZ gates - qc.decompose(decomposer=CNOT2CZDecomposer()) - - # Merge single-qubit gates - qc.merge(merger=SingleQubitGatesMerger()) - - # Decompose single-qubit gates to spin backend native gates with McKay decomposer - qc.decompose(decomposer=McKayDecomposer()) - - # Check whether the gates in the circuit match the native gate set of the backend - qc.validate(validator=NativeGateValidator(native_gate_set)) + primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ", "measure", "wait", "init", "barrier"] + + data = { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + # Validate that the interactions in the circuit are possible given the chip topology + qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] + + # Decompose SWAP gate into 3 CNOT gates + qc.decompose(decomposer=SWAP2CNOTDecomposer(**data)) + # + # # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates + qc.decompose(decomposer=CNOTDecomposer(**data)) + # + # # Replace CNOT gates with CZ gates + qc.decompose(decomposer=CNOT2CZDecomposer(**data)) + # + # # Merge single-qubit gates + qc.merge(merger=SingleQubitGatesMerger(**data)) + # + # # Decompose single-qubit gates to primitive gates with McKay decomposer + qc.decompose(decomposer=McKayDecomposer(**data)) + + # Validate that the compiled circuit is composed of gates that are in the primitive gate set + qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] assert ( str(qc) @@ -79,41 +115,48 @@ def test_spin2plus_backend() -> None: qubit[2] q bit[4] b -Rz(1.5707963) q[1] -X90 q[1] -Rz(1.5707963) q[1] -Rz(1.5789) q[0] +init q[0] +init q[1] +Rz(1.5707963) q[0] X90 q[0] -Rz(-2.9415926) q[0] -CZ q[1], q[0] -Rz(-1.5707963) q[0] +Rz(0.78539813) q[0] X90 q[0] -Rz(1.5707963) q[0] -Rz(2.6322964) q[1] -X90 q[1] -Rz(-1.5707963) q[1] -CZ q[0], q[1] -Rz(-1.5707963) q[1] +Rz(-1.5707964) q[0] +b[0] = measure q[0] +Rz(2.3561946) q[1] X90 q[1] -Rz(2.0800926) q[1] +Rz(-3.1415927) q[1] +b[2] = measure q[1] +Rz(1.5707963) q[1] X90 q[1] Rz(-1.5707963) q[1] CZ q[0], q[1] -Rz(1.0615) q[0] -Rz(1.5707963) q[1] -X90 q[1] -Rz(2.3561946) q[1] +Rz(-1.5707963) q[1] X90 q[1] Rz(1.5707963) q[1] +Rz(3.1415927) q[0] +CZ q[1], q[0] +Rz(3.1415927) q[0] +Rz(3.1415927) q[1] CZ q[0], q[1] -Rz(-1.5707963) q[1] -X90 q[1] -Rz(2.3561946) q[1] +Rz(3.1415927) q[1] +Rz(2.3561944) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(2.3561946) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(2.3561944) q[1] X90 q[1] Rz(-1.5707963) q[1] CZ q[0], q[1] -Rz(0.78539816) q[0] -CZ q[0], q[1] Rz(-1.5707963) q[1] X90 q[1] Rz(1.5707963) q[1] @@ -128,10 +171,14 @@ def test_spin2plus_backend() -> None: X90 q[1] Rz(-1.5707963) q[1] CZ q[0], q[1] -b[1] = measure q[0] Rz(-1.5707963) q[1] X90 q[1] Rz(1.5707963) q[1] +barrier q[0] +barrier q[1] +wait(3) q[0] +wait(3) q[1] +b[1] = measure q[0] b[3] = measure q[1] """ ) @@ -140,31 +187,117 @@ def test_spin2plus_backend() -> None: def test_hectoqubit_backend() -> None: qc = Circuit.from_string( """ + // Version statement version 3.0 - qubit[3] q - bit[3] b + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + /* This is a multi- + line comment block */ + + // (Qu)bit declaration + qubit[5] q // Tuna-5 has a 5-qubit register + bit[7] b + + // Initialization + init q + + // Single-qubit gates + I q[0] H q[1] - CZ q[0], q[1] + X q[2] + X90 q[3] + mX90 q[4] + Y q[0] + Y90 q[1] + mY90 q[2] + Z q[3] + S q[4] + Sdag q[0] + T q[1] + Tdag q[2] + Rx(pi/2) q[3] + Ry(pi/2) q[4] + Rz(tau) q[0] + + barrier q // to ensure all measurements occur simultaneously + // Mid-circuit measurement + b[0:4] = measure q + + // Two-qubit gates CNOT q[0], q[1] - CRk(4) q[0], q[1] - H q[0] - b[1:2] = measure q[0:1] + CZ q[2], q[3] + CR(pi) q[4], q[0] + CRk(2) q[1], q[2] + SWAP q[3], q[4] + + // Control instructions + barrier q + // wait(3) q // not supported by HectoQubit/2 atm + + // Final measurement + b[2:6] = measure q """ ) + # HectoQubit/2 chip is Tuna-5 (full-connectivity assumed for now) + connectivity = { + "0": [1, 2, 3, 4], + "1": [0, 2, 3, 4], + "2": [0, 1, 3, 4], + "3": [0, 1, 2, 4], + "4": [0, 1, 2, 3], + } + primitive_gate_set = [ + "I", + "X", + "X90", + "mX90", + "Y", + "Y90", + "mY90", + "Z", + "S", + "Sdag", + "T", + "Tdag", + "Rx", + "Ry", + "Rz", + "CNOT", + "CZ", + "measure", + "wait", + "init", + "barrier", + ] + + data = { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + # Validate that the interactions in the circuit are possible given the chip topology + qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] + + # Decompose SWAP gate into 3 CNOT gates + qc.decompose(decomposer=SWAP2CNOTDecomposer(**data)) + # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer()) + qc.decompose(decomposer=CNOTDecomposer(**data)) # Replace CNOT gates with CZ gates - qc.decompose(decomposer=CNOT2CZDecomposer()) + qc.decompose(decomposer=CNOT2CZDecomposer(**data)) # Merge single-qubit gates - qc.merge(merger=SingleQubitGatesMerger()) + qc.merge(merger=SingleQubitGatesMerger(**data)) + + # Decompose single-qubit gates to primitive gates with the XYX decomposer + qc.decompose(decomposer=XYXDecomposer(**data)) - # Decompose single-qubit gates to HectoQubit backend native gates with the XYX decomposer - qc.decompose(decomposer=XYXDecomposer()) + # Validate that the compiled circuit is composed of gates that are in the primitive gate set + qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] if importlib.util.find_spec("quantify_scheduler") is None: with pytest.raises( @@ -183,23 +316,75 @@ def test_hectoqubit_backend() -> None: ] assert operations == [ + "Rxy(90, 0, 'q[0]')", + "Rxy(90, 90, 'q[0]')", + "Rxy(90, 0, 'q[0]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(45, 90, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(-45, 0, 'q[2]')", + "Rxy(90, 90, 'q[2]')", + "Rxy(180, 0, 'q[2]')", + "Rxy(-90, 0, 'q[3]')", + "Rxy(180, 90, 'q[3]')", + "Rxy(90, 0, 'q[3]')", + "Rxy(-90, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(90, 0, 'q[4]')", + "Measure q[0]", + "Measure q[1]", + "Measure q[2]", + "Measure q[3]", + "Measure q[4]", "Rxy(180, 0, 'q[1]')", "Rxy(90, 90, 'q[1]')", "Rxy(180, 0, 'q[1]')", "CZ (q[0], q[1])", - "Rxy(180, 0, 'q[1]')", + "Rxy(-90, 0, 'q[3]')", + "Rxy(180, 90, 'q[3]')", + "Rxy(90, 0, 'q[3]')", + "CZ (q[2], q[3])", + "Rxy(-90, 0, 'q[0]')", + "Rxy(180, 90, 'q[0]')", + "Rxy(90, 0, 'q[0]')", + "CZ (q[4], q[0])", "Rxy(90, 90, 'q[1]')", - "CZ (q[0], q[1])", - "Rxy(-11.25, 0, 'q[1]')", - "CZ (q[0], q[1])", - "Rxy(11.25, 0, 'q[1]')", - "CZ (q[0], q[1])", - "Rxy(180, 0, 'q[0]')", - "Rxy(-90, 90, 'q[0]')", - "Rxy(11.25, 0, 'q[0]')", + "Rxy(180, 0, 'q[2]')", + "Rxy(90, 90, 'q[2]')", + "Rxy(135, 0, 'q[2]')", + "CZ (q[1], q[2])", + "Rxy(45, 0, 'q[2]')", + "CZ (q[1], q[2])", + "Rxy(-90, 0, 'q[3]')", + "Rxy(180, 90, 'q[3]')", + "Rxy(90, 0, 'q[3]')", + "Rxy(180, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[4]')", + "CZ (q[3], q[4])", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[3]')", + "Rxy(90, 90, 'q[3]')", + "Rxy(180, 0, 'q[3]')", + "CZ (q[4], q[3])", + "Rxy(90, 90, 'q[3]')", + "Rxy(180, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[4]')", + "CZ (q[3], q[4])", + "Rxy(-90, 0, 'q[0]')", + "Rxy(180, 90, 'q[0]')", + "Rxy(90, 0, 'q[0]')", + "Rxy(-90, 0, 'q[1]')", + "Rxy(45, 90, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(90, 90, 'q[2]')", + "Rxy(90, 90, 'q[4]')", "Measure q[0]", - "Rxy(90, 90, 'q[1]')", "Measure q[1]", + "Measure q[2]", + "Measure q[3]", + "Measure q[4]", ] ir_measures = [instruction for instruction in qc.ir.statements if isinstance(instruction, Measure)] @@ -344,3 +529,254 @@ def test_hectoqubit_backend_allxy() -> None: assert len(bit_string_mapping) == qc.bit_register_size assert bit_string_mapping == ir_bit_string_mapping + + +def test_starmon7_backend() -> None: + qc = Circuit.from_string( + """ + // Version statement + version 3.0 + + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + + /* This is a multi- + line comment block */ + + // (Qu)bit declaration + qubit[7] q // Starmon-7 has a 7-qubit register + bit[14] b + + // Initialization + init q + + // Single-qubit gates + I q[0] + H q[1] + X q[2] + X90 q[3] + mX90 q[4] + Y q[5] + Y90 q[6] + mY90 q[0] + Z q[1] + S q[2] + Sdag q[3] + T q[4] + Tdag q[5] + Rx(pi/2) q[6] + Ry(pi/2) q[0] + Rz(tau) q[1] + + barrier q // to ensure all measurements occur simultaneously + // Mid-circuit measurement + b[0:6] = measure q + + // Two-qubit gates + CNOT q[0], q[2] + CZ q[1], q[4] + CR(pi) q[5], q[3] + CRk(2) q[3], q[6] + SWAP q[5], q[2] + + // Control instructions + barrier q + wait(3) q + + // Final measurement + b[7:13] = measure q + """, + ) + + """ + Starmon-7 chip topology: + 1 = 4 = 6 + \\ // + 3 + // \\ + 0 = 2 = 5 + """ + + connectivity = { + "0": [2, 3], + "1": [3, 4], + "2": [0, 5], + "3": [0, 1, 5, 6], + "4": [1, 6], + "5": [2, 3], + "6": [3, 4], + } + primitive_gate_set = [ + "I", + "H", + "X", + "X90", + "mX90", + "Y", + "Y90", + "mY90", + "Z", + "S", + "Sdag", + "T", + "Tdag", + "Rx", + "Ry", + "Rz", + "CNOT", + "CZ", + "CR", + "CRk", + "SWAP", + "measure", + "wait", + "init", + "barrier", + ] + + data = { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + # Validate that the interactions in the circuit are possible given the chip topology + qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] + + # Validate that the compiled circuit is composed of gates that are in the primitive gate set + qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] + + exported_circuit = qc.export(fmt=ExportFormat.CQASM_V1) + + assert ( + exported_circuit + == """version 1.0 + +qubits 7 + +prep_z q[0] +prep_z q[1] +prep_z q[2] +prep_z q[3] +prep_z q[4] +prep_z q[5] +prep_z q[6] +i q[0] +h q[1] +x q[2] +x90 q[3] +mx90 q[4] +y q[5] +y90 q[6] +my90 q[0] +z q[1] +s q[2] +sdag q[3] +t q[4] +tdag q[5] +rx q[6], 1.5707963 +ry q[0], 1.5707963 +rz q[1], 6.2831853 +barrier q[0, 1, 2, 3, 4, 5, 6] +measure_z q[0] +measure_z q[1] +measure_z q[2] +measure_z q[3] +measure_z q[4] +measure_z q[5] +measure_z q[6] +cnot q[0], q[2] +cz q[1], q[4] +cr(3.1415927) q[5], q[3] +crk(2) q[3], q[6] +swap q[5], q[2] +barrier q[0, 1, 2, 3, 4, 5, 6] +wait q[0], 3 +wait q[1], 3 +wait q[2], 3 +wait q[3], 3 +wait q[4], 3 +wait q[5], 3 +wait q[6], 3 +measure_z q[0] +measure_z q[1] +measure_z q[2] +measure_z q[3] +measure_z q[4] +measure_z q[5] +measure_z q[6] +""" + ) + + +def test_rydberg_backend() -> None: + qc = Circuit.from_string( + """version 3.0 + +qubit[9] q + +asm(Rydberg) ''' +INIT(p(0,1)) q[0] +INIT(p(1,1)) q[1] +INIT(p(1,2)) q[2] +INIT(p(2,0)) q[3] +INIT(p(2,1)) q[4] +INIT(p(2,2)) q[5] +INIT(p(3,3)) q[6] +INIT(p(3,1)) q[7] +INIT(p(4,0)) q[8] +''' + +X q + +asm(Rydberg) ''' +RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] +RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] +RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] +''' + +X q +""", + ) + # Compiler configuration is yet to be defined for the Rydberg backend. + assert ( + str(qc) + == """version 3.0 + +qubit[9] q + +asm(Rydberg) ''' +INIT(p(0,1)) q[0] +INIT(p(1,1)) q[1] +INIT(p(1,2)) q[2] +INIT(p(2,0)) q[3] +INIT(p(2,1)) q[4] +INIT(p(2,2)) q[5] +INIT(p(3,3)) q[6] +INIT(p(3,1)) q[7] +INIT(p(4,0)) q[8] +''' +X q[0] +X q[1] +X q[2] +X q[3] +X q[4] +X q[5] +X q[6] +X q[7] +X q[8] +asm(Rydberg) ''' +RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] +RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] +RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] +''' +X q[0] +X q[1] +X q[2] +X q[3] +X q[4] +X q[5] +X q[6] +X q[7] +X q[8] +""" + ) diff --git a/test/test_ir.py b/test/test_ir.py index a1886196..0a114989 100644 --- a/test/test_ir.py +++ b/test/test_ir.py @@ -8,7 +8,6 @@ import pytest from numpy.typing import NDArray -from opensquirrel import I from opensquirrel.common import ATOL from opensquirrel.ir import ( Axis, @@ -18,6 +17,7 @@ ControlledGate, Expression, Float, + I, Int, MatrixGate, Measure, @@ -319,9 +319,8 @@ def gate_fixture(self) -> MatrixGate: def test_array_like(self) -> None: gate = MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]) assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], " - "matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n [0.+0.j 0.+0.j 0.+0.j 1.+0.j]\n [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" ) def test_incorrect_array(self) -> None: @@ -331,9 +330,8 @@ def test_incorrect_array(self) -> None: def test_repr(self, gate: MatrixGate) -> None: assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], " - "matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n [0.+0.j 0.+0.j 0.+0.j 1.+0.j]\n [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" ) def test_get_qubit_operands(self, gate: MatrixGate) -> None: @@ -344,7 +342,7 @@ def test_is_identity(self, gate: MatrixGate) -> None: assert not gate.is_identity() def test_matrix_gate_same_control_and_target_qubit(self) -> None: - with pytest.raises(ValueError, match="control and target qubit cannot be the same"): + with pytest.raises(ValueError, match="operands cannot be the same"): MatrixGate(np.eye(4, dtype=np.complex128), [0, 0]) diff --git a/test/validator/test_native_gate_validator.py b/test/validator/test_primitive_gate_validator.py similarity index 64% rename from test/validator/test_native_gate_validator.py rename to test/validator/test_primitive_gate_validator.py index 67df3779..54fe365a 100644 --- a/test/validator/test_native_gate_validator.py +++ b/test/validator/test_primitive_gate_validator.py @@ -1,15 +1,15 @@ -# Tests for native gate checker pass +# Tests for primitive gate validator pass import pytest from opensquirrel import CircuitBuilder from opensquirrel.circuit import Circuit -from opensquirrel.passes.validator import NativeGateValidator +from opensquirrel.passes.validator import PrimitiveGateValidator @pytest.fixture(name="validator") -def validator_fixture() -> NativeGateValidator: - native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] - return NativeGateValidator(native_gate_set) +def validator_fixture() -> PrimitiveGateValidator: + primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + return PrimitiveGateValidator(primitive_gate_set) @pytest.fixture @@ -40,13 +40,13 @@ def circuit_with_unmatching_gate_set() -> Circuit: return builder.to_circuit() -def test_matching_gates(validator: NativeGateValidator, circuit_with_matching_gate_set: Circuit) -> None: +def test_matching_gates(validator: PrimitiveGateValidator, circuit_with_matching_gate_set: Circuit) -> None: try: validator.validate(circuit_with_matching_gate_set.ir) except ValueError: pytest.fail("validate() raised ValueError unexpectedly") -def test_non_matching_gates(validator: NativeGateValidator, circuit_with_unmatching_gate_set: Circuit) -> None: - with pytest.raises(ValueError, match=r"the following gates are not in the native gate set:.*"): +def test_non_matching_gates(validator: PrimitiveGateValidator, circuit_with_unmatching_gate_set: Circuit) -> None: + with pytest.raises(ValueError, match=r"the following gates are not in the primitive gate set:.*"): validator.validate(circuit_with_unmatching_gate_set.ir) diff --git a/test/router/test_routing_checker.py b/test/validator/test_routing_validator.py similarity index 65% rename from test/router/test_routing_checker.py rename to test/validator/test_routing_validator.py index df3b5784..4801d031 100644 --- a/test/router/test_routing_checker.py +++ b/test/validator/test_routing_validator.py @@ -1,16 +1,16 @@ -# Tests for routing checker pass +# Tests for routing validator pass import pytest from opensquirrel import CircuitBuilder from opensquirrel.circuit import Circuit -from opensquirrel.passes.router.routing_checker import RoutingChecker +from opensquirrel.passes.validator import RoutingValidator -@pytest.fixture(name="router") -def router_fixture() -> RoutingChecker: +@pytest.fixture(name="validator") +def router_fixture() -> RoutingValidator: connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} - return RoutingChecker(connectivity) + return RoutingValidator(connectivity) @pytest.fixture @@ -40,15 +40,15 @@ def circuit2() -> Circuit: return builder.to_circuit() -def test_routing_checker_possible_1to1_mapping(router: RoutingChecker, circuit1: Circuit) -> None: +def test_routing_checker_possible_1to1_mapping(validator: RoutingValidator, circuit1: Circuit) -> None: try: - router.route(circuit1.ir) + validator.validate(circuit1.ir) except ValueError: pytest.fail("route() raised ValueError unexpectedly") -def test_routing_checker_impossible_1to1_mapping(router: RoutingChecker, circuit2: Circuit) -> None: +def test_routing_checker_impossible_1to1_mapping(validator: RoutingValidator, circuit2: Circuit) -> None: with pytest.raises( ValueError, match=r"the following qubit interactions in the circuit prevent a 1-to-1 mapping:.*" ): - router.route(circuit2.ir) + validator.validate(circuit2.ir) diff --git a/test/writer/test_writer.py b/test/writer/test_writer.py index cf4cfbac..78b4760a 100644 --- a/test/writer/test_writer.py +++ b/test/writer/test_writer.py @@ -117,9 +117,9 @@ def test_anonymous_gate() -> None: bit[2] b H q[0] -Anonymous gate: BlochSphereRotation(Qubit[0], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0) -Anonymous gate: ControlledGate(control_qubit=Qubit[0], BlochSphereRotation(Qubit[1], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0)) -Anonymous gate: MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] [0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]]) +BlochSphereRotation(qubit=Qubit[0], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0) +ControlledGate(control_qubit=Qubit[0], target_gate=BlochSphereRotation(qubit=Qubit[1], axis=[0.57735 0.57735 0.57735], angle=1.23, phase=0.0)) +MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] [0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]]) CR(1.234) q[0], q[1] """ # noqa: E501 ) From 804951b53012c04ac7058637778bd98fa9021770 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Wed, 28 May 2025 11:28:52 +0200 Subject: [PATCH 06/12] Release 0.5.0 (#536) --- CHANGELOG.md | 15 +- docs/circuit-builder/index.md | 4 + .../instructions/control-instructions.md | 8 + docs/circuit-builder/instructions/gates.md | 28 +++ .../instructions/non-unitaries.md | 9 + docs/compilation-passes/index.md | 29 +++ .../decomposition/aba-decomposer.md | 1 + .../decomposition/cnot-decomposer.md | 1 + .../decomposition/cz-decomposer.md | 1 + .../types-of-passes/decomposition/index.md | 11 + .../decomposition/mckay-decomposer.md | 1 + .../decomposition/predefined-decomposers.md | 1 + .../exporting/cqasm-v1-exporter.md | 1 + .../types-of-passes/exporting/index.md | 1 + .../exporting/quantify-scheduler-exporter.md | 1 + .../mapping/hardcoded-mapper.md | 1 + .../mapping/identity-mapper.md | 2 + .../types-of-passes/mapping/index.md | 16 ++ .../types-of-passes/mapping/random-mapper.md | 1 + .../types-of-passes/merging/index.md | 1 + .../merging/single-qubit-gates-merger.md | 1 + .../types-of-passes/routing/a-star-router.md | 34 +++ .../types-of-passes/routing/index.md | 10 + .../types-of-passes/routing/qroute-router.md | 1 + .../routing/shortest-path-router.md | 30 +++ .../types-of-passes/validation/index.md | 73 +++++++ .../validation/primitive-gate-validator.md | 47 ++++ .../validation/routing-validator.md | 59 ++++++ docs/index.md | 27 ++- docs/installation.md | 13 ++ docs/tutorial.md | 88 ++++++++ docs/tutorial/_static/cnot2cz.png | Bin 0 -> 115813 bytes .../_static/devcontainer_docker_icon.png | Bin 0 -> 1093 bytes .../_static/devcontainer_docker_icon_2.png | Bin 0 -> 1136 bytes docs/tutorial/_static/swap2cnot.png | Bin 0 -> 131780 bytes docs/tutorial/_static/swap2cz.png | Bin 0 -> 164027 bytes docs/tutorial/_static/terminal_icon.png | Bin 0 -> 68188 bytes .../custom-gates.md | 56 +++++ .../decomposition/inferred-decomposition.md | 48 +++++ .../decomposition/predefined-decomposition.md | 105 +++++++++ .../applying-compilation-passes/index.md | 36 ++++ .../merging-single-qubit-gates.md | 47 ++++ .../_static/devcontainer_docker_icon.png | Bin 0 -> 1093 bytes .../_static/devcontainer_docker_icon_2.png | Bin 0 -> 1136 bytes .../decomposition/_static/terminal_icon.png | Bin 0 -> 68188 bytes .../creating-a-circuit/from-a-cqasm-string.md | 38 ++++ docs/tutorial/creating-a-circuit/index.md | 11 + .../creating-a-circuit/strong-types.md | 23 ++ .../using-the-circuit-builder.md | 86 ++++++++ docs/tutorial/index.md | 1 + mkdocs.yaml | 55 ++++- opensquirrel/circuit.py | 10 +- opensquirrel/ir.py | 40 ++-- .../passes/decomposer/mckay_decomposer.py | 2 +- .../passes/validator/routing_validator.py | 7 +- poetry.lock | 200 +++++++++--------- pyproject.toml | 2 +- test/decomposer/test_zyz_decomposer.py | 6 +- test/merger/test_single_qubit_gates_merger.py | 2 +- test/test_asm_declaration.py | 6 +- test/test_circuit.py | 31 +++ test/test_ir.py | 31 +++ test/validator/test_routing_validator.py | 12 ++ 63 files changed, 1224 insertions(+), 147 deletions(-) create mode 100644 docs/circuit-builder/index.md create mode 100644 docs/circuit-builder/instructions/control-instructions.md create mode 100644 docs/circuit-builder/instructions/gates.md create mode 100644 docs/circuit-builder/instructions/non-unitaries.md create mode 100644 docs/compilation-passes/index.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/index.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md create mode 100644 docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md create mode 100644 docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md create mode 100644 docs/compilation-passes/types-of-passes/exporting/index.md create mode 100644 docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md create mode 100644 docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md create mode 100644 docs/compilation-passes/types-of-passes/mapping/identity-mapper.md create mode 100644 docs/compilation-passes/types-of-passes/mapping/index.md create mode 100644 docs/compilation-passes/types-of-passes/mapping/random-mapper.md create mode 100644 docs/compilation-passes/types-of-passes/merging/index.md create mode 100644 docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md create mode 100644 docs/compilation-passes/types-of-passes/routing/a-star-router.md create mode 100644 docs/compilation-passes/types-of-passes/routing/index.md create mode 100644 docs/compilation-passes/types-of-passes/routing/qroute-router.md create mode 100644 docs/compilation-passes/types-of-passes/routing/shortest-path-router.md create mode 100644 docs/compilation-passes/types-of-passes/validation/index.md create mode 100644 docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md create mode 100644 docs/compilation-passes/types-of-passes/validation/routing-validator.md create mode 100644 docs/installation.md create mode 100644 docs/tutorial/_static/cnot2cz.png create mode 100644 docs/tutorial/_static/devcontainer_docker_icon.png create mode 100644 docs/tutorial/_static/devcontainer_docker_icon_2.png create mode 100644 docs/tutorial/_static/swap2cnot.png create mode 100644 docs/tutorial/_static/swap2cz.png create mode 100644 docs/tutorial/_static/terminal_icon.png create mode 100644 docs/tutorial/applying-compilation-passes/custom-gates.md create mode 100644 docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md create mode 100644 docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md create mode 100644 docs/tutorial/applying-compilation-passes/index.md create mode 100644 docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md create mode 100644 docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png create mode 100644 docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png create mode 100644 docs/tutorial/circuit_modification/decomposition/_static/terminal_icon.png create mode 100644 docs/tutorial/creating-a-circuit/from-a-cqasm-string.md create mode 100644 docs/tutorial/creating-a-circuit/index.md create mode 100644 docs/tutorial/creating-a-circuit/strong-types.md create mode 100644 docs/tutorial/creating-a-circuit/using-the-circuit-builder.md create mode 100644 docs/tutorial/index.md create mode 100644 test/test_circuit.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 57f55898..c7e45145 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,20 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. +## [ 0.5.0 ] - [ 2025-05-28 ] + +### Added + +- `asm_filter` method to the `Circuit` class to filter-out assembly declarations by backend name + +### Changed + +- Default gate identification check refactored (now including check for phase) +- `McKayDecomposer` checks X90 on BSR semantic instead of name + +### Fixed + +- `RoutingValidator` ignores assembly declarations ## [ 0.4.0 ] - [ 2025-04-28 ] @@ -52,7 +66,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Fixed order of merging Bloch sphere rotations - ## [ 0.2.0 ] - [ 2025-01-21 ] ### Added diff --git a/docs/circuit-builder/index.md b/docs/circuit-builder/index.md new file mode 100644 index 00000000..f076d471 --- /dev/null +++ b/docs/circuit-builder/index.md @@ -0,0 +1,4 @@ +!!! note "Coming soon" + + + diff --git a/docs/circuit-builder/instructions/control-instructions.md b/docs/circuit-builder/instructions/control-instructions.md new file mode 100644 index 00000000..ea8d18cb --- /dev/null +++ b/docs/circuit-builder/instructions/control-instructions.md @@ -0,0 +1,8 @@ +!!! note "Coming soon" + +# Control Instructions + +| Name | Operator | Description | Example | +|------------|----------------|--------------------------------------------------|-------------------------------------------------------------------------| +| [Barrier](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/control_instructions/barrier_instruction.html) | _barrier_ | Barrier gate | `builder.barrier(0)` | +| [Wait](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/control_instructions/wait_instruction.html) | _wait_ | Wait gate | `builder.wait(0)` | diff --git a/docs/circuit-builder/instructions/gates.md b/docs/circuit-builder/instructions/gates.md new file mode 100644 index 00000000..9b2ef15a --- /dev/null +++ b/docs/circuit-builder/instructions/gates.md @@ -0,0 +1,28 @@ +!!! note "Coming soon" + +# [Unitary Instructions](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/unitary_instructions.html) + +| Name | Operator | Description | Example | +|------------|----------------|--------------------------------------------------|-------------------------------------------------------------------------| +| I | _I_ | Identity gate | `builder.I(0)` | +| H | _H_ | Hadamard gate | `builder.H(0)` | +| X | _X_ | Pauli-X | `builder.X(0)` | +| X90 | _X90_| Rotation around the x-axis of $\frac{\pi}{2}$ | `builder.X90(0)` | +| mX90 | _X-90_| Rotation around the x-axis of $\frac{-\pi}{2}$ | `builder.mX90(0)` | +| Y | _Y_ | Pauli-Y | `builder.Y(0)` | +| Y90 | _Y90_| Rotation around the y-axis of $\frac{\pi}{2}$ | `builder.Y90(0)` | +| mY90 | _Y-90_| Rotation around the y-axis of $\frac{-\pi}{2}$ | `builder.mY90(0)` | +| Z | _Z_ | Pauli-Z | `builder.Z(0)` | +| S | _S_ | Phase gate | `builder.S(0)` | +| Sdag | _S_| S dagger gate | `builder.Sdag(0)` | +| T | _T_ | T | `builder.T(0)` | +| Tdag | _T_| T dagger gate | `builder.Tdag(0)` | +| Rx | _Rx($\theta$)_| Arbitrary rotation around x-axis | `builder.Rx(0, 0.23)` | +| Ry | _Ry($\theta$)_| Arbitrary rotation around y-axis | `builder.Ry(0, 0.23)` | +| Rz | _Rz($\theta$)_ | Arbitrary rotation around z-axis | `builder.Rz(0, 2)` | +| Rn | _Rn(nx, ny, nz, $\theta$, $\phi$g)_ | Arbitrary rotation around specified axis | `builder.Rn(0)` | +| CZ | _CZ_ | Controlled-Z, Controlled-Phase | `builder.CZ(1, 2)` | +| CR | _CR(\theta)_ | Controlled phase shift (arbitrary angle) | `builder.CR(0, 1, math.pi)` | +| CRk | _CRk(k)_ | Controlled phase shift ($\frac{\pi}{2^{k-1}}$) | `builder.CRk(1, 0, 2)` | +| SWAP | _SWAP_ | SWAP gate | `builder.SWAP(1, 2)` | +| CNOT | _CNOT_ | Controlled-NOT gate | `builder.CNOT(1, 2)` | diff --git a/docs/circuit-builder/instructions/non-unitaries.md b/docs/circuit-builder/instructions/non-unitaries.md new file mode 100644 index 00000000..c73c1608 --- /dev/null +++ b/docs/circuit-builder/instructions/non-unitaries.md @@ -0,0 +1,9 @@ +!!! note "Coming soon" + +# Non-Unitary Instructions + +| Name | Operator | Description | Example | +|------------|----------------|--------------------------------------------------|-------------------------------------------------------------------------| +| [Init](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/init_instruction.html) | _init_ | Initialize certain qubits in $\|0>$ | `builder.init(0)` | +| [Measure](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/measure_instruction.html) | _measure_ | Measure qubit argument | `builder.measure(0)` | +| [Reset](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/reset_instruction.html) | _reset_ | Reset a qubit's state to $\|0>$ | `builder.reset(0)` | diff --git a/docs/compilation-passes/index.md b/docs/compilation-passes/index.md new file mode 100644 index 00000000..9a2f9f04 --- /dev/null +++ b/docs/compilation-passes/index.md @@ -0,0 +1,29 @@ +Compilation passes are essential steps in the process of converting a high-level quantum algorithm (i.e. quantum +circuits) into a hardware-specific executable format. +This process, known as _quantum compilation_, +involves several stages to ensure that the quantum circuit can be executed efficiently on a given quantum hardware. + +Compilation passes include various optimization techniques and transformations applied to the quantum circuit. +These passes can involve _qubit routing_, _initial mapping_, _gate decomposition_, or _error correction_. +These optimization steps are essential to the execution of quantum algorithms. +Often times, the design of quantum algorithms does not take into account the constraints or limitations imposed by the +target hardware, such as qubit coupling map or native gate set. + +These passes are therefore needed to ensure that an initial circuit is converted to a version that adheres to the +requirements of the hardware. + +## Integrated passes + +- Reader (cQASM parser: using libQASM) +- Writer (writes to cQASM) + +## Types of passes + +The following passes are available: + +- [Decomposer](types-of-passes/decomposition/index.md) +- [Exporter](types-of-passes/exporting/index.md) +- [Mapper](types-of-passes/mapping/index.md) +- [Merger](types-of-passes/merging/index.md) +- [Router](types-of-passes/routing/index.md) +- [Validator](types-of-passes/validation/index.md) diff --git a/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md b/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md b/docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md b/docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/decomposition/index.md b/docs/compilation-passes/types-of-passes/decomposition/index.md new file mode 100644 index 00000000..6a40263b --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/index.md @@ -0,0 +1,11 @@ +_Gate decomposition_ is a fundamental process in quantum compilation that involves breaking down complex quantum gates +into a sequence of simpler, more elementary gates that can be directly implemented on quantum hardware. +This step is crucial because most quantum processors can only perform a limited set of basic operations, +such as single-qubit rotations and two-qubit entangling gates like the `CNOT` gate. + +The importance of gate decomposition lies in its ability to translate high-level quantum algorithms into executable +instructions for quantum hardware. By decomposing complex gates into a series of elementary gates, +the quantum compiler ensures that the algorithm can be run on the available hardware, +regardless of its specific constraints and capabilities. +This process ensures that the quantum algorithm is broken down into a series of gates that match the native gate set of +the hardware. diff --git a/docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md b/docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md b/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md b/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/index.md b/docs/compilation-passes/types-of-passes/exporting/index.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/exporting/index.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md b/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md b/docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md new file mode 100644 index 00000000..94a8dbb4 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md @@ -0,0 +1 @@ +With this mapper, the initial mapping is simply hardcoded. diff --git a/docs/compilation-passes/types-of-passes/mapping/identity-mapper.md b/docs/compilation-passes/types-of-passes/mapping/identity-mapper.md new file mode 100644 index 00000000..48925bc0 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/mapping/identity-mapper.md @@ -0,0 +1,2 @@ +The Identity Mapper simply maps each virtual qubit on the circuit to its corresponding physical qubit on the device, +index-wise. diff --git a/docs/compilation-passes/types-of-passes/mapping/index.md b/docs/compilation-passes/types-of-passes/mapping/index.md new file mode 100644 index 00000000..8e0a9ba3 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/mapping/index.md @@ -0,0 +1,16 @@ +_Qubit mapping_, also known as _initial mapping_, is a critical step in the quantum compilation process. +It involves assigning logical qubits, which are used in the quantum algorithm, +to physical qubits available on the quantum hardware. +This mapping is essential because the physical qubits on a quantum processor have specific connectivity constraints, +meaning not all qubits can directly interact with each other. +The initial mapping must respect these constraints to ensure that the required two-qubit gates can be executed without +violating the hardware's connectivity limitations. + +A poor initial mapping can lead to a high number of SWAP operations, +which are used to move qubits into positions where they can interact. +SWAP operations increase the circuit depth and introduce additional errors. +An optimal initial mapping minimizes the need for these operations, +thereby reducing the overall error rate and improving the fidelity of the quantum computation. +Efficient qubit mapping can significantly enhance the performance of the quantum circuit. +By strategically placing qubits, the compiler can reduce the number of additional operations required, +leading to faster and more reliable quantum computations. diff --git a/docs/compilation-passes/types-of-passes/mapping/random-mapper.md b/docs/compilation-passes/types-of-passes/mapping/random-mapper.md new file mode 100644 index 00000000..87e44cf0 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/mapping/random-mapper.md @@ -0,0 +1 @@ +This mapper pass generates a random initial mapping from virtual qubits from physical qubits. diff --git a/docs/compilation-passes/types-of-passes/merging/index.md b/docs/compilation-passes/types-of-passes/merging/index.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/merging/index.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md b/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/routing/a-star-router.md b/docs/compilation-passes/types-of-passes/routing/a-star-router.md new file mode 100644 index 00000000..60035996 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/routing/a-star-router.md @@ -0,0 +1,34 @@ +The A* qubit routing algorithm uses the A* search algorithm to find the optimal path between qubits that need to +interact but are not directly connected on the hardware. +By leveraging simple heuristics such as Manhattan, Euclidean, or Chebyshev distances, +it balances the trade-off between circuit depth and computational efficiency. +This approach ensures that SWAP gates are inserted along the most efficient paths, +minimizing the overall cost of routing while adhering to the hardware's connectivity constraints. + +## Class Object + +```python +AStarRouter(connectivity: dict[str, list[int]], distance_metric: DistanceMetric = None) +``` + +## Attribute(s) + +```python +connectivity: dictionary where key-values pairs represent +qubit connections on the backend. +distance_metric: metric to use in the computation of the shortest path +between two nodes +``` + +## Method(s) + +```python +def route(self, ir: IR) -> IR: + """ + Routes the circuit by inserting SWAP gates, with A*, to make it executable given the hardware connectivity. + Args: + ir: The intermediate representation of the circuit. + Returns: + The intermediate representation of the routed circuit (including the additional SWAP gates). + """ +``` diff --git a/docs/compilation-passes/types-of-passes/routing/index.md b/docs/compilation-passes/types-of-passes/routing/index.md new file mode 100644 index 00000000..392cba1c --- /dev/null +++ b/docs/compilation-passes/types-of-passes/routing/index.md @@ -0,0 +1,10 @@ +The qubit routing pass is a crucial step in the process of quantum compilation. +It involves transforming quantum circuits to ensure that all two-qubit operations comply with the connectivity +constraints of a target quantum hardware architecture. + +In quantum computing, qubits are often arranged in specific topologies where only certain pairs of qubits can directly +interact. +The routing pass adjusts the initial mapping of virtual qubits to physical qubits by inserting necessary operations, +such as _SWAP_ gates, to move qubits into positions where they can interact as required by the quantum circuit. +This process is essential because it ensures that the quantum circuit can be executed on the hardware without violating +its connectivity constraints. diff --git a/docs/compilation-passes/types-of-passes/routing/qroute-router.md b/docs/compilation-passes/types-of-passes/routing/qroute-router.md new file mode 100644 index 00000000..749513eb --- /dev/null +++ b/docs/compilation-passes/types-of-passes/routing/qroute-router.md @@ -0,0 +1 @@ +!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md b/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md new file mode 100644 index 00000000..6f1e0873 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md @@ -0,0 +1,30 @@ +Within this routing pass, SWAP gates are introduced along the shortest path between qubit pairs that need to interact on +the hardware, but do not share a connection. +While simple and straight-forward, this may result in an overly increased circuit depth. + +## Class Object + +```python +ShortestPathRouter(connectivity: dict[str, list[int]]) +``` + +## Attribute(s) + +```python +connectivity: dictionary where key-values pairs represent +qubit connections on the backend. +``` + +## Method(s) + +```python +def route(self, ir: IR) -> IR: + """ + Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not # noqa: W291 + interact with each other, to make it executable given the hardware connectivity. + Args: + ir: The intermediate representation of the circuit. + Returns: + The intermediate representation of the routed circuit (including the additional SWAP gates). + """ +``` diff --git a/docs/compilation-passes/types-of-passes/validation/index.md b/docs/compilation-passes/types-of-passes/validation/index.md new file mode 100644 index 00000000..3674f313 --- /dev/null +++ b/docs/compilation-passes/types-of-passes/validation/index.md @@ -0,0 +1,73 @@ +The _Validator_ passes in _OpenSquirrel_ are meant to provide some tools to check whether a quantum circuit is +executable given the restraints imposed by the hardware. + +## Routing validator + +This pass checks whether all the connections outlined in the description of the quantum algorithm (i.e. qubits which +need to interact because of various 2-qubit gates) are executable on the hardware. +If there certain connections which are not possible on the hardware, the validator will throw a `ValueError`, +specifying which qubit interactions prevent the execution. + +### Class Object + +```python +RoutingValidator(connectivity: dict[str, list[int]]) +``` + +### Attribute(s) + +```python +connectivity: dictionary where key-values pairs represent +qubit connections on the backend. +``` + +### Method(s) + +```python +def validate(ir: IR) -> None: + """ + Check if the circuit interactions faciliate a 1-to-1 mapping to the target hardware. + + Args: + ir (IR): The intermediate representation of the circuit to be checked. + + Raises: + ValueError: If the circuit can't be mapped to the target hardware. + """ +``` + +## Primitive gate validator + +When developing quantum algorithms, their compilation on a specific device depends on whether the hardware supports the +operations implemented on the circuit. +To this end, the primitive gate validator pass checks whether the quantum gates on the quantum circuit are present in +the primitive gate set of the quantum hardware. +If this is not the case, the validator will throw a `ValueError`, +specifying which gates are present in the circuit's description, but not in the hardware's primitive gate set. + +### Class Object + +```python +NativeGateValidator(native_gate_set: list[str]) +``` + +### Attribute(s) + +```python +native_gate_set: A list containing the native gate set. +``` + +### Method(s) + +```python +def validate(ir: IR) -> None: + """ + Check if all unitary gates in the circuit are part of the native gate set. + + Args: + ir (IR): The intermediate representation of the circuit to be checked. + + Raises: + ValueError: If any unitary gate in the circuit is not part of the native gate set. + """ +``` diff --git a/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md b/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md new file mode 100644 index 00000000..47e27e8d --- /dev/null +++ b/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md @@ -0,0 +1,47 @@ +When developing quantum algorithms, their compilation on a specific device depends on whether the hardware supports the +operations implemented on the circuit. +To this end, the native gate validator pass checks whether the quantum gates on the quantum circuit are present in the +native gate set of the quantum hardware. +If this is not the case, the validator will throw a `ValueError`, specifying which gates are present in the circuit's +description, but not in the hardware's native gate set. + +## Class Object + +```python +PrimitiveGateValidator(native_gate_set: list[str]) +``` + +## Attribute(s) + +```python +native_gate_set: A list containing the primitive gate set. +``` + +The `PrimitiveGateValidator` can be used as such. + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.validator import NativeGateValidator + +primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + +validator = PrimitiveGateValidator(primtive_gate_set = primitive_gate_set) + +builder = CircuitBuilder(5) +builder.I(0) +builder.X90(1) +builder.mX90(2) +builder.Y90(3) +builder.mY90(4) +builder.Rz(0, 2) +builder.CZ(1, 2) +builder.H(0) +builder.CNOT(1, 2) +circuit = builder.to_circuit() + +validator.validate(circuit.ir) +``` +_Output_: + + ValueError: the following gates are not in the primitive gate set: ['H', 'CNOT'] diff --git a/docs/compilation-passes/types-of-passes/validation/routing-validator.md b/docs/compilation-passes/types-of-passes/validation/routing-validator.md new file mode 100644 index 00000000..ebe1da6b --- /dev/null +++ b/docs/compilation-passes/types-of-passes/validation/routing-validator.md @@ -0,0 +1,59 @@ +This pass checks whether all the connections outlined in the description of the quantum algorithm (i.e. qubits which need to interact because of various 2-qubit gates) are executable on the hardware. If there certain connections which are not possible on the hardware, the validator will throw a `ValueError`, specifying which qubit interactions prevent the execution. + +## Class Object + +```python +RoutingValidator(connectivity: dict[str, list[int]]) +``` + +### Attribute(s) + +```python +connectivity: dictionary where key-values pairs represent +qubit connections on the backend. +``` + +## Example + +The `RoutingValidator` can be used in the following manner to check whether all qubit interactions defined in the quantum algorithm are available in the circuit. + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.validator import RoutingValidator + +connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} + +validator = RoutingValidator(connectivity = connectivity) + +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(2, 4) +builder.CNOT(3, 4) +circuit = builder.to_circuit() + +validator.validate(circuit.ir) +``` + +In the scenario above, there will be no output, as all qubit connections are executable. On the other hand, the script below will raise a `ValueError` (considering the same `validator` object and `connectivity` as above). + +```python +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.CNOT(0, 3) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(1, 3) +builder.CNOT(2, 3) +builder.CNOT(3, 4) +builder.CNOT(0, 4) + +validator.validate(circuit.ir) +``` +_Output_: + + ValueError: the following qubit interactions in the circuit prevent a 1-to-1 mapping: [(0, 3), (2, 3), (0, 4)] diff --git a/docs/index.md b/docs/index.md index 3d582c14..922a9de3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,19 +1,26 @@ -This site contains the documentation for OpenSquirrel, _i.e._, a flexible quantum program compiler. -OpenSquirrel chooses a _modular_, over a _configurable_, approach to prepare and optimize quantum circuits for heterogeneous target architectures. +# OpenSquirrel -It has a user-friendly interface and is straightforwardly extensible with custom-made readers, compiler passes, and exporters. -As a quantum circuit compiler, it is fully aware of the semantics of each gate and arbitrary quantum gates can be constructed manually. -It understands the quantum programming language cQASM 3 and will support additional quantum programming languages in the future. +This site contains the documentation for OpenSquirrel, _i.e._, a flexible quantum program compiler. +OpenSquirrel chooses a _modular_, over a _configurable_, approach to prepare and optimize quantum circuits for +heterogeneous target architectures. + +It has a user-friendly interface and is straightforwardly extensible with custom-made readers, +compiler passes, and exporters. +As a quantum circuit compiler, it is fully aware of the semantics of each gate and arbitrary quantum gates can be +constructed manually. +It understands the quantum programming language cQASM 3 and will support additional quantum programming languages in the +future. It is developed in modern Python and follows best practices. -\[[GitHub repository]()\]\[[PyPI]()\] +\[[GitHub repository]()\] +\[[PyPI]()\] ## Table of Contents -The following documentation structure is used: [Diátaxis documentation framework](https://diataxis.fr/). - -1. [Tutorial](tutorial.md) -2. [Reference](reference/reference.md) +- [Tutorial](tutorial/index.md) +- [Circuit builder](circuit-builder/index.md) +- [Compilation passes](compilation-passes/index.md) +- [API documentation](reference/reference.md) ## Authors diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..3decf2cb --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,13 @@ +# Installation + +_OpenSquirrel_ is available through the Python Package Index ([PyPI]()). + +Accordingly, installation is as easy as ABC: +```shell +$ pip install opensquirrel +``` + +You can check if the package is installed by importing it: +```python +import opensquirrel +``` diff --git a/docs/tutorial.md b/docs/tutorial.md index d23d4f4e..8ce8a96f 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -455,3 +455,91 @@ As you have seen in the examples above, you can turn a circuit into a by simply using the `str` or `__repr__` methods. We are aiming to support the possibility to export to other languages as well, _e.g._, a OpenQASM 3.0 string, and frameworks, _e.g._, a Qiskit quantum circuit. + +## Validating Aspects of a Circuit + +The available `Validator` passes enable the user to validate various aspects of a circuit. + +### Routing Validator + +For instance, the `RoutingValidator` checks whether a circuit is directly executable given some hardware's coupling map. The example below shows how this `Validator` instance can be used. + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.validator import RoutingValidator + +connectivity= {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} + +validator = RoutingValidator(connectivity = connectivity) + +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(2, 4) +builder.CNOT(3, 4) + +circuit = builder.to_circuit() + +validator.validate(circuit.ir) +``` + +In this scenario, all 2-qubit gates are executable on the hardware and no output is produced. On the other hand, if there are indeed qubit connections that do not exist on the device, a `ValueError` will be raised. + +```python +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.CNOT(0, 3) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(1, 3) +builder.CNOT(2, 3) +builder.CNOT(3, 4) +builder.CNOT(0, 4) + +circuit = builder.to_circuit() + +validator.validate(circuit.ir) +``` +_Output_: + + ValueError: the following qubit interactions in the circuit prevent a 1-to-1 mapping: ((0, 3), (1, 3), (2, 3)) + +### Native Gate Validator + +The `NativeGateValidator` will raise a `ValueError` if there are gates on the circuit that are not present in the native gate set of the quantum device. + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.validator import NativeGateValidator + +native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + +validator = RoutingValidator(native_gate_set = native_gate_set) + +builder = CircuitBuilder(5) +builder.I(0) +builder.X90(1) +builder.mX90(2) +builder.Y90(3) +builder.mY90(4) +builder.Rz(0, 2) +builder.CZ(1, 2) +builder.H(0) +builder.CNOT(1, 2) + +circuit = builder.to_circuit() + +validator.validate(circuit.ir) +``` + +_Output_: + + ValueError: the following gates are not in the native gate set: ['H', 'CNOT'] + + + diff --git a/docs/tutorial/_static/cnot2cz.png b/docs/tutorial/_static/cnot2cz.png new file mode 100644 index 0000000000000000000000000000000000000000..7b0cfdbe37ffd0ed7830df4c06938595d0f126d7 GIT binary patch literal 115813 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≪1dl5?R>g295Rn+h}6hepI<-+4g^*vIM|y$rfUh6 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 literal 0 HcmV?d00001 diff --git a/docs/tutorial/_static/devcontainer_docker_icon.png b/docs/tutorial/_static/devcontainer_docker_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1d295682f3d9e684b68a83cfd586c26d1939c9 GIT binary patch literal 1093 zcmV-L1iJf)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1KLSMK~z{r?U_kv z6loO4Uwu{8)h0dBEXFM^M8-r>M{q$T9uz^H@t`Lc1VKD0!{AL2R1iGrLC`@DGl=4H z6E_5L0cV83faqi}YGM!*Of+FMYuD0MpYN-B#Dt`4>2xP`$nQ}7-utNP@893{UbR$H zTg@Q?Oe+I6Z7E1<2}OKxEUmp&K&##hTJ5i>LZwJJGN1p3^z$RYGXoUK zAB;W&k;_+tw&ZZ+&I^>vI!|~32rWRJxe>3D=j4EQfBp$AK+-D6$_*(wovi#4T0mTx z6fn_D3Ycgn1r!2x&d;FzcmVfanIhSVp8%EsZSilQ)f|MPHD^(SMh&AAI{|9dHeht< zDbv?Ma`{o$&PHef+~^`JH@MzOmOtw3Eo6D9bGEs8ST;fnusR;&HB#n14DbG6Dv--7aLkzfM*# zM)RfbBOs|MU@2TcOmQ2>8YSnUtNG5#knJB%Bh?%o;&N2JCf60@A)4w&yQljDz@N?09FTqg)e{{;O{ zcR}C7&CvT`W9a*$Vzoa4yXP%={&)gfZ{syMr!yMQ4?dV@`ayqjEdL{6r$K*xj+|gz z0d~(D$b990Mz()tI{<14&6y>(~&BR)2Md zyzmSwXv8awqV-onPE}K69N;$SZ!TcI^9Kc@F|45BwgKt-Ly_j-SP*Nf|JnYWJ1-a} zKp?itzGnw82l8!^gHmM~)1Pd5~7zw#- zC9vXoAQ#QW0CRUPNh!vu*N&azcsBIl+-?I0*OAlP3{JX`*)G60_yu4=P;#7I00000 LNkvXXu0mjf$?5&U literal 0 HcmV?d00001 diff --git a/docs/tutorial/_static/devcontainer_docker_icon_2.png b/docs/tutorial/_static/devcontainer_docker_icon_2.png new file mode 100644 index 0000000000000000000000000000000000000000..917cd6dd1b1b2de1a939c6d465936114c57c04f1 GIT binary patch literal 1136 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 literal 0 HcmV?d00001 diff --git a/docs/tutorial/_static/swap2cz.png b/docs/tutorial/_static/swap2cz.png new file mode 100644 index 0000000000000000000000000000000000000000..b95176c2e3191dfd4b508fe9b2e97f474027d458 GIT binary patch literal 164027 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 literal 0 HcmV?d00001 diff --git a/docs/tutorial/_static/terminal_icon.png b/docs/tutorial/_static/terminal_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..05c5d949c8bdea9416cf4d42132394c32c652654 GIT binary patch literal 68188 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 Gate: + return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) +``` + +Notice the `@named_gate` decorator. +This _tells_ OpenSquirrel that the function defines a gate and that it should, +therefore, have all the nice properties OpenSquirrel expects of it. + +- The `ControlledGate` class is used to define a multiple qubit gate that comprises a controlled operation. +For instance, the `CNOT` gate is defined in the default gate set of OpenSquirrel as follows: + +```python +from opensquirrel.ir import Gate, ControlledGate, QubitLike, named_gate +from opensquirrel import X + +@named_gate +def cnot(control: QubitLike, target: QubitLike) -> Gate: + return ControlledGate(control, X(target)) +``` + +- The `MatrixGate` class may be used to define a gate in the generic form of a matrix: + +```python +from opensquirrel.ir import Gate, MatrixGate, QubitLike, named_gate + +@named_gate +def swap(q1: QubitLike, q2: QubitLike) -> Gate: + return MatrixGate( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + [q1, q2], + ) +``` + +!!! note + + User defined gates can only be used in when creating a circuit with the circuit builder. + [cQASM](https://qutech-delft.github.io/cQASM-spec) parsers will not recognize user defined gates, _i.e._, + they cannot be used when creating a circuit through a cQASM string. \ No newline at end of file diff --git a/docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md b/docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md new file mode 100644 index 00000000..6800782b --- /dev/null +++ b/docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md @@ -0,0 +1,48 @@ +OpenSquirrel has a variety inferred decomposition strategies. +More in depth tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). + +One of the most common single qubit decomposition techniques is the ZYZ decomposition. +This technique decomposes a quantum gate into an `Rz`, `Ry` and `Rz` gate in that order. +The decompositions are found in `opensquirrel.passes.decomposer`, +an example can be seen below where a `H`, `Z`, `Y`, and `Rx` gate are all decomposed on a single qubit circuit. + +```python +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.passes.decomposer import ZYZDecomposer +import math + +builder = CircuitBuilder(qubit_register_size=1) +builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) +qc = builder.to_circuit() + +qc.decompose(decomposer=ZYZDecomposer()) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[1] q + + Rz(3.1415927) q[0] + Ry(1.5707963) q[0] + Rz(3.1415927) q[0] + Ry(3.1415927) q[0] + Rz(1.5707963) q[0] + Ry(1.0471976) q[0] + Rz(-1.5707963) q[0] + +Similarly, the decomposer can be used on individual gates. + +```python +from opensquirrel.passes.decomposer import ZYZDecomposer +from opensquirrel import H + +print(ZYZDecomposer().decompose(H(0))) +``` +_Output_: + + [BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), + BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] diff --git a/docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md b/docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md new file mode 100644 index 00000000..3b41c519 --- /dev/null +++ b/docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md @@ -0,0 +1,105 @@ +The first kind of decomposition is when you want to replace a particular gate in the circuit, +like the `CNOT` gate, with a fixed list of gates. +It is commonly known that `CNOT` can be decomposed as `H`-`CZ`-`H`. +This decomposition is demonstrated below using a Python _lambda function_, +which requires the same parameters as the gate that is decomposed: + +```python +from opensquirrel.circuit import Circuit +from opensquirrel import CNOT, H, CZ + +qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] // Note that this notation is expanded in OpenSquirrel. + CNOT q[0], q[1] + Ry q[2], 6.78 + """ +) +qc.replace( + CNOT, + lambda control, target: + [ + H(target), + CZ(control, target), + H(target), + ] +) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[3] q + + X q[0] + X q[1] + X q[2] + H q[1] + CZ q[0], q[1] + H q[1] + Ry(6.78) q[2] + +OpenSquirrel will check whether the provided decomposition is correct. +For instance, an exception is thrown if we forget the final Hadamard, +or H gate, in our custom-made decomposition: + +```python +from opensquirrel.circuit import Circuit +from opensquirrel import CNOT, CZ, H + +qc = Circuit.from_string( + """ + version 3.0 + qubit[3] q + + X q[0:2] + CNOT q[0], q[1] + Ry q[2], 6.78 + """ +) +try: + qc.replace( + CNOT, + lambda control, target: + [ + H(target), + CZ(control, target), + ] + ) +except Exception as e: + print(e) +``` +_Output_: + + replacement for gate CNOT does not preserve the quantum state + +## _`CNOT` to `CZ` decomposer_ + +The decomposition of the `CNOT` gate into a `CZ` gate (with additional single-qubit gates) is used frequently. +To this end a `CNOT2CZDecomposer` has been implemented that decomposes any `CNOT`s in a circuit to a +`Ry(-π/2)`-`CZ`-`Ry(π/2)`. The decomposition is illustrated in the image below. + +

+ +`Ry` gates are used instead of, _e.g._, `H` gates, as they are, generally, +more likely to be supported already by target backends. + +## _`SWAP` to `CNOT` decomposer_ + +The `SWAP2CNOTDecomposer` implements the predefined decomposition of the `SWAP` gate into 3 `CNOT` gates. +The decomposition is illustrated in the image below. + +

+ +## _`SWAP` to `CZ` decomposer_ + +The `SWAP2CZDecomposer` implements the predefined decomposition of the `SWAP` gate into `Ry` rotations and 3 `CZ` +gates. +The decomposition is illustrated in the image below. + +

diff --git a/docs/tutorial/applying-compilation-passes/index.md b/docs/tutorial/applying-compilation-passes/index.md new file mode 100644 index 00000000..d22e4b1f --- /dev/null +++ b/docs/tutorial/applying-compilation-passes/index.md @@ -0,0 +1,36 @@ +There are various ways in which the design of a circuit can be tailored to meet specific needs. + +1. [Merging Single Qubit Gates](../applying-compilation-passes/merging-single-qubit-gates.md) +2. [Custom Quantum Gates](../applying-compilation-passes/custom-gates.md) + +## Gate Decomposition + +OpenSquirrel can also _decompose_ the gates of a quantum circuit, given a specific decomposition. +The package offers several, so-called, decomposers out of the box, +but users can also make their own decomposer and apply them to the circuit. +Decompositions can be: + +1. [Predefined](../applying-compilation-passes/decomposition/predefined-decomposition.md) +2. [Inferred](../applying-compilation-passes/decomposition/inferred-decomposition.md) from the gate semantics. + +## Exporting a circuit + +As you have seen in the examples above, you can turn a circuit into a +[cQASM](https://qutech-delft.github.io/cQASM-spec) string +by simply using the `str` or `__repr__` methods. +We are aiming to support the possibility to export to other languages as well, +_e.g._, a OpenQASM 3.0 string, and frameworks, _e.g._, a Qiskit quantum circuit. + +## Compilation Passes + +OpenSquirrel has several ready to use, out of the box compilation passes, meant to perform necessary modifications to +the quantum circuit and facilitate its execution on a quantum computer. + +These compilation passes include the following: + +1. [Decomposition](../../compilation-passes/types-of-passes/decomposition/index.md) +2. [Exporting](../../compilation-passes/types-of-passes/exporting/index.md) +3. [Mapping](../../compilation-passes/types-of-passes/mapping/index.md) +4. [Merging](../../compilation-passes/types-of-passes/merging/index.md) +5. [Routing](../../compilation-passes/types-of-passes/routing/index.md) +6. [Validation](../../compilation-passes/types-of-passes/validation/index.md) diff --git a/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md b/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md new file mode 100644 index 00000000..43e529b2 --- /dev/null +++ b/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md @@ -0,0 +1,47 @@ +All single-qubit gates appearing in a circuit can be merged by applying `merge(merger=SingleQubitGatesMerger())` to the circuit. +Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. +The gate that results from the merger of single-qubit gates will, in general, +comprise an arbitrary rotation and, therefore, not be a known gate. +In OpenSquirrel an unrecognized gate is deemed _anonymous_. +When a circuit contains anonymous gates and is written to a cQASM string, +the semantic representation of the anonymous gate is exported. + +!!! warning + + The semantic representation of an anonymous gate is not compliant + [cQASM](https://qutech-delft.github.io/cQASM-spec), meaning that + a cQASM parser, _e.g._ [libQASM](https://qutech-delft.github.io/libqasm/), + will not recognize it as a valid statement. + +```python +from opensquirrel.circuit_builder import CircuitBuilder +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.ir import Float +import math + +builder = CircuitBuilder(1) +for _ in range(4): + builder.Rx(0, math.pi / 4) +qc = builder.to_circuit() + +qc.merge(merger=SingleQubitGatesMerger()) + +print(qc) +``` +_Output_: + + version 3.0 + + qubit[1] q + + BlochSphereRotation(qubit=Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) + +In the above example, OpenSquirrel has merged all the Rx gates together. +Yet, for now, OpenSquirrel does not recognize that this results in a single Rx +over the cumulated angle of the individual rotations. +Moreover, it does not recognize that the result corresponds to the X gate (up to a global phase difference). +At a later stage, we may want OpenSquirrel to recognize the resultant gate +in the case it is part of the set of known gates. + +The gate set is, however, not immutable. +In the following section, we demonstrate how new gates can be defined and added to the default gate set. diff --git a/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png b/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a1d295682f3d9e684b68a83cfd586c26d1939c9 GIT binary patch literal 1093 zcmV-L1iJf)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1KLSMK~z{r?U_kv z6loO4Uwu{8)h0dBEXFM^M8-r>M{q$T9uz^H@t`Lc1VKD0!{AL2R1iGrLC`@DGl=4H z6E_5L0cV83faqi}YGM!*Of+FMYuD0MpYN-B#Dt`4>2xP`$nQ}7-utNP@893{UbR$H zTg@Q?Oe+I6Z7E1<2}OKxEUmp&K&##hTJ5i>LZwJJGN1p3^z$RYGXoUK zAB;W&k;_+tw&ZZ+&I^>vI!|~32rWRJxe>3D=j4EQfBp$AK+-D6$_*(wovi#4T0mTx z6fn_D3Ycgn1r!2x&d;FzcmVfanIhSVp8%EsZSilQ)f|MPHD^(SMh&AAI{|9dHeht< zDbv?Ma`{o$&PHef+~^`JH@MzOmOtw3Eo6D9bGEs8ST;fnusR;&HB#n14DbG6Dv--7aLkzfM*# zM)RfbBOs|MU@2TcOmQ2>8YSnUtNG5#knJB%Bh?%o;&N2JCf60@A)4w&yQljDz@N?09FTqg)e{{;O{ zcR}C7&CvT`W9a*$Vzoa4yXP%={&)gfZ{syMr!yMQ4?dV@`ayqjEdL{6r$K*xj+|gz z0d~(D$b990Mz()tI{<14&6y>(~&BR)2Md zyzmSwXv8awqV-onPE}K69N;$SZ!TcI^9Kc@F|45BwgKt-Ly_j-SP*Nf|JnYWJ1-a} zKp?itzGnw82l8!^gHmM~)1Pd5~7zw#- zC9vXoAQ#QW0CRUPNh!vu*N&azcsBIl+-?I0*OAlP3{JX`*)G60_yu4=P;#7I00000 LNkvXXu0mjf$?5&U literal 0 HcmV?d00001 diff --git a/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png b/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png new file mode 100644 index 0000000000000000000000000000000000000000..917cd6dd1b1b2de1a939c6d465936114c57c04f1 GIT binary patch literal 1136 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 str: def bit_register_name(self) -> str: return self.register_manager.get_bit_register_name() + def asm_filter(self, backend_name: str) -> None: + self.ir.statements = [ + statement + for statement in self.ir.statements + if not isinstance(statement, AsmDeclaration) + or (isinstance(statement, AsmDeclaration) and backend_name in str(statement.backend_name)) + ] + def validate(self, validator: Validator) -> None: """Generic validator pass. It applies the given validator to the circuit.""" validator.validate(self.ir) diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py index 4c7802db..525f89ef 100644 --- a/opensquirrel/ir.py +++ b/opensquirrel/ir.py @@ -502,13 +502,12 @@ def __eq__(self, other: object) -> bool: if self.qubit != other.qubit: return False - if abs(self.phase - other.phase) > ATOL: - return False - if np.allclose(self.axis, other.axis, atol=ATOL): - return abs(self.angle - other.angle) < ATOL + return abs(self.angle - other.angle) < ATOL and abs(self.phase - other.phase) < ATOL + if np.allclose(self.axis, -other.axis.value, atol=ATOL): - return abs(self.angle + other.angle) < ATOL + return abs(self.angle + other.angle) < ATOL and abs(self.phase + other.phase) < ATOL + return False @property @@ -542,17 +541,14 @@ def try_match_replace_with_default(bsr: BlochSphereRotation) -> BlochSphereRotat default_bsr_without_params_set, ) - bsr_set_without_rn = {**default_bsr_without_params_set, **default_bsr_with_angle_param_set} - for gate_name in bsr_set_without_rn: + default_bsr_set_without_rn = {**default_bsr_without_params_set, **default_bsr_with_angle_param_set} + for gate_name in default_bsr_set_without_rn: arguments: tuple[Any, ...] = (bsr.qubit,) if gate_name in default_bsr_with_angle_param_set: arguments += (Float(bsr.angle),) - gate = bsr_set_without_rn[gate_name](*arguments) - if ( - np.allclose(gate.axis, bsr.axis, atol=ATOL) - and np.allclose(gate.angle, bsr.angle, atol=ATOL) - and np.allclose(gate.phase, bsr.phase, atol=ATOL) - ): + gate = default_bsr_set_without_rn[gate_name](*arguments) + gate_bsr = BlochSphereRotation(gate.qubit, axis=gate.axis, angle=gate.angle, phase=gate.phase) + if bsr == gate_bsr: return gate nx, ny, nz = (Float(component) for component in bsr.axis) return Rn(bsr.qubit, nx, ny, nz, Float(bsr.angle), Float(bsr.phase)) @@ -579,7 +575,7 @@ def accept(self, visitor: IRVisitor) -> Any: class I(BsrNoParams): # noqa: E742 def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=0, phase=0, name="I") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=0, phase=0, name="I") class H(BsrNoParams): @@ -594,12 +590,12 @@ def __init__(self, qubit: QubitLike) -> None: class X90(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=0, name="X90") + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=math.pi / 4, name="X90") class MinusX90(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-0, name="mX90") + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4, name="mX90") class Y(BsrNoParams): @@ -609,12 +605,12 @@ def __init__(self, qubit: QubitLike) -> None: class Y90(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=0, name="Y90") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=math.pi / 4, name="Y90") class MinusY90(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=0, name="mY90") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=-math.pi / 4, name="mY90") class Z(BsrNoParams): @@ -624,22 +620,22 @@ def __init__(self, qubit: QubitLike) -> None: class S(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=0, name="S") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=math.pi / 4, name="S") class SDagger(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=0, name="Sdag") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=-math.pi / 4, name="Sdag") class T(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=0, name="T") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=math.pi / 8, name="T") class TDagger(BsrNoParams): def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=0, name="Tdag") + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=-math.pi / 8, name="Tdag") class BsrFullParams(BlochSphereRotation): diff --git a/opensquirrel/passes/decomposer/mckay_decomposer.py b/opensquirrel/passes/decomposer/mckay_decomposer.py index 72d4a43b..2a54987b 100644 --- a/opensquirrel/passes/decomposer/mckay_decomposer.py +++ b/opensquirrel/passes/decomposer/mckay_decomposer.py @@ -21,7 +21,7 @@ def decompose(self, g: Gate) -> list[Gate]: Relevant literature: https://arxiv.org/abs/1612.00858 """ - if not isinstance(g, BlochSphereRotation) or g.name == "Rz" or g.name == "X90": + if not isinstance(g, BlochSphereRotation) or g == X90(g.qubit): return [g] if abs(g.angle) < ATOL: diff --git a/opensquirrel/passes/validator/routing_validator.py b/opensquirrel/passes/validator/routing_validator.py index dfb65da4..96ef7388 100644 --- a/opensquirrel/passes/validator/routing_validator.py +++ b/opensquirrel/passes/validator/routing_validator.py @@ -1,4 +1,4 @@ -from typing import Any, cast +from typing import Any from opensquirrel.ir import IR, Instruction, Qubit from opensquirrel.passes.validator import Validator @@ -21,8 +21,9 @@ def validate(self, ir: IR) -> None: """ non_executable_interactions = [] for statement in ir.statements: - instruction: Instruction = cast("Instruction", statement) - args = instruction.arguments + if not isinstance(statement, Instruction): + continue + args = statement.arguments if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): qubit_args = [arg for arg in args if isinstance(arg, Qubit)] qubit_index_pairs = [(q0.index, q1.index) for q0, q1 in zip(qubit_args[:-1], qubit_args[1:])] diff --git a/poetry.lock b/poetry.lock index e45def8b..e3c91722 100644 --- a/poetry.lock +++ b/poetry.lock @@ -795,75 +795,79 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.8.0" +version = "7.8.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, - {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, - {file = "coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3"}, - {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676"}, - {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d"}, - {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a"}, - {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c"}, - {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f"}, - {file = "coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f"}, - {file = "coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23"}, - {file = "coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27"}, - {file = "coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea"}, - {file = "coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7"}, - {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040"}, - {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543"}, - {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2"}, - {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318"}, - {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9"}, - {file = "coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c"}, - {file = "coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78"}, - {file = "coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc"}, - {file = "coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6"}, - {file = "coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d"}, - {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05"}, - {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a"}, - {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6"}, - {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47"}, - {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe"}, - {file = "coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545"}, - {file = "coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b"}, - {file = "coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd"}, - {file = "coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00"}, - {file = "coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64"}, - {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067"}, - {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008"}, - {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733"}, - {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323"}, - {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3"}, - {file = "coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d"}, - {file = "coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487"}, - {file = "coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25"}, - {file = "coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42"}, - {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502"}, - {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1"}, - {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4"}, - {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73"}, - {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a"}, - {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883"}, - {file = "coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada"}, - {file = "coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257"}, - {file = "coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"}, - {file = "coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a"}, - {file = "coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82"}, - {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814"}, - {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c"}, - {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd"}, - {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4"}, - {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899"}, - {file = "coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f"}, - {file = "coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3"}, - {file = "coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd"}, - {file = "coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7"}, - {file = "coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501"}, + {file = "coverage-7.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd8ec21e1443fd7a447881332f7ce9d35b8fbd2849e761bb290b584535636b0a"}, + {file = "coverage-7.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c26c2396674816deaeae7ded0e2b42c26537280f8fe313335858ffff35019be"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aec326ed237e5880bfe69ad41616d333712c7937bcefc1343145e972938f9b3"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e818796f71702d7a13e50c70de2a1924f729228580bcba1607cccf32eea46e6"}, + {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:546e537d9e24efc765c9c891328f30f826e3e4808e31f5d0f87c4ba12bbd1622"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab9b09a2349f58e73f8ebc06fac546dd623e23b063e5398343c5270072e3201c"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fd51355ab8a372d89fb0e6a31719e825cf8df8b6724bee942fb5b92c3f016ba3"}, + {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0774df1e093acb6c9e4d58bce7f86656aeed6c132a16e2337692c12786b32404"}, + {file = "coverage-7.8.2-cp310-cp310-win32.whl", hash = "sha256:00f2e2f2e37f47e5f54423aeefd6c32a7dbcedc033fcd3928a4f4948e8b96af7"}, + {file = "coverage-7.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:145b07bea229821d51811bf15eeab346c236d523838eda395ea969d120d13347"}, + {file = "coverage-7.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b99058eef42e6a8dcd135afb068b3d53aff3921ce699e127602efff9956457a9"}, + {file = "coverage-7.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5feb7f2c3e6ea94d3b877def0270dff0947b8d8c04cfa34a17be0a4dc1836879"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:670a13249b957bb9050fab12d86acef7bf8f6a879b9d1a883799276e0d4c674a"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bdc8bf760459a4a4187b452213e04d039990211f98644c7292adf1e471162b5"}, + {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07a989c867986c2a75f158f03fdb413128aad29aca9d4dbce5fc755672d96f11"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2db10dedeb619a771ef0e2949ccba7b75e33905de959c2643a4607bef2f3fb3a"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e6ea7dba4e92926b7b5f0990634b78ea02f208d04af520c73a7c876d5a8d36cb"}, + {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ef2f22795a7aca99fc3c84393a55a53dd18ab8c93fb431004e4d8f0774150f54"}, + {file = "coverage-7.8.2-cp311-cp311-win32.whl", hash = "sha256:641988828bc18a6368fe72355df5f1703e44411adbe49bba5644b941ce6f2e3a"}, + {file = "coverage-7.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8ab4a51cb39dc1933ba627e0875046d150e88478dbe22ce145a68393e9652975"}, + {file = "coverage-7.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:8966a821e2083c74d88cca5b7dcccc0a3a888a596a04c0b9668a891de3a0cc53"}, + {file = "coverage-7.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2f6fe3654468d061942591aef56686131335b7a8325684eda85dacdf311356c"}, + {file = "coverage-7.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76090fab50610798cc05241bf83b603477c40ee87acd358b66196ab0ca44ffa1"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd0a0a5054be160777a7920b731a0570284db5142abaaf81bcbb282b8d99279"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da23ce9a3d356d0affe9c7036030b5c8f14556bd970c9b224f9c8205505e3b99"}, + {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9392773cffeb8d7e042a7b15b82a414011e9d2b5fdbbd3f7e6a6b17d5e21b20"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:876cbfd0b09ce09d81585d266c07a32657beb3eaec896f39484b631555be0fe2"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3da9b771c98977a13fbc3830f6caa85cae6c9c83911d24cb2d218e9394259c57"}, + {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a990f6510b3292686713bfef26d0049cd63b9c7bb17e0864f133cbfd2e6167f"}, + {file = "coverage-7.8.2-cp312-cp312-win32.whl", hash = "sha256:bf8111cddd0f2b54d34e96613e7fbdd59a673f0cf5574b61134ae75b6f5a33b8"}, + {file = "coverage-7.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:86a323a275e9e44cdf228af9b71c5030861d4d2610886ab920d9945672a81223"}, + {file = "coverage-7.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:820157de3a589e992689ffcda8639fbabb313b323d26388d02e154164c57b07f"}, + {file = "coverage-7.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ea561010914ec1c26ab4188aef8b1567272ef6de096312716f90e5baa79ef8ca"}, + {file = "coverage-7.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cb86337a4fcdd0e598ff2caeb513ac604d2f3da6d53df2c8e368e07ee38e277d"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a4636ddb666971345541b59899e969f3b301143dd86b0ddbb570bd591f1e85"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5040536cf9b13fb033f76bcb5e1e5cb3b57c4807fef37db9e0ed129c6a094257"}, + {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc67994df9bcd7e0150a47ef41278b9e0a0ea187caba72414b71dc590b99a108"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e6c86888fd076d9e0fe848af0a2142bf606044dc5ceee0aa9eddb56e26895a0"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:684ca9f58119b8e26bef860db33524ae0365601492e86ba0b71d513f525e7050"}, + {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8165584ddedb49204c4e18da083913bdf6a982bfb558632a79bdaadcdafd0d48"}, + {file = "coverage-7.8.2-cp313-cp313-win32.whl", hash = "sha256:34759ee2c65362163699cc917bdb2a54114dd06d19bab860725f94ef45a3d9b7"}, + {file = "coverage-7.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:2f9bc608fbafaee40eb60a9a53dbfb90f53cc66d3d32c2849dc27cf5638a21e3"}, + {file = "coverage-7.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:9fe449ee461a3b0c7105690419d0b0aba1232f4ff6d120a9e241e58a556733f7"}, + {file = "coverage-7.8.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8369a7c8ef66bded2b6484053749ff220dbf83cba84f3398c84c51a6f748a008"}, + {file = "coverage-7.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:159b81df53a5fcbc7d45dae3adad554fdbde9829a994e15227b3f9d816d00b36"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6fcbbd35a96192d042c691c9e0c49ef54bd7ed865846a3c9d624c30bb67ce46"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05364b9cc82f138cc86128dc4e2e1251c2981a2218bfcd556fe6b0fbaa3501be"}, + {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46d532db4e5ff3979ce47d18e2fe8ecad283eeb7367726da0e5ef88e4fe64740"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4000a31c34932e7e4fa0381a3d6deb43dc0c8f458e3e7ea6502e6238e10be625"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:43ff5033d657cd51f83015c3b7a443287250dc14e69910577c3e03bd2e06f27b"}, + {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94316e13f0981cbbba132c1f9f365cac1d26716aaac130866ca812006f662199"}, + {file = "coverage-7.8.2-cp313-cp313t-win32.whl", hash = "sha256:3f5673888d3676d0a745c3d0e16da338c5eea300cb1f4ada9c872981265e76d8"}, + {file = "coverage-7.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:2c08b05ee8d7861e45dc5a2cc4195c8c66dca5ac613144eb6ebeaff2d502e73d"}, + {file = "coverage-7.8.2-cp313-cp313t-win_arm64.whl", hash = "sha256:1e1448bb72b387755e1ff3ef1268a06617afd94188164960dba8d0245a46004b"}, + {file = "coverage-7.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:496948261eaac5ac9cf43f5d0a9f6eb7a6d4cb3bedb2c5d294138142f5c18f2a"}, + {file = "coverage-7.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eacd2de0d30871eff893bab0b67840a96445edcb3c8fd915e6b11ac4b2f3fa6d"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b039ffddc99ad65d5078ef300e0c7eed08c270dc26570440e3ef18beb816c1ca"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e49824808d4375ede9dd84e9961a59c47f9113039f1a525e6be170aa4f5c34d"}, + {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b069938961dfad881dc2f8d02b47645cd2f455d3809ba92a8a687bf513839787"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:de77c3ba8bb686d1c411e78ee1b97e6e0b963fb98b1637658dd9ad2c875cf9d7"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1676628065a498943bd3f64f099bb573e08cf1bc6088bbe33cf4424e0876f4b3"}, + {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8e1a26e7e50076e35f7afafde570ca2b4d7900a491174ca357d29dece5aacee7"}, + {file = "coverage-7.8.2-cp39-cp39-win32.whl", hash = "sha256:6782a12bf76fa61ad9350d5a6ef5f3f020b57f5e6305cbc663803f2ebd0f270a"}, + {file = "coverage-7.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1efa4166ba75ccefd647f2d78b64f53f14fb82622bc94c5a5cb0a622f50f1c9e"}, + {file = "coverage-7.8.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:ec455eedf3ba0bbdf8f5a570012617eb305c63cb9f03428d39bf544cb2b94837"}, + {file = "coverage-7.8.2-py3-none-any.whl", hash = "sha256:726f32ee3713f7359696331a18daf0c3b3a70bb0ae71141b9d3c52be7c595e32"}, + {file = "coverage-7.8.2.tar.gz", hash = "sha256:a886d531373a1f6ff9fad2a2ba4a045b68467b779ae729ee0b3b10ac20033b27"}, ] [package.dependencies] @@ -2835,14 +2839,14 @@ mkdocs = ">=1.4.1" [[package]] name = "mkdocs-material" -version = "9.6.12" +version = "9.6.14" description = "Documentation that simply works" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ - {file = "mkdocs_material-9.6.12-py3-none-any.whl", hash = "sha256:92b4fbdc329e4febc267ca6e2c51e8501fa97b2225c5f4deb4d4e43550f8e61e"}, - {file = "mkdocs_material-9.6.12.tar.gz", hash = "sha256:add6a6337b29f9ea7912cb1efc661de2c369060b040eb5119855d794ea85b473"}, + {file = "mkdocs_material-9.6.14-py3-none-any.whl", hash = "sha256:3b9cee6d3688551bf7a8e8f41afda97a3c39a12f0325436d76c86706114b721b"}, + {file = "mkdocs_material-9.6.14.tar.gz", hash = "sha256:39d795e90dce6b531387c255bd07e866e027828b7346d3eba5ac3de265053754"}, ] [package.dependencies] @@ -4101,14 +4105,14 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.14.3" +version = "10.15" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" groups = ["docs"] files = [ - {file = "pymdown_extensions-10.14.3-py3-none-any.whl", hash = "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9"}, - {file = "pymdown_extensions-10.14.3.tar.gz", hash = "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b"}, + {file = "pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f"}, + {file = "pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7"}, ] [package.dependencies] @@ -5058,30 +5062,30 @@ files = [ [[package]] name = "ruff" -version = "0.11.7" +version = "0.11.11" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ruff-0.11.7-py3-none-linux_armv6l.whl", hash = "sha256:d29e909d9a8d02f928d72ab7837b5cbc450a5bdf578ab9ebee3263d0a525091c"}, - {file = "ruff-0.11.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dd1fb86b168ae349fb01dd497d83537b2c5541fe0626e70c786427dd8363aaee"}, - {file = "ruff-0.11.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d3d7d2e140a6fbbc09033bce65bd7ea29d6a0adeb90b8430262fbacd58c38ada"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4809df77de390a1c2077d9b7945d82f44b95d19ceccf0c287c56e4dc9b91ca64"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3a0c2e169e6b545f8e2dba185eabbd9db4f08880032e75aa0e285a6d3f48201"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49b888200a320dd96a68e86736cf531d6afba03e4f6cf098401406a257fcf3d6"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2b19cdb9cf7dae00d5ee2e7c013540cdc3b31c4f281f1dacb5a799d610e90db4"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64e0ee994c9e326b43539d133a36a455dbaab477bc84fe7bfbd528abe2f05c1e"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bad82052311479a5865f52c76ecee5d468a58ba44fb23ee15079f17dd4c8fd63"}, - {file = "ruff-0.11.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7940665e74e7b65d427b82bffc1e46710ec7f30d58b4b2d5016e3f0321436502"}, - {file = "ruff-0.11.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:169027e31c52c0e36c44ae9a9c7db35e505fee0b39f8d9fca7274a6305295a92"}, - {file = "ruff-0.11.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:305b93f9798aee582e91e34437810439acb28b5fc1fee6b8205c78c806845a94"}, - {file = "ruff-0.11.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a681db041ef55550c371f9cd52a3cf17a0da4c75d6bd691092dfc38170ebc4b6"}, - {file = "ruff-0.11.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:07f1496ad00a4a139f4de220b0c97da6d4c85e0e4aa9b2624167b7d4d44fd6b6"}, - {file = "ruff-0.11.7-py3-none-win32.whl", hash = "sha256:f25dfb853ad217e6e5f1924ae8a5b3f6709051a13e9dad18690de6c8ff299e26"}, - {file = "ruff-0.11.7-py3-none-win_amd64.whl", hash = "sha256:0a931d85959ceb77e92aea4bbedfded0a31534ce191252721128f77e5ae1f98a"}, - {file = "ruff-0.11.7-py3-none-win_arm64.whl", hash = "sha256:778c1e5d6f9e91034142dfd06110534ca13220bfaad5c3735f6cb844654f6177"}, - {file = "ruff-0.11.7.tar.gz", hash = "sha256:655089ad3224070736dc32844fde783454f8558e71f501cb207485fe4eee23d4"}, + {file = "ruff-0.11.11-py3-none-linux_armv6l.whl", hash = "sha256:9924e5ae54125ed8958a4f7de320dab7380f6e9fa3195e3dc3b137c6842a0092"}, + {file = "ruff-0.11.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8a93276393d91e952f790148eb226658dd275cddfde96c6ca304873f11d2ae4"}, + {file = "ruff-0.11.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d6e333dbe2e6ae84cdedefa943dfd6434753ad321764fd937eef9d6b62022bcd"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7885d9a5e4c77b24e8c88aba8c80be9255fa22ab326019dac2356cff42089fc6"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b5ab797fcc09121ed82e9b12b6f27e34859e4227080a42d090881be888755d4"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e231ff3132c1119ece836487a02785f099a43992b95c2f62847d29bace3c75ac"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a97c9babe1d4081037a90289986925726b802d180cca784ac8da2bbbc335f709"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8c4ddcbe8a19f59f57fd814b8b117d4fcea9bee7c0492e6cf5fdc22cfa563c8"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6224076c344a7694c6fbbb70d4f2a7b730f6d47d2a9dc1e7f9d9bb583faf390b"}, + {file = "ruff-0.11.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:882821fcdf7ae8db7a951df1903d9cb032bbe838852e5fc3c2b6c3ab54e39875"}, + {file = "ruff-0.11.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:dcec2d50756463d9df075a26a85a6affbc1b0148873da3997286caf1ce03cae1"}, + {file = "ruff-0.11.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99c28505ecbaeb6594701a74e395b187ee083ee26478c1a795d35084d53ebd81"}, + {file = "ruff-0.11.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9263f9e5aa4ff1dec765e99810f1cc53f0c868c5329b69f13845f699fe74f639"}, + {file = "ruff-0.11.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:64ac6f885e3ecb2fdbb71de2701d4e34526651f1e8503af8fb30d4915a3fe345"}, + {file = "ruff-0.11.11-py3-none-win32.whl", hash = "sha256:1adcb9a18802268aaa891ffb67b1c94cd70578f126637118e8099b8e4adcf112"}, + {file = "ruff-0.11.11-py3-none-win_amd64.whl", hash = "sha256:748b4bb245f11e91a04a4ff0f96e386711df0a30412b9fe0c74d5bdc0e4a531f"}, + {file = "ruff-0.11.11-py3-none-win_arm64.whl", hash = "sha256:6c51f136c0364ab1b774767aa8b86331bd8e9d414e2d107db7a2189f35ea1f7b"}, + {file = "ruff-0.11.11.tar.gz", hash = "sha256:7774173cc7c1980e6bf67569ebb7085989a78a103922fb83ef3dfe230cd0687d"}, ] [[package]] @@ -5509,14 +5513,14 @@ markers = {export = "python_version < \"3.10\""} [[package]] name = "tox" -version = "4.25.0" +version = "4.26.0" description = "tox is a generic virtualenv management and test command line tool" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "tox-4.25.0-py3-none-any.whl", hash = "sha256:4dfdc7ba2cc6fdc6688dde1b21e7b46ff6c41795fb54586c91a3533317b5255c"}, - {file = "tox-4.25.0.tar.gz", hash = "sha256:dd67f030317b80722cf52b246ff42aafd3ed27ddf331c415612d084304cf5e52"}, + {file = "tox-4.26.0-py3-none-any.whl", hash = "sha256:75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224"}, + {file = "tox-4.26.0.tar.gz", hash = "sha256:a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca"}, ] [package.dependencies] @@ -5530,7 +5534,7 @@ pluggy = ">=1.5" pyproject-api = ">=1.8" tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.29.1" +virtualenv = ">=20.31" [package.extras] test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.4)", "pytest-mock (>=3.14)"] @@ -5703,14 +5707,14 @@ tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} [[package]] name = "virtualenv" -version = "20.29.3" +version = "20.31.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["main", "dev"] files = [ - {file = "virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170"}, - {file = "virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac"}, + {file = "virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, + {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, ] [package.dependencies] @@ -5720,7 +5724,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "watchdog" diff --git a/pyproject.toml b/pyproject.toml index 04fb08e4..5d3b79eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opensquirrel" -version = "0.4.0" +version = "0.5.0" description = "A quantum circuit transformation and manipulation tool" authors = [ "Quantum Inspire " diff --git a/test/decomposer/test_zyz_decomposer.py b/test/decomposer/test_zyz_decomposer.py index 9d674f9d..af773b12 100644 --- a/test/decomposer/test_zyz_decomposer.py +++ b/test/decomposer/test_zyz_decomposer.py @@ -4,7 +4,7 @@ import pytest -from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, SDagger, X, Y, Z +from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z from opensquirrel.ir import BlochSphereRotation, Gate from opensquirrel.passes.decomposer import ZYZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -26,8 +26,8 @@ def test_identity(decomposer: ZYZDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (X(0), [S(0), Ry(0, math.pi), SDagger(0)]), - (Rx(0, 0.9), [S(0), Ry(0, 0.9), SDagger(0)]), + (X(0), [Rz(0, math.pi / 2), Ry(0, math.pi), Rz(0, -math.pi / 2)]), + (Rx(0, 0.9), [Rz(0, math.pi / 2), Ry(0, 0.9), Rz(0, -math.pi / 2)]), (Y(0), [Ry(0, math.pi)]), (Ry(0, 0.9), [Ry(0, 0.9)]), (Z(0), [Rz(0, math.pi)]), diff --git a/test/merger/test_single_qubit_gates_merger.py b/test/merger/test_single_qubit_gates_merger.py index 27039bde..053804a3 100644 --- a/test/merger/test_single_qubit_gates_merger.py +++ b/test/merger/test_single_qubit_gates_merger.py @@ -91,7 +91,7 @@ def test_merge_and_flush(merger: SingleQubitGatesMerger) -> None: def test_merge_y90_x_to_h(merger: SingleQubitGatesMerger) -> None: builder = CircuitBuilder(1) - builder.Y90(0) + builder.Ry(0, math.pi / 2) builder.X(0) qc = builder.to_circuit() diff --git a/test/test_asm_declaration.py b/test/test_asm_declaration.py index 3559118c..014ee930 100644 --- a/test/test_asm_declaration.py +++ b/test/test_asm_declaration.py @@ -1,5 +1,3 @@ -import math - import pytest from opensquirrel import Circuit, CircuitBuilder @@ -147,10 +145,10 @@ def test_asm_circuit_builder() -> None: def test_no_merging_across_asm() -> None: builder = CircuitBuilder(2) builder.H(0) - builder.Ry(1, math.pi / 2) + builder.Y90(1) builder.asm("TestBackend", """ a ' " {} () [] b """) builder.H(0) - builder.Rx(1, math.pi / 2) + builder.X90(1) qc = builder.to_circuit() qc.merge(merger=SingleQubitGatesMerger()) assert ( diff --git a/test/test_circuit.py b/test/test_circuit.py new file mode 100644 index 00000000..ab318127 --- /dev/null +++ b/test/test_circuit.py @@ -0,0 +1,31 @@ +from opensquirrel import CircuitBuilder +from opensquirrel.ir import AsmDeclaration + + +def test_asm_filter() -> None: + builder = CircuitBuilder(2) + builder.asm("BackendTest_1", """backend code""") # other name + builder.H(0) + builder.asm("TestBackend", """backend code""") # exact relevant name + builder.CNOT(0, 1) + builder.asm("TestBackend_1", """backend code""") # relevant name variant 1 + builder.CNOT(0, 1) + builder.asm("testbackend", """backend code""") # lowercase name + builder.H(0) + builder.asm("_TestBackend_2", """backend code""") # relevant name variant 2 + builder.to_circuit() + qc = builder.to_circuit() + + asm_statements = [statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)] + assert len(qc.ir.statements) == 9 + assert len(asm_statements) == 5 + + relevant_backend_name = "TestBackend" + qc.asm_filter(relevant_backend_name) + + asm_statements = [statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)] + assert len(qc.ir.statements) == 7 + assert len(asm_statements) == 3 + + for statement in asm_statements: + assert relevant_backend_name in str(statement.backend_name) diff --git a/test/test_ir.py b/test/test_ir.py index 0a114989..99cf5ee2 100644 --- a/test/test_ir.py +++ b/test/test_ir.py @@ -10,6 +10,7 @@ from opensquirrel.common import ATOL from opensquirrel.ir import ( + X90, Axis, AxisLike, Bit, @@ -17,11 +18,19 @@ ControlledGate, Expression, Float, + H, I, Int, MatrixGate, Measure, + MinusX90, Qubit, + Rn, + Rx, + Ry, + Rz, + TDagger, + X, ) @@ -304,6 +313,28 @@ def test_is_identity(self, gate: BlochSphereRotation) -> None: assert I(42).is_identity() assert not gate.is_identity() + @pytest.mark.parametrize( + ("bsr", "default_gate"), + [ + (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2), H(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), X(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi / 2, phase=math.pi / 4), X90(0)), + (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4), X90(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4), MinusX90(0)), + (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=math.pi / 2, phase=math.pi / 4), MinusX90(0)), + (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=-math.pi / 4, phase=-math.pi / 8), TDagger(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi / 4, phase=0), Rx(0, math.pi / 4)), + (BlochSphereRotation(qubit=0, axis=(0, 1, 0), angle=math.pi / 3, phase=0), Ry(0, math.pi / 3)), + (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=3 * math.pi / 4, phase=0), Rz(0, 3 * math.pi / 4)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=math.pi, phase=0), Rn(0, 1, 0, 1, math.pi, 0)), + ], + ids=["H", "X", "X90-1", "X90-2", "mX90-1", "mX90-2", "Tdag", "Rx", "Ry", "Rz", "Rn"], + ) + def test_default_gate_matching(self, bsr: BlochSphereRotation, default_gate: BlochSphereRotation) -> None: + matched_bsr = BlochSphereRotation.try_match_replace_with_default(bsr) + assert matched_bsr == default_gate + assert matched_bsr.name == default_gate.name + class TestMatrixGate: @pytest.fixture(name="gate") diff --git a/test/validator/test_routing_validator.py b/test/validator/test_routing_validator.py index 4801d031..4f8b7e91 100644 --- a/test/validator/test_routing_validator.py +++ b/test/validator/test_routing_validator.py @@ -4,6 +4,7 @@ from opensquirrel import CircuitBuilder from opensquirrel.circuit import Circuit +from opensquirrel.ir import AsmDeclaration from opensquirrel.passes.validator import RoutingValidator @@ -52,3 +53,14 @@ def test_routing_checker_impossible_1to1_mapping(validator: RoutingValidator, ci ValueError, match=r"the following qubit interactions in the circuit prevent a 1-to-1 mapping:.*" ): validator.validate(circuit2.ir) + + +def test_ignore_asm(validator: RoutingValidator) -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.asm("backend_name", r"backend_code") + builder.CNOT(0, 1) + qc = builder.to_circuit() + validator.validate(qc.ir) + + assert len([statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)]) == 1 From 3a25253950a2a196afe94a527be03d88d4f14e73 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Thu, 28 Aug 2025 14:26:47 +0200 Subject: [PATCH 07/12] Release 0.6.0 (#607) --- .devcontainer/Dockerfile | 4 +- .github/workflows/docs.yml | 58 + .github/workflows/release.yaml | 17 +- .github/workflows/tests.yaml | 19 +- .gitignore | 6 +- CHANGELOG.md | 26 +- CONTRIBUTING.md | 22 +- README.md | 13 +- docs/_static/overview_diagram.png | Bin 0 -> 370741 bytes docs/circuit-builder/instructions/gates.md | 48 +- .../decomposition/aba-decomposer.md} | 14 +- .../decomposition/cnot-decomposer.md | 0 .../decomposition/cz-decomposer.md | 0 .../decomposition/index.md | 2 + .../decomposition/mckay-decomposer.md | 0 .../decomposition/predefined-decomposers.md} | 24 +- .../exporting/cqasm-v1-exporter.md | 294 + docs/compilation-passes/exporting/index.md | 31 + .../exporting/quantify-scheduler-exporter.md | 266 + docs/compilation-passes/index.md | 40 +- .../mapping/hardcoded-mapper.md | 0 .../mapping/identity-mapper.md | 0 .../{types-of-passes => }/mapping/index.md | 0 .../mapping/random-mapper.md | 0 docs/compilation-passes/merging/index.md | 12 + .../merging/single-qubit-gates-merger.md | 121 + .../routing/a-star-router.md | 153 + docs/compilation-passes/routing/index.md | 56 + .../routing/shortest-path-router.md | 125 + .../decomposition/aba-decomposer.md | 1 - .../decomposition/predefined-decomposers.md | 1 - .../exporting/cqasm-v1-exporter.md | 1 - .../types-of-passes/exporting/index.md | 1 - .../exporting/quantify-scheduler-exporter.md | 1 - .../types-of-passes/merging/index.md | 1 - .../merging/single-qubit-gates-merger.md | 1 - .../types-of-passes/routing/a-star-router.md | 34 - .../types-of-passes/routing/index.md | 10 - .../types-of-passes/routing/qroute-router.md | 1 - .../routing/shortest-path-router.md | 30 - .../types-of-passes/validation/index.md | 73 - .../validation/primitive-gate-validator.md | 47 - .../validation/routing-validator.md | 59 - docs/compilation-passes/validation/index.md | 6 + .../validation/interaction-validator.md | 63 + .../validation/primitive-gate-validator.md | 62 + docs/tutorial.md | 545 -- docs/tutorial/_static/cnot2cz.png | Bin 115813 -> 0 bytes .../_static/devcontainer_docker_icon.png | Bin 1093 -> 0 bytes .../_static/devcontainer_docker_icon_2.png | Bin 1136 -> 0 bytes docs/tutorial/_static/swap2cnot.png | Bin 131780 -> 0 bytes docs/tutorial/_static/swap2cz.png | Bin 164027 -> 0 bytes docs/tutorial/_static/terminal_icon.png | Bin 68188 -> 0 bytes docs/tutorial/applying-compilation-passes.md | 554 ++ .../custom-gates.md | 56 - .../applying-compilation-passes/index.md | 36 - .../merging-single-qubit-gates.md | 47 - .../_static/devcontainer_docker_icon.png | Bin 1093 -> 0 bytes .../_static/devcontainer_docker_icon_2.png | Bin 1136 -> 0 bytes .../decomposition/_static/terminal_icon.png | Bin 68188 -> 0 bytes docs/tutorial/creating-a-circuit.md | 243 + .../creating-a-circuit/from-a-cqasm-string.md | 38 - docs/tutorial/creating-a-circuit/index.md | 11 - .../creating-a-circuit/strong-types.md | 23 - .../using-the-circuit-builder.md | 86 - docs/tutorial/index.md | 88 +- docs/tutorial/writing-out-and-exporting.md | 96 + mkdocs.yaml | 60 +- opensquirrel/__init__.py | 18 +- opensquirrel/circuit.py | 65 +- opensquirrel/circuit_builder.py | 6 +- opensquirrel/circuit_matrix_calculator.py | 25 +- opensquirrel/common.py | 32 +- opensquirrel/default_gate_modifiers.py | 22 +- opensquirrel/default_instructions.py | 42 +- opensquirrel/ir.py | 1055 --- opensquirrel/ir/__init__.py | 33 + opensquirrel/ir/default_gates/__init__.py | 45 + .../ir/default_gates/single_qubit_gates.py | 101 + .../ir/default_gates/two_qubit_gates.py | 97 + opensquirrel/ir/expression.py | 292 + opensquirrel/ir/ir.py | 155 + opensquirrel/ir/non_unitary.py | 134 + opensquirrel/ir/semantics/__init__.py | 12 + opensquirrel/ir/semantics/bsr.py | 150 + opensquirrel/ir/semantics/controlled_gate.py | 38 + opensquirrel/ir/semantics/matrix_gate.py | 61 + opensquirrel/ir/statement.py | 49 + opensquirrel/ir/unitary.py | 54 + opensquirrel/parser/libqasm/README.md | 3 - opensquirrel/parser/libqasm/__init__.py | 0 opensquirrel/passes/decomposer/__init__.py | 2 - .../passes/decomposer/aba_decomposer.py | 3 +- .../passes/decomposer/cnot2cz_decomposer.py | 13 +- .../passes/decomposer/cnot_decomposer.py | 12 +- .../passes/decomposer/cz_decomposer.py | 12 +- .../passes/decomposer/mckay_decomposer.py | 3 +- .../passes/decomposer/swap2cnot_decomposer.py | 2 +- .../passes/decomposer/swap2cz_decomposer.py | 16 +- opensquirrel/passes/exporter/__init__.py | 4 +- .../passes/exporter/cqasmv1_exporter.py | 26 +- .../exporter/quantify_scheduler_exporter.py | 39 +- opensquirrel/passes/mapper/__init__.py | 9 +- opensquirrel/passes/mapper/general_mapper.py | 24 +- opensquirrel/passes/mapper/mip_mapper.py | 157 + opensquirrel/passes/mapper/qubit_remapper.py | 48 +- opensquirrel/passes/mapper/simple_mappers.py | 43 +- opensquirrel/passes/merger/__init__.py | 2 - opensquirrel/passes/merger/general_merger.py | 3 +- .../merger/single_qubit_gates_merger.py | 7 +- opensquirrel/passes/router/__init__.py | 6 +- opensquirrel/passes/router/astar_router.py | 33 +- .../passes/router/shortest_path_router.py | 28 +- opensquirrel/passes/validator/__init__.py | 10 +- ..._validator.py => interaction_validator.py} | 4 +- .../validator/primitive_gate_validator.py | 2 +- opensquirrel/reader/__init__.py | 5 + .../parser.py => reader/libqasm_parser.py} | 22 +- opensquirrel/reindexer/__init__.py | 4 +- opensquirrel/reindexer/qubit_reindexer.py | 35 +- opensquirrel/utils/check_mapper.py | 4 +- opensquirrel/utils/context.py | 22 + opensquirrel/utils/matrix_expander.py | 30 +- opensquirrel/writer/writer.py | 22 +- poetry.lock | 6332 ----------------- pyproject.toml | 134 +- test/__init__.py | 0 test/decomposer/__init__.py | 0 test/docs/__init__.py | 0 test/docs/test_tutorial.py | 267 - test/exporter/__init__.py | 0 .../test_quantify_scheduler_exporter.py | 111 - test/mapper/__init__.py | 0 test/mapper/test_general_mapper.py | 51 - test/mapper/test_simple_mappers.py | 56 - test/merger/__init__.py | 0 test/parser/__init__.py | 0 test/parser/libqasm/__init__.py | 0 test/test_integration.py | 782 -- test/test_ir.py | 421 -- test/utils/__init__.py | 0 test/writer/__init__.py | 0 {opensquirrel/parser => tests}/__init__.py | 0 .../docs/compilation-passes/test_exporter.py | 324 + tests/docs/compilation-passes/test_merger.py | 72 + tests/docs/compilation-passes/test_router.py | 215 + .../docs/compilation-passes/test_validator.py | 79 + tests/docs/tutorial/test_tutorial.py | 407 ++ .../example/tutorials/test_decompositions.py | 2 +- {test => tests/instructions}/test_init.py | 12 +- .../instructions}/test_instructions.py | 6 +- {test => tests/instructions}/test_measure.py | 28 +- {test => tests/instructions}/test_reset.py | 12 +- {test => tests/instructions}/test_wait.py | 20 +- tests/integration/test_rydberg.py | 76 + tests/integration/test_spin_2_plus.py | 163 + tests/integration/test_starmon_7.py | 182 + tests/integration/test_tuna_5.py | 313 + {test => tests/ir}/ir_equality_test_base.py | 0 tests/ir/semantics/test_bsr.py | 86 + tests/ir/semantics/test_controlled_gate.py | 11 + tests/ir/semantics/test_matrix_gate.py | 46 + tests/ir/test_expression.py | 175 + tests/ir/test_ir.py | 96 + tests/ir/test_non_unitary.py | 33 + .../parser/libqasm/test_libqasm.py | 27 +- .../passes}/decomposer/test_aba_decomposer.py | 6 +- .../decomposer/test_cnot2cz_decomposer.py | 17 +- .../decomposer/test_cnot_decomposer.py | 29 +- .../passes}/decomposer/test_cz_decomposer.py | 19 +- .../decomposer/test_mckay_decomposer.py | 86 +- .../decomposer/test_swap2cnot_decomposer.py | 10 +- .../decomposer/test_swap2cz_decomposer.py | 34 +- .../passes}/decomposer/test_xyx_decomposer.py | 10 +- .../passes}/decomposer/test_xzx_decomposer.py | 20 +- .../passes}/decomposer/test_yxy_decomposer.py | 20 +- .../passes}/decomposer/test_yzy_decomposer.py | 22 +- .../passes}/decomposer/test_zxz_decomposer.py | 28 +- .../passes}/decomposer/test_zyz_decomposer.py | 22 +- .../passes}/exporter/test_cqasmv1_exporter.py | 55 +- .../test_quantify_scheduler_exporter.py | 104 + tests/passes/mapper/test_general_mapper.py | 51 + {test => tests/passes}/mapper/test_mapping.py | 0 tests/passes/mapper/test_mip_mapper.py | 114 + .../passes}/mapper/test_qubit_remapper.py | 0 tests/passes/mapper/test_simple_mappers.py | 123 + .../passes}/merger/test_general_merger.py | 46 +- .../merger/test_single_qubit_gates_merger.py | 62 +- .../passes}/router/test_astar_router.py | 76 +- .../router/test_shortest_path_router.py | 76 +- .../validator/test_interaction_validator.py | 20 +- .../test_primitive_gate_validator.py | 4 +- .../reindexer/test_qubit_reindexer.py | 9 +- {test => tests}/test_asm_declaration.py | 28 +- {test => tests}/test_circuit.py | 12 +- {test => tests}/test_circuit_builder.py | 0 .../test_circuit_matrix_calculator.py | 0 tests/test_parameter_domain.py | 91 + {test => tests}/test_registers.py | 8 +- {test => tests}/test_replacer.py | 10 +- {test => tests}/utils/test_matrix_expander.py | 6 +- {test => tests}/writer/test_writer.py | 9 +- tox.ini | 18 +- uv.lock | 3414 +++++++++ 204 files changed, 10928 insertions(+), 11037 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/_static/overview_diagram.png rename docs/{tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md => compilation-passes/decomposition/aba-decomposer.md} (61%) rename docs/compilation-passes/{types-of-passes => }/decomposition/cnot-decomposer.md (100%) rename docs/compilation-passes/{types-of-passes => }/decomposition/cz-decomposer.md (100%) rename docs/compilation-passes/{types-of-passes => }/decomposition/index.md (82%) rename docs/compilation-passes/{types-of-passes => }/decomposition/mckay-decomposer.md (100%) rename docs/{tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md => compilation-passes/decomposition/predefined-decomposers.md} (84%) create mode 100644 docs/compilation-passes/exporting/cqasm-v1-exporter.md create mode 100644 docs/compilation-passes/exporting/index.md create mode 100644 docs/compilation-passes/exporting/quantify-scheduler-exporter.md rename docs/compilation-passes/{types-of-passes => }/mapping/hardcoded-mapper.md (100%) rename docs/compilation-passes/{types-of-passes => }/mapping/identity-mapper.md (100%) rename docs/compilation-passes/{types-of-passes => }/mapping/index.md (100%) rename docs/compilation-passes/{types-of-passes => }/mapping/random-mapper.md (100%) create mode 100644 docs/compilation-passes/merging/index.md create mode 100644 docs/compilation-passes/merging/single-qubit-gates-merger.md create mode 100644 docs/compilation-passes/routing/a-star-router.md create mode 100644 docs/compilation-passes/routing/index.md create mode 100644 docs/compilation-passes/routing/shortest-path-router.md delete mode 100644 docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md delete mode 100644 docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md delete mode 100644 docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md delete mode 100644 docs/compilation-passes/types-of-passes/exporting/index.md delete mode 100644 docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md delete mode 100644 docs/compilation-passes/types-of-passes/merging/index.md delete mode 100644 docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md delete mode 100644 docs/compilation-passes/types-of-passes/routing/a-star-router.md delete mode 100644 docs/compilation-passes/types-of-passes/routing/index.md delete mode 100644 docs/compilation-passes/types-of-passes/routing/qroute-router.md delete mode 100644 docs/compilation-passes/types-of-passes/routing/shortest-path-router.md delete mode 100644 docs/compilation-passes/types-of-passes/validation/index.md delete mode 100644 docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md delete mode 100644 docs/compilation-passes/types-of-passes/validation/routing-validator.md create mode 100644 docs/compilation-passes/validation/index.md create mode 100644 docs/compilation-passes/validation/interaction-validator.md create mode 100644 docs/compilation-passes/validation/primitive-gate-validator.md delete mode 100644 docs/tutorial.md delete mode 100644 docs/tutorial/_static/cnot2cz.png delete mode 100644 docs/tutorial/_static/devcontainer_docker_icon.png delete mode 100644 docs/tutorial/_static/devcontainer_docker_icon_2.png delete mode 100644 docs/tutorial/_static/swap2cnot.png delete mode 100644 docs/tutorial/_static/swap2cz.png delete mode 100644 docs/tutorial/_static/terminal_icon.png create mode 100644 docs/tutorial/applying-compilation-passes.md delete mode 100644 docs/tutorial/applying-compilation-passes/custom-gates.md delete mode 100644 docs/tutorial/applying-compilation-passes/index.md delete mode 100644 docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md delete mode 100644 docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png delete mode 100644 docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png delete mode 100644 docs/tutorial/circuit_modification/decomposition/_static/terminal_icon.png create mode 100644 docs/tutorial/creating-a-circuit.md delete mode 100644 docs/tutorial/creating-a-circuit/from-a-cqasm-string.md delete mode 100644 docs/tutorial/creating-a-circuit/index.md delete mode 100644 docs/tutorial/creating-a-circuit/strong-types.md delete mode 100644 docs/tutorial/creating-a-circuit/using-the-circuit-builder.md create mode 100644 docs/tutorial/writing-out-and-exporting.md delete mode 100644 opensquirrel/ir.py create mode 100644 opensquirrel/ir/__init__.py create mode 100644 opensquirrel/ir/default_gates/__init__.py create mode 100644 opensquirrel/ir/default_gates/single_qubit_gates.py create mode 100644 opensquirrel/ir/default_gates/two_qubit_gates.py create mode 100644 opensquirrel/ir/expression.py create mode 100644 opensquirrel/ir/ir.py create mode 100644 opensquirrel/ir/non_unitary.py create mode 100644 opensquirrel/ir/semantics/__init__.py create mode 100644 opensquirrel/ir/semantics/bsr.py create mode 100644 opensquirrel/ir/semantics/controlled_gate.py create mode 100644 opensquirrel/ir/semantics/matrix_gate.py create mode 100644 opensquirrel/ir/statement.py create mode 100644 opensquirrel/ir/unitary.py delete mode 100644 opensquirrel/parser/libqasm/README.md delete mode 100644 opensquirrel/parser/libqasm/__init__.py create mode 100644 opensquirrel/passes/mapper/mip_mapper.py rename opensquirrel/passes/validator/{routing_validator.py => interaction_validator.py} (93%) create mode 100644 opensquirrel/reader/__init__.py rename opensquirrel/{parser/libqasm/parser.py => reader/libqasm_parser.py} (94%) create mode 100644 opensquirrel/utils/context.py delete mode 100644 poetry.lock delete mode 100644 test/__init__.py delete mode 100644 test/decomposer/__init__.py delete mode 100644 test/docs/__init__.py delete mode 100644 test/docs/test_tutorial.py delete mode 100644 test/exporter/__init__.py delete mode 100644 test/exporter/test_quantify_scheduler_exporter.py delete mode 100644 test/mapper/__init__.py delete mode 100644 test/mapper/test_general_mapper.py delete mode 100644 test/mapper/test_simple_mappers.py delete mode 100644 test/merger/__init__.py delete mode 100644 test/parser/__init__.py delete mode 100644 test/parser/libqasm/__init__.py delete mode 100644 test/test_integration.py delete mode 100644 test/test_ir.py delete mode 100644 test/utils/__init__.py delete mode 100644 test/writer/__init__.py rename {opensquirrel/parser => tests}/__init__.py (100%) create mode 100644 tests/docs/compilation-passes/test_exporter.py create mode 100644 tests/docs/compilation-passes/test_merger.py create mode 100644 tests/docs/compilation-passes/test_router.py create mode 100644 tests/docs/compilation-passes/test_validator.py create mode 100644 tests/docs/tutorial/test_tutorial.py rename {test => tests}/example/tutorials/test_decompositions.py (99%) rename {test => tests/instructions}/test_init.py (72%) rename {test => tests/instructions}/test_instructions.py (95%) rename {test => tests/instructions}/test_measure.py (82%) rename {test => tests/instructions}/test_reset.py (73%) rename {test => tests/instructions}/test_wait.py (71%) create mode 100644 tests/integration/test_rydberg.py create mode 100644 tests/integration/test_spin_2_plus.py create mode 100644 tests/integration/test_starmon_7.py create mode 100644 tests/integration/test_tuna_5.py rename {test => tests/ir}/ir_equality_test_base.py (100%) create mode 100644 tests/ir/semantics/test_bsr.py create mode 100644 tests/ir/semantics/test_controlled_gate.py create mode 100644 tests/ir/semantics/test_matrix_gate.py create mode 100644 tests/ir/test_expression.py create mode 100644 tests/ir/test_ir.py create mode 100644 tests/ir/test_non_unitary.py rename {test => tests}/parser/libqasm/test_libqasm.py (78%) rename {test => tests/passes}/decomposer/test_aba_decomposer.py (88%) rename {test => tests/passes}/decomposer/test_cnot2cz_decomposer.py (77%) rename {test => tests/passes}/decomposer/test_cnot_decomposer.py (65%) rename {test => tests/passes}/decomposer/test_cz_decomposer.py (75%) rename {test => tests/passes}/decomposer/test_mckay_decomposer.py (62%) rename {test => tests/passes}/decomposer/test_swap2cnot_decomposer.py (89%) rename {test => tests/passes}/decomposer/test_swap2cz_decomposer.py (74%) rename {test => tests/passes}/decomposer/test_xyx_decomposer.py (88%) rename {test => tests/passes}/decomposer/test_xzx_decomposer.py (78%) rename {test => tests/passes}/decomposer/test_yxy_decomposer.py (77%) rename {test => tests/passes}/decomposer/test_yzy_decomposer.py (73%) rename {test => tests/passes}/decomposer/test_zxz_decomposer.py (71%) rename {test => tests/passes}/decomposer/test_zyz_decomposer.py (75%) rename {test => tests/passes}/exporter/test_cqasmv1_exporter.py (79%) create mode 100644 tests/passes/exporter/test_quantify_scheduler_exporter.py create mode 100644 tests/passes/mapper/test_general_mapper.py rename {test => tests/passes}/mapper/test_mapping.py (100%) create mode 100644 tests/passes/mapper/test_mip_mapper.py rename {test => tests/passes}/mapper/test_qubit_remapper.py (100%) create mode 100644 tests/passes/mapper/test_simple_mappers.py rename {test => tests/passes}/merger/test_general_merger.py (80%) rename {test => tests/passes}/merger/test_single_qubit_gates_merger.py (80%) rename {test => tests/passes}/router/test_astar_router.py (54%) rename {test => tests/passes}/router/test_shortest_path_router.py (53%) rename test/validator/test_routing_validator.py => tests/passes/validator/test_interaction_validator.py (66%) rename {test => tests/passes}/validator/test_primitive_gate_validator.py (94%) rename {test => tests}/reindexer/test_qubit_reindexer.py (86%) rename {test => tests}/test_asm_declaration.py (83%) rename {test => tests}/test_circuit.py (68%) rename {test => tests}/test_circuit_builder.py (100%) rename {test => tests}/test_circuit_matrix_calculator.py (100%) create mode 100644 tests/test_parameter_domain.py rename {test => tests}/test_registers.py (81%) rename {test => tests}/test_replacer.py (92%) rename {test => tests}/utils/test_matrix_expander.py (92%) rename {test => tests}/writer/test_writer.py (91%) create mode 100644 uv.lock diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e1a663ea..8f2b5656 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -23,7 +23,7 @@ USER ${USER} # Install additional python packages RUN pip install --upgrade pip wheel setuptools tox pipx -# Install poetry -RUN pipx install poetry +# Install uv +RUN pipx install uv USER root diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..6813c3da --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,58 @@ +name: Docs + +on: + pull_request: + push: + branches: + - "develop" + release: + types: + - created + +env: + UV_USE_ACTIVE_ENV: 1 + +jobs: + build: + name: Publish documentation + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install uv + uses: yezz123/setup-uv@v4 + with: + uv-version: "0.8.12" + + - name: Install package with doc dependencies + run: | + uv sync --group docs + + - name: Configure Git + run: | + git config --global user.name "${{ github.actor }}" + git config --global user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" + git fetch origin gh-pages:gh-pages + + - name: Dry run + if: github.event_name == 'pull_request' + run: | + uv run mkdocs build + + - name: Upload and tag as latest + if: github.ref == 'refs/heads/develop' + run: | + uv run mike deploy --push latest + uv run mike set-default --push latest + + - name: Upload and tag as git tag + if: github.event_name == 'release' && github.event.action == 'created' + run: | + uv run mike deploy --push ${{ github.ref_name }} + uv run mike set-default --push latest diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 48c1fde6..055f9f5a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,6 +9,9 @@ on: types: - created +env: + UV_USE_ACTIVE_ENV: 1 + jobs: publish: name: Publish assets @@ -21,10 +24,10 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.11" - - name: Install poetry - uses: abatilo/actions-poetry@v4 + - name: Install uv + uses: yezz123/setup-uv@v4 with: - poetry-version: "1.8.3" + uv-version: "0.8.12" # Setting the proper version - name: Get previous Tag @@ -35,14 +38,14 @@ jobs: fallback: 0.1.0 - name: Set Build version if: contains(github.ref, 'refs/heads/release-') - run: poetry version "${{ steps.previous_tag.outputs.tag }}.dev${{ github.run_number }}" + run: uv version "${{ steps.previous_tag.outputs.tag }}.dev${{ github.run_number }}" - name: Set Release version if: github.event_name == 'release' && github.event.action == 'created' - run: poetry version ${{ github.ref_name }} + run: uv version ${{ github.ref_name }} # Build package - - name: Build poetry package - run: poetry build + - name: Build uv package + run: uv build # Publishing the package - name: Publish distribution 📦 to Test PyPI diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index ec54ca23..25f5515b 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -6,20 +6,23 @@ on: - master pull_request: +env: + UV_USE_ACTIVE_ENV: 1 + jobs: lint: name: Static analysis runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.11" - - name: Install poetry - uses: abatilo/actions-poetry@v4 + - name: Install uv + uses: yezz123/setup-uv@v4 with: - poetry-version: "1.3.2" + uv-version: "0.8.12" - name: Install tox run: pip install tox - name: run tox lint and type @@ -41,15 +44,15 @@ jobs: - "3.12" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - name: Install poetry - uses: abatilo/actions-poetry@v4 + - name: Install uv + uses: yezz123/setup-uv@v4 with: - poetry-version: "1.3.2" + uv-version: "0.8.12" - name: Install tox run: pip install tox - name: run tox test diff --git a/.gitignore b/.gitignore index 3f09f7e4..891439a8 100644 --- a/.gitignore +++ b/.gitignore @@ -70,6 +70,7 @@ instance/ # MkDocs documentation site/ +public/ # PyBuilder .pybuilder/ @@ -137,9 +138,6 @@ venv38/ # Rope project settings .ropeproject -# mkdocs documentation -/site - # mypy .mypy_cache/ .dmypy.json @@ -161,3 +159,5 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +%LOCALAPPDATA% diff --git a/CHANGELOG.md b/CHANGELOG.md index c7e45145..b5252a3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,21 +10,39 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. -## [ 0.5.0 ] - [ 2025-05-28 ] +## [ 0.6.0 ] - [ 2025-08-28 ] ### Added -- `asm_filter` method to the `Circuit` class to filter-out assembly declarations by backend name +- `MIPMapper` mapper pass +- OpenSquirrel's `__version__` attribute exposed ### Changed -- Default gate identification check refactored (now including check for phase) -- `McKayDecomposer` checks X90 on BSR semantic instead of name +- `RoutingValidator` changed to `InteractionValidator` + +### Fixed + +- `ShortestPathRouter` and `AStarRouter` now correctly propagate SWAP gate insertion effects throughout the circuit +- The values for parameters `theta` and `phi` stay within the domain `(-pi, pi]` throughout parse- and compile-time +(_note_: gate modifiers have precedence over normalization) +- Mapping of the target qubits of controlled gates + +## [ 0.5.0 ] - [ 2025-05-28 ] + +### Added + +- `asm_filter` method to the `Circuit` class to filter out assembly declarations by backend name ### Fixed - `RoutingValidator` ignores assembly declarations +### Changed + +- Default gate identification check refactored (now including check for phase) +- `McKayDecomposer` checks X90 on BSR semantic instead of name + ## [ 0.4.0 ] - [ 2025-04-28 ] ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c6271b63..4ed0a209 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ We recommend working on a feature branch and pull request from there. ## Requirements -- `poetry`, +- `uv`, - `PyCharm` (recommended). ## Creating a feature branch @@ -12,14 +12,11 @@ Make sure your environment contains all the updated versions of the dependencies From an OpenSquirrel checkout: ``` -$ poetry shell -$ poetry install +$ uv sync ``` And that you base your feature branch off an updated `develop`. -From a `poetry` shell (started from an OpenSquirrel checkout): - ``` $ git checkout develop $ git fetch origin @@ -30,30 +27,27 @@ $ git branch ## Before creating the pull request Make sure the tests and the following linters pass. -From a `poetry` shell (started from an OpenSquirrel checkout): +Using `tox` (started from an OpenSquirrel checkout): ``` -$ poetry run mypy opensquirrel test --strict -$ poetry run pytest . -vv -$ poetry run ruff check --fix -$ poetry run ruff format +$ tox -e fix,type,test ``` ## Setting the Python interpreter (PyCharm) -You can choose the Python interpreter from the `poetry` environment. +You can choose the Python interpreter from the `uv` environment. - Go to `Settings` > `Project: OpenSquirrel` > `Python Interpreter`. - Click on `Add Interpeter`, and then select `Add Local Interpreter`. -- Select `Poetry Environment`, and then `Existing environment`. +- Select `uv Environment`, and then `Existing environment`. - Click on `...` to navigate to the `Interpreter` binary. ## Running/Debugging tests (PyCharm) To run/debug all tests: -- Right-click on the `test` folder of the Project tree. -- Click `Run 'pytest' in test` or `Debug 'pytest' in test`. +- Right-click on the `tests` folder of the Project tree. +- Click `Run 'pytest' in tests` or `Debug 'pytest' in tests`. This will also create a `Run/Debug Configuration`. diff --git a/README.md b/README.md index b5293979..7c351c70 100644 --- a/README.md +++ b/README.md @@ -61,16 +61,15 @@ each traversing and modifying it (_e.g._, decomposition of the gates). Here is an example of building a circuit using the `CircuitBuilder`: ```python -import math +from math import pi from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.ir import Qubit # Initialize the builder and build your circuit builder = CircuitBuilder(qubit_register_size=1) -builder.H(Qubit(0)).Z(Qubit(0)).Y(Qubit(0)).Rx(Qubit(0), math.pi / 3) +builder.H(0).Z(0).Y(0).Rx(0, pi / 3) # Get the circuit from the circuit builder -qc = builder.to_circuit() +circuit = builder.to_circuit() ``` Alternatively, one can define the same circuit as a cQASM string: @@ -88,7 +87,7 @@ cqasm_string = (""" """) from opensquirrel.circuit import Circuit -qc = Circuit.from_string(cqasm_string) +circuit = Circuit.from_string(cqasm_string) ``` The circuit can then be decomposed using a decomposition strategy. @@ -99,7 +98,7 @@ In the example below, the circuit is decomposed using the Z-Y-Z decomposer. ```python from opensquirrel.passes.decomposer.aba_decomposer import ZYZDecomposer -qc.decompose(decomposer=ZYZDecomposer()) +circuit.decompose(decomposer=ZYZDecomposer()) ``` Once the circuit is decomposed, it can be written back to cQASM. @@ -108,7 +107,7 @@ This is done by invoking the `writer` class, as can be seen below. ```python from opensquirrel.writer import writer -writer.circuit_to_string(qc) +writer.circuit_to_string(circuit) ``` The output is then given by the following cQASM string: diff --git a/docs/_static/overview_diagram.png b/docs/_static/overview_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b938d2b173b923a31a4195ed978a6102851925 GIT binary patch literal 370741 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�^B%kq0!v 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
  • wz_8ExOn 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%0AppC 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 literal 0 HcmV?d00001 diff --git a/docs/circuit-builder/instructions/gates.md b/docs/circuit-builder/instructions/gates.md index 9b2ef15a..6cfd7fe1 100644 --- a/docs/circuit-builder/instructions/gates.md +++ b/docs/circuit-builder/instructions/gates.md @@ -2,27 +2,27 @@ # [Unitary Instructions](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/unitary_instructions.html) -| Name | Operator | Description | Example | -|------------|----------------|--------------------------------------------------|-------------------------------------------------------------------------| -| I | _I_ | Identity gate | `builder.I(0)` | -| H | _H_ | Hadamard gate | `builder.H(0)` | -| X | _X_ | Pauli-X | `builder.X(0)` | -| X90 | _X90_| Rotation around the x-axis of $\frac{\pi}{2}$ | `builder.X90(0)` | -| mX90 | _X-90_| Rotation around the x-axis of $\frac{-\pi}{2}$ | `builder.mX90(0)` | -| Y | _Y_ | Pauli-Y | `builder.Y(0)` | -| Y90 | _Y90_| Rotation around the y-axis of $\frac{\pi}{2}$ | `builder.Y90(0)` | -| mY90 | _Y-90_| Rotation around the y-axis of $\frac{-\pi}{2}$ | `builder.mY90(0)` | -| Z | _Z_ | Pauli-Z | `builder.Z(0)` | -| S | _S_ | Phase gate | `builder.S(0)` | -| Sdag | _S_| S dagger gate | `builder.Sdag(0)` | -| T | _T_ | T | `builder.T(0)` | -| Tdag | _T_| T dagger gate | `builder.Tdag(0)` | -| Rx | _Rx($\theta$)_| Arbitrary rotation around x-axis | `builder.Rx(0, 0.23)` | -| Ry | _Ry($\theta$)_| Arbitrary rotation around y-axis | `builder.Ry(0, 0.23)` | -| Rz | _Rz($\theta$)_ | Arbitrary rotation around z-axis | `builder.Rz(0, 2)` | -| Rn | _Rn(nx, ny, nz, $\theta$, $\phi$g)_ | Arbitrary rotation around specified axis | `builder.Rn(0)` | -| CZ | _CZ_ | Controlled-Z, Controlled-Phase | `builder.CZ(1, 2)` | -| CR | _CR(\theta)_ | Controlled phase shift (arbitrary angle) | `builder.CR(0, 1, math.pi)` | -| CRk | _CRk(k)_ | Controlled phase shift ($\frac{\pi}{2^{k-1}}$) | `builder.CRk(1, 0, 2)` | -| SWAP | _SWAP_ | SWAP gate | `builder.SWAP(1, 2)` | -| CNOT | _CNOT_ | Controlled-NOT gate | `builder.CNOT(1, 2)` | +| Name | Operator | Description | Example | +|------------|----------------|--------------------------------------------------|----------------------------| +| I | _I_ | Identity gate | `builder.I(0)` | +| H | _H_ | Hadamard gate | `builder.H(0)` | +| X | _X_ | Pauli-X | `builder.X(0)` | +| X90 | _X90_| Rotation around the x-axis of $\frac{\pi}{2}$ | `builder.X90(0)` | +| mX90 | _X-90_| Rotation around the x-axis of $\frac{-\pi}{2}$ | `builder.mX90(0)` | +| Y | _Y_ | Pauli-Y | `builder.Y(0)` | +| Y90 | _Y90_| Rotation around the y-axis of $\frac{\pi}{2}$ | `builder.Y90(0)` | +| mY90 | _Y-90_| Rotation around the y-axis of $\frac{-\pi}{2}$ | `builder.mY90(0)` | +| Z | _Z_ | Pauli-Z | `builder.Z(0)` | +| S | _S_ | Phase gate | `builder.S(0)` | +| Sdag | _S_| S dagger gate | `builder.Sdag(0)` | +| T | _T_ | T | `builder.T(0)` | +| Tdag | _T_| T dagger gate | `builder.Tdag(0)` | +| Rx | _Rx($\theta$)_| Arbitrary rotation around x-axis | `builder.Rx(0, 0.23)` | +| Ry | _Ry($\theta$)_| Arbitrary rotation around y-axis | `builder.Ry(0, 0.23)` | +| Rz | _Rz($\theta$)_ | Arbitrary rotation around z-axis | `builder.Rz(0, 2)` | +| Rn | _Rn(nx, ny, nz, $\theta$, $\phi$g)_ | Arbitrary rotation around specified axis | `builder.Rn(0)` | +| CZ | _CZ_ | Controlled-Z, Controlled-Phase | `builder.CZ(1, 2)` | +| CR | _CR(\theta)_ | Controlled phase shift (arbitrary angle) | `builder.CR(0, 1, 3.1415)` | +| CRk | _CRk(k)_ | Controlled phase shift ($\frac{\pi}{2^{k-1}}$) | `builder.CRk(1, 0, 2)` | +| SWAP | _SWAP_ | SWAP gate | `builder.SWAP(1, 2)` | +| CNOT | _CNOT_ | Controlled-NOT gate | `builder.CNOT(1, 2)` | diff --git a/docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md b/docs/compilation-passes/decomposition/aba-decomposer.md similarity index 61% rename from docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md rename to docs/compilation-passes/decomposition/aba-decomposer.md index 6800782b..9bd0351b 100644 --- a/docs/tutorial/applying-compilation-passes/decomposition/inferred-decomposition.md +++ b/docs/compilation-passes/decomposition/aba-decomposer.md @@ -1,6 +1,3 @@ -OpenSquirrel has a variety inferred decomposition strategies. -More in depth tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). - One of the most common single qubit decomposition techniques is the ZYZ decomposition. This technique decomposes a quantum gate into an `Rz`, `Ry` and `Rz` gate in that order. The decompositions are found in `opensquirrel.passes.decomposer`, @@ -13,11 +10,11 @@ import math builder = CircuitBuilder(qubit_register_size=1) builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) -qc = builder.to_circuit() +circuit = builder.to_circuit() -qc.decompose(decomposer=ZYZDecomposer()) +circuit.decompose(decomposer=ZYZDecomposer()) -print(qc) +print(circuit) ``` _Output_: @@ -41,8 +38,3 @@ from opensquirrel import H print(ZYZDecomposer().decompose(H(0))) ``` -_Output_: - - [BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] diff --git a/docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md b/docs/compilation-passes/decomposition/cnot-decomposer.md similarity index 100% rename from docs/compilation-passes/types-of-passes/decomposition/cnot-decomposer.md rename to docs/compilation-passes/decomposition/cnot-decomposer.md diff --git a/docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md b/docs/compilation-passes/decomposition/cz-decomposer.md similarity index 100% rename from docs/compilation-passes/types-of-passes/decomposition/cz-decomposer.md rename to docs/compilation-passes/decomposition/cz-decomposer.md diff --git a/docs/compilation-passes/types-of-passes/decomposition/index.md b/docs/compilation-passes/decomposition/index.md similarity index 82% rename from docs/compilation-passes/types-of-passes/decomposition/index.md rename to docs/compilation-passes/decomposition/index.md index 6a40263b..c4f132e4 100644 --- a/docs/compilation-passes/types-of-passes/decomposition/index.md +++ b/docs/compilation-passes/decomposition/index.md @@ -9,3 +9,5 @@ the quantum compiler ensures that the algorithm can be run on the available hard regardless of its specific constraints and capabilities. This process ensures that the quantum algorithm is broken down into a series of gates that match the native gate set of the hardware. + +More in depth decomposition tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). diff --git a/docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md b/docs/compilation-passes/decomposition/mckay-decomposer.md similarity index 100% rename from docs/compilation-passes/types-of-passes/decomposition/mckay-decomposer.md rename to docs/compilation-passes/decomposition/mckay-decomposer.md diff --git a/docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md b/docs/compilation-passes/decomposition/predefined-decomposers.md similarity index 84% rename from docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md rename to docs/compilation-passes/decomposition/predefined-decomposers.md index 3b41c519..2dcb8e3e 100644 --- a/docs/tutorial/applying-compilation-passes/decomposition/predefined-decomposition.md +++ b/docs/compilation-passes/decomposition/predefined-decomposers.md @@ -1,3 +1,5 @@ +#### 1. Predefined decomposition + The first kind of decomposition is when you want to replace a particular gate in the circuit, like the `CNOT` gate, with a fixed list of gates. It is commonly known that `CNOT` can be decomposed as `H`-`CZ`-`H`. @@ -8,7 +10,7 @@ which requires the same parameters as the gate that is decomposed: from opensquirrel.circuit import Circuit from opensquirrel import CNOT, H, CZ -qc = Circuit.from_string( +circuit = Circuit.from_string( """ version 3.0 qubit[3] q @@ -18,7 +20,7 @@ qc = Circuit.from_string( Ry q[2], 6.78 """ ) -qc.replace( +circuit.replace( CNOT, lambda control, target: [ @@ -28,7 +30,7 @@ qc.replace( ] ) -print(qc) +print(circuit) ``` _Output_: @@ -52,7 +54,7 @@ or H gate, in our custom-made decomposition: from opensquirrel.circuit import Circuit from opensquirrel import CNOT, CZ, H -qc = Circuit.from_string( +circuit = Circuit.from_string( """ version 3.0 qubit[3] q @@ -63,7 +65,7 @@ qc = Circuit.from_string( """ ) try: - qc.replace( + circuit.replace( CNOT, lambda control, target: [ @@ -78,28 +80,28 @@ _Output_: replacement for gate CNOT does not preserve the quantum state -## _`CNOT` to `CZ` decomposer_ +##### _`CNOT` to `CZ` decomposer_ The decomposition of the `CNOT` gate into a `CZ` gate (with additional single-qubit gates) is used frequently. To this end a `CNOT2CZDecomposer` has been implemented that decomposes any `CNOT`s in a circuit to a `Ry(-π/2)`-`CZ`-`Ry(π/2)`. The decomposition is illustrated in the image below. -

    +![image](../../_static/cnot2cz.png) `Ry` gates are used instead of, _e.g._, `H` gates, as they are, generally, more likely to be supported already by target backends. -## _`SWAP` to `CNOT` decomposer_ +##### _`SWAP` to `CNOT` decomposer_ The `SWAP2CNOTDecomposer` implements the predefined decomposition of the `SWAP` gate into 3 `CNOT` gates. The decomposition is illustrated in the image below. -

    +![image](../../_static/swap2cnot.png) -## _`SWAP` to `CZ` decomposer_ +##### _`SWAP` to `CZ` decomposer_ The `SWAP2CZDecomposer` implements the predefined decomposition of the `SWAP` gate into `Ry` rotations and 3 `CZ` gates. The decomposition is illustrated in the image below. -

    +![image](../../_static/swap2cz.png) diff --git a/docs/compilation-passes/exporting/cqasm-v1-exporter.md b/docs/compilation-passes/exporting/cqasm-v1-exporter.md new file mode 100644 index 00000000..c0dcf5f5 --- /dev/null +++ b/docs/compilation-passes/exporting/cqasm-v1-exporter.md @@ -0,0 +1,294 @@ +The cQASM v1 exporter (`ExportFormat.CQASM_V1`) exports the circuit to a string that adheres to the +[cQASM version 1.0 language specification](https://libqasm.readthedocs.io/). + +Here are some important differences to take note of: + +1. The [version statement](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/version_statement.html) +changes from `version 3.` (where `` refers to the _minor_ version number) to `version 1.0`. +2. All [qubit register declarations](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/variable_declarations/qubit_register_declaration.html) +are combined into a single (virtual) qubit register (`q`) statement. +3. [Bit registers declarations](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/variable_declarations/bit_register_declaration.html) +and [assignments of measurement outcomes to bit register variables](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/measure_instruction.html) +are discarded; cQASM version 1.0 does not support bit registers or variables. +Note that the measurement statement is not discarded; the `measure` instruction is translated to +[`measure_z`](https://libqasm.readthedocs.io/en/latest/cq1-instructions.html#measure-z-qubit). +The outcome of a measurement on qubit at (virtual) index _i_ will be stored at index _i_ in the measurement register. +4. The non-unitary [`init`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/init_instruction.html) +and [`reset`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/reset_instruction.html) +instructions are both translated to [`prep_z`](https://libqasm.readthedocs.io/en/latest/cq1-instructions.html#prep-z-qubit). +5. [Instructions are translated to lowercase](https://libqasm.readthedocs.io/en/latest/cq1-instructions.html#prep-z-qubit); +even though, cQASM version 1.0 is not case-sensitive. +6. [Single gate multi qubit (SGMQ)](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/single-gate-multiple-qubit-notation.html) +notation is unpacked; the gate is applied to each qubit on a separate line. +7. Consecutive [`barrier`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/control_instructions/barrier_instruction.html) +instructions are grouped in SGMQ notation to form a _uniform_ barrier, across which no instructions on the specified +qubits can be scheduled. + +!!! warning "Unsupported gates" + + cQASM version 1.0 does not support the [Rn gate](https://qutech-delft.github.io/cQASM-spec/latest/standard_gate_set/single_qubit/sq_Rn.html) + and will raise an error (`UnSupportedGateError`) if this gate is part of the circuit that is to be exported. + A single-qubit [decomposition pass](../decomposition/index.md) can be used to decompose the circuit to gates that + the cQASM v1 exporter supports. + +The four examples below show how circuits written in [cQASM](https://qutech-delft.github.io/cQASM-spec/) are exported to +cQASM v1. + +!!! example "" + + === "Simple circuit" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + H q[0] + CNOT q[0], q[1] + b = measure q + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + print(exported_circuit) + ``` + + ``` + version 1.0 + + qubits 2 + + h q[0] + cnot q[0], q[1] + measure_z q[0] + measure_z q[1] + ``` + + Note that the version statement is changed (1.), the qubit register declaration is made into a statement (2.), + the bit register declaration and assignment to bit variables have been discarded (3.), + the instructions are in lowercase (5.), and the SGMQ notation has been unpacked (6.). + _The numbers refer to the differences listed above._ + + === "Registers" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] qA + bit[3] bA + + H qA[0] + CNOT qA[0], qA[1] + + bA[1,2] = measure qA + + qubit[3] qB + bit[2] bB + + H qB[1] + CNOT qB[1], qA[1] + + bB[0] = measure qB[1] + bB[1] = measure qA[1] + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + print(exported_circuit) + ``` + + ``` + version 1.0 + + qubits 5 + + h q[0] + cnot q[0], q[1] + measure_z q[0] + measure_z q[1] + h q[3] + cnot q[3], q[1] + measure_z q[3] + measure_z q[1] + ``` + + Note that the version statement is changed (1.), the qubit register declaration is made into a statement (2.), + the bit register declaration and assignment to bit variables have been discarded (3.), + the instructions are in lowercase (5.), and the SGMQ notation has been unpacked (6.). + _The numbers refer to the differences listed above._ + + In particular, this example illustrates that all qubit registers have been combined into a single (virtual) + qubit register `q`, _i.e._, the registers `qA` and `qB` have been concatenated into `q`, + such that `qA[0], qA[1] = q[0], q[1]` and `qB[0], qB[1], qB[2] = q[2], q[3], q[4]`. + The qubit registers are concatenated in the order they are declared. + + Moreover, the bit registers have been discarded and the measurement instructions `measure_z` _implicitly_ assign + the measurement outcomes to the bit/measurement register index corresponding to the index of the (virtual) qubit + that is measured. For instance, `bB[0] = measure qB[1]` is translated to `measure_z q[3]`, + and the outcome will bestored at index 3 in the bit/measurement register. + This also implies that different measurements on the same qubit, at (virtual) index _i_ will always be stored in + the same place, _i.e._ at index _i_, on the bit/measurement register. + Which further implies that outcomes of subsequent measurements on the same qubit always overwrite the outcome of + the previous measurement. + + === "`init` and `reset`" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + init q + + H q[0] + CNOT q[0], q[1] + b = measure q + + reset q + + H q[0] + Z q[0] + CNOT q[0], q[1] + b = measure q + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + print(exported_circuit) + ``` + + ``` + version 1.0 + + qubits 2 + + prep_z q[0] + prep_z q[1] + h q[0] + cnot q[0], q[1] + measure_z q[0] + measure_z q[1] + prep_z q[0] + prep_z q[1] + h q[0] + z q[0] + cnot q[0], q[1] + measure_z q[0] + measure_z q[1] + ``` + + Note that the version statement is changed (1.), the qubit register declaration is made into a statement (2.), + the bit register declaration and assignment to bit variables have been discarded (3.), + the `init` and `reset` instructions are both translated to `prep_z` (4.), + the instructions are in lowercase (5.), and the SGMQ notation has been unpacked (6.). + _The numbers refer to the differences listed above._ + + In cQASM version 1.0, one cannot distinguish between an `init` and a `reset` instruction. + The definition of the `prep_z` instruction is close to that of the `reset` instruction, _i.e._, + the state of the qubit is set to $|0\rangle$ by first measuring it and then, + conditioned on the outcome being 1, applying a Pauli-X gate. + + === "SGMQ notation and _uniform_ barriers" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[4] q + bit[4] b + + init q[0,1] + + barrier q[0] + + H q[0] + CNOT q[0], q[1] + + init q[2] + + barrier q[0] + barrier q[1] + barrier q[2] + + H q[2] + b[0,1] = measure q[0,1] + + init q[3] + + barrier q[2, 3] + Z q[2] + CNOT q[2], q[3] + + b[2,3] = measure q[2,3] + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + print(exported_circuit) + ``` + + ``` + version 1.0 + + qubits 4 + + prep_z q[0] + prep_z q[1] + barrier q[0] + h q[0] + cnot q[0], q[1] + prep_z q[2] + barrier q[0, 1, 2] + h q[2] + measure_z q[0] + measure_z q[1] + prep_z q[3] + barrier q[2, 3] + z q[2] + cnot q[2], q[3] + measure_z q[2] + measure_z q[3] + ``` + + Note that the version statement is changed (1.), the qubit register declaration is made into a statement (2.), + the bit register declaration and assignment to bit variables have been discarded (3.), + the `init` instruction is translated to `prep_z` (4.), + the instructions are in lowercase (5.), the SGMQ notation has been unpacked (6.) and consecutive `barrier` + have been grouped in SGMQ notation to form a _uniform_ barrier (7.). + _The numbers refer to the differences listed above._ + + The three consecutive barrier instructions, following the `init q[2]` statement, have been grouped using SGMQ + notation. + They form a uniform barrier across all the specified qubits, instead of a single barrier on each of the + respective qubits. + Also, in contrast to other instructions where the SGMQ notation has been unpacked, the SGMQ notation for the + statement `barrier q[2, 3]` has been preserved. diff --git a/docs/compilation-passes/exporting/index.md b/docs/compilation-passes/exporting/index.md new file mode 100644 index 00000000..d535fbaa --- /dev/null +++ b/docs/compilation-passes/exporting/index.md @@ -0,0 +1,31 @@ +Instead of writing the circuit out to the [default cQASM format](https://qutech-delft.github.io/cQASM-spec/), +one can also use a custom exporter pass to export the circuit to a particular output format. + +Exporting can be done by calling the `export` method on the circuit object and providing the desired output +format `fmt` as an input argument to the call, _e.g._, + +!!! example "" + + ```python + from opensquirrel import ExportFormat + + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + ``` + +As shown in the example above, the exported circuit is given as the return value. + +The following exporting passes are available in OpenSquirrel: + +- [cQASMv1 exporter](cqasm-v1-exporter.md) (`ExportFormat.CQASM_V1`) +- [quantify-scheduler exporter](quantify-scheduler-exporter.md) (`ExportFormat.QUANTIFY_SCHEDULER`) + +!!! warning "Unsupported language features" + + Note that certain features of the [cQASM language](https://qutech-delft.github.io/cQASM-spec/) may not be supported + by the language to which the circuit is exported. + These features are either processed by the exporter (_e.g._ control instructions), + an error is raised, or some features will simply be lost/ignored and lose their intended effect. + Especially, certain gates may not have a counterpart in the language that is exported to + _e.g._ the general `Rn` gate. + One could circumvent this latter issue by decomposing the circuit into gates that are supported. + Make sure to consult the documentation on the particular exporters to understand the exporting process and result. diff --git a/docs/compilation-passes/exporting/quantify-scheduler-exporter.md b/docs/compilation-passes/exporting/quantify-scheduler-exporter.md new file mode 100644 index 00000000..17dd50f8 --- /dev/null +++ b/docs/compilation-passes/exporting/quantify-scheduler-exporter.md @@ -0,0 +1,266 @@ +The [quantify-scheduler](https://quantify-os.org/docs/quantify-scheduler/) exporter (`ExportFormat.QUANTIFY_SCHEDULER`) +exports the circuit to [`Schedule`](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/index.html#quantify_scheduler.Schedule) +object and a _bitstring mapping_. + +The latter can be used to relate the measurement outcomes to the (virtual) bit variables they have +been assigned to in the cQASM circuit: this connection is lost in the `Schedule`. + +!!! warning "Under active development" + + The bitstring mapping, currently, consists of a list of ordered pairs; the first element denotes the acquisition + index $i$ and the second element denotes the qubit index $j$. + The acquisition index represents the $i$-th measurement on qubit at index $j$. + The index $k$ of the ordered pair in the bitstring mapping corresponds to the index of the (virtual) bit register, + referring to the (virtual) bit variable the outcome of measurement $(i,j)$ has been assigned to in the + cQASM circuit. + + ```python + [ + (, ), + (, ), + ... + <(i,j)-at-index-k: tuple[int, int]>, + ... + ] + ``` + + _A redesign of the bitstring mapping is under active development._ + +Here are some important differences to take note of: + +1. All [qubit register declarations](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/variable_declarations/qubit_register_declaration.html) +are combined into a single (virtual) qubit register (`q`) statement. +2. [Bit registers declarations](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/variable_declarations/bit_register_declaration.html) +and [assignments of measurement outcomes to bit register variables](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/measure_instruction.html) +are discarded; quantify-scheduler does not support bit registers or variables. +Note that the measurement statement is not discarded; the `measure` instruction is translated to +[`Measure`](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/operations/gate_library/index.html#quantify_scheduler.operations.gate_library.Measure). +Furthermore, measurement outcomes are related to the (virtual) bit registers they were assigned to in the cQASM circuit +through the _bitstring mapping_, as described above. +3. The non-unitary [`init`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/init_instruction.html) +instruction is ignored and [`reset`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/non_unitary_instructions/reset_instruction.html) +instruction is translated to [`Reset`](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/operations/gate_library/index.html#quantify_scheduler.operations.gate_library.Reset). +The `reset` instruction can be used to set the state of the qubit to the $|0\rangle$ state, similar to the effect of the +`init` instruction. +4. [Single gate multi qubit (SGMQ)](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/single-gate-multiple-qubit-notation.html) +notation is unpacked; the gate is applied to each qubit on a separate line. +5. Control instructions ([`barrier`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/control_instructions/barrier_instruction.html) +and [`wait`](https://qutech-delft.github.io/cQASM-spec/latest/language_specification/statements/instructions/control_instructions/wait_instruction.html)) +are currently not supported. +_**Note**: processing of the control instructions is currently under active development, but not yet part of the latest +version of OpenSquirrel._ +6. Angles are translated from radians to degrees. + +!!! warning "Unsupported gates" + + The quantify-scheduler exporter does not support the [Rn gate](https://qutech-delft.github.io/cQASM-spec/latest/standard_gate_set/single_qubit/sq_Rn.html) + in general. + Unless both the $n_x$ and $n_y$ components are zero, or just the $n_z$ component is zero, it will raise an error + (`UnSupportedGateError`) if this gate is part of the circuit that is to be exported. + + The same error is raised if the circuit to be exported contains a Hadamard, SWAP, or any arbitrary two-qubit gate + that is not either a CNOT or CZ gate. + [Decomposition passes](../decomposition/index.md) can be used to decompose the circuit to gates that the + quantify-scheduler exporter supports. + +The four examples below show how circuits written in [cQASM](https://qutech-delft.github.io/cQASM-spec/) are exported to a quantify-scheduler +[`Schedule`](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/index.html#quantify_scheduler.Schedule). + +!!! example "" + + === "Simple circuit" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + H q[0] + CNOT q[0], q[1] + b = measure q + """ + ) + + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + + for schedulable in exported_schedule.schedulables.values(): + print(exported_schedule.operations[schedulable["operation_id"]].name) + print('\n', "bitstring mapping: ", bitstring_mapping) + ``` + + ``` + Rxy(90, 90, 'q[0]') + Rxy(180, 0, 'q[0]') + CNOT (q[0], q[1]) + Measure q[0] + Measure q[1] + + bitstring mapping: [(0, 0), (0, 1)] + ``` + + Note that the bit register declaration and assignment to bit variables have been discarded (2.), + the SGMQ notation has been unpacked (4.), and the angles have been translated from radians to degrees (6.). + _The numbers refer to the differences listed above._ + + According to the description of the _bitstring mapping_ above, note that the outcome of the first measurement on + qubit at index $0$, $(i,j) = (0,0)$, is mapped to the (virtual) bit variable ($k=0$; the first ordered pair), + and the outcome of the first measurement on qubit at index $1$, $(i,j) = (0,1)$, is mapped to the (virtual) bit + variable ($k=1$; the second ordered pair). + + === "Registers" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] qA + bit[3] bA + + H qA[0] + CNOT qA[0], qA[1] + + bA[1,2] = measure qA + + qubit[3] qB + bit[2] bB + + H qB[1] + CNOT qB[1], qA[1] + + bB[0] = measure qB[1] + bB[1] = measure qA[1] + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + for schedulable in exported_schedule.schedulables.values(): + print(exported_schedule.operations[schedulable["operation_id"]].name) + print('\n', "bitstring mapping: ", bitstring_mapping) + ``` + + ``` + Rxy(90, 90, 'q[0]') + Rxy(180, 0, 'q[0]') + CNOT (q[0], q[1]) + Measure q[0] + Measure q[1] + Rxy(90, 90, 'q[3]') + Rxy(180, 0, 'q[3]') + CNOT (q[3], q[1]) + Measure q[3] + Measure q[1] + + bitstring mapping: [(None, None), (0, 0), (0, 1), (0, 3), (1, 1)] + ``` + + Note that all qubit register declarations are combined into a single (virtual) qubit register (1.), the bit + register declaration and assignment to bit variables have been discarded (2.), the SGMQ notation has been + unpacked (4.), and the angles have been translated from radians to degrees (6.). + _The numbers refer to the differences listed above._ + + In particular, this example illustrates that all qubit registers have been combined into a single (virtual) + qubit register `q`, _i.e._, the registers `qA` and `qB` have been concatenated into `q`, + such that `qA[0], qA[1] = q[0], q[1]` and `qB[0], qB[1], qB[2] = q[2], q[3], q[4]`. + The qubit registers are concatenated in the order they are declared. + + Moreover, even though the bit registers have been discarded in the circuit, the mapping from meausurement to + (virtual) bit variable has been stored in the _bitstring mapping_. + Note that, just like with the translation of the qubit register declarations to the single virtual register `q`, + the bit register declarations are also concatenated in the order they are declared into a single bit register + `b`. + In this example, the virtual bit register translation is as follows: `bA[0], bA[1], bA[2] = b[0], b[1], b[2]` + and `bB[0], bB[1] = b[3], b[4]`. + Accodingly, the $k$-th element in the bitstring mapping corresponds to the $k$-th element of the bit register. + + For instance, the statement `bB[1] = measure qA[1]` in the original circuit becomes, in terms of virtual + registers, `b[4] = measure q[1]`. + Since this is the second measurement on `q[1]`, the acquisition index is $i = 1$ (counting starts at $0$) and + the qubit index is $j = 1$, such that the measurement is given by the ordered pair $(1, 1)$. + Because the outcome of this measurement is stored in `b[4]`, + the ordered pair is at index $4$ in the bitregister mapping. + + + === "`init` and `reset`" + + ```python + from opensquirrel import Circuit + from opensquirrel.passes.exporter import ExportFormat + ``` + + ```python + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + init q + + H q[0] + CNOT q[0], q[1] + b = measure q + + reset q + + H q[0] + Z q[0] + CNOT q[0], q[1] + b = measure q + """ + ) + + exported_circuit = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + for schedulable in exported_schedule.schedulables.values(): + print(exported_schedule.operations[schedulable["operation_id"]].name) + print('\n', "bitstring mapping: ", bitstring_mapping) + ``` + + ``` + Rxy(90, 90, 'q[0]') + Rxy(180, 0, 'q[0]') + CNOT (q[0], q[1]) + Measure q[0] + Measure q[1] + Reset q[0] + Reset q[1] + Rxy(90, 90, 'q[0]') + Rxy(180, 0, 'q[0]') + Rz(180, 'q[0]') + CNOT (q[0], q[1]) + Measure q[0] + Measure q[1] + + bitstring mapping: [(1, 0), (1, 1)] + ``` + + Note that the bit register declaration and assignment to bit variables have been discarded (2.), + the `init` instructions have been ignored and the `reset` instructions have been translated to [Reset](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/operations/gate_library/index.html#quantify_scheduler.operations.gate_library.Reset), + the SGMQ notation has been unpacked (4.), and the angles have been translated from radians to degrees (6.). + _The numbers refer to the differences listed above._ + + The [quantify-scheduler operation library](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/operations/gate_library/index.html) + does not distinguish between an `init` and a `reset` instruction. + For now, the `init` instruction is ignored and the `reset` instruction is translated to + [Reset](https://quantify-os.org/docs/quantify-scheduler/v0.25.0/autoapi/quantify_scheduler/operations/gate_library/index.html#quantify_scheduler.operations.gate_library.Reset). + Note that one can us the `reset` instruction to set the state of the qubit to the $|0\rangle$ state, + which is similar to the effect of the `init` instruction. + +!!! warning "macOS ARM not supported" + + The quantify-scheduler exporter cannot run on macOS ARM, due to the fact that the required dependency + `pyqt5-qt5==5.15.2` does provide binaries for that architecture. diff --git a/docs/compilation-passes/index.md b/docs/compilation-passes/index.md index 9a2f9f04..9b9cad7b 100644 --- a/docs/compilation-passes/index.md +++ b/docs/compilation-passes/index.md @@ -1,5 +1,5 @@ -Compilation passes are essential steps in the process of converting a high-level quantum algorithm (i.e. quantum -circuits) into a hardware-specific executable format. +Compilation passes are essential steps in the process of converting a high-level quantum algorithm, +_i.e._ quantum circuits, into a hardware-specific executable format. This process, known as _quantum compilation_, involves several stages to ensure that the quantum circuit can be executed efficiently on a given quantum hardware. @@ -11,19 +11,33 @@ target hardware, such as qubit coupling map or native gate set. These passes are therefore needed to ensure that an initial circuit is converted to a version that adheres to the requirements of the hardware. +They can easily be applied using the following methods on the `circuit` object: -## Integrated passes - -- Reader (cQASM parser: using libQASM) -- Writer (writes to cQASM) +- decompose +- export +- map +- merge +- route +- validate ## Types of passes -The following passes are available: +Given the methods stated above, the following types of passes are available: + +- [Decomposer](decomposition/index.md) +- [Exporter](exporting/index.md) +- [Mapper](mapping/index.md) +- [Merger](merging/index.md) +- [Router](routing/index.md) +- [Validator](validation/index.md) + +!!! note "Integrated passes" -- [Decomposer](types-of-passes/decomposition/index.md) -- [Exporter](types-of-passes/exporting/index.md) -- [Mapper](types-of-passes/mapping/index.md) -- [Merger](types-of-passes/merging/index.md) -- [Router](types-of-passes/routing/index.md) -- [Validator](types-of-passes/validation/index.md) + The [reader](../tutorial/creating-a-circuit.md) and [writer](../tutorial/writing-out-and-exporting.md) passes are + integrated in particular functionalities of the circuit. + They are not applied in the same way as the passes mentioned above, _i.e._, + by passing them as an argument when calling one of the aforementiond methods on the circuit. + Instead, the reader and writer are executed when one parses a [cQASM](https://qutech-delft.github.io/cQASM-spec) + string or writes out the circuit to a cQASM string, respectively. + The reader is invoked when using the `Circuit.from_string` method, + and the writer is invoked when converting the circuit to a string with `str` or printing it out with `print`. diff --git a/docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md b/docs/compilation-passes/mapping/hardcoded-mapper.md similarity index 100% rename from docs/compilation-passes/types-of-passes/mapping/hardcoded-mapper.md rename to docs/compilation-passes/mapping/hardcoded-mapper.md diff --git a/docs/compilation-passes/types-of-passes/mapping/identity-mapper.md b/docs/compilation-passes/mapping/identity-mapper.md similarity index 100% rename from docs/compilation-passes/types-of-passes/mapping/identity-mapper.md rename to docs/compilation-passes/mapping/identity-mapper.md diff --git a/docs/compilation-passes/types-of-passes/mapping/index.md b/docs/compilation-passes/mapping/index.md similarity index 100% rename from docs/compilation-passes/types-of-passes/mapping/index.md rename to docs/compilation-passes/mapping/index.md diff --git a/docs/compilation-passes/types-of-passes/mapping/random-mapper.md b/docs/compilation-passes/mapping/random-mapper.md similarity index 100% rename from docs/compilation-passes/types-of-passes/mapping/random-mapper.md rename to docs/compilation-passes/mapping/random-mapper.md diff --git a/docs/compilation-passes/merging/index.md b/docs/compilation-passes/merging/index.md new file mode 100644 index 00000000..939bc89f --- /dev/null +++ b/docs/compilation-passes/merging/index.md @@ -0,0 +1,12 @@ +Merger passes in OpenSquirrel are used to merge gates into single operations. +Their main purpose is to reduce the circuit depth. + +Note that the gate that results from merging two gates will in general be an arbitrary operation, _i.e._, +not be a _known_ gate. +In most cases, subsequent [decomposition](../decomposition/index.md) of the gates will be required in order to execute +the circuit on a target backend. +The kind of decomposition pass required will depend on the primitive gate set that the intended backend supports. + +OpenSquirrel currently facilitates the following merge pass: + +- [Single-qubit gates merger](single-qubit-gates-merger.md) (`SingleQubitGatesMerger`) diff --git a/docs/compilation-passes/merging/single-qubit-gates-merger.md b/docs/compilation-passes/merging/single-qubit-gates-merger.md new file mode 100644 index 00000000..2ee44e16 --- /dev/null +++ b/docs/compilation-passes/merging/single-qubit-gates-merger.md @@ -0,0 +1,121 @@ +All single-qubit gates appearing in a circuit can be merged by using the single-qubit gates merging pass +(`SingleQubitGatesMerger`). +Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. +Single-qubit gates are also not merged across _non-unitary_ instructions, _e.g._ `init`, `reset`, and `measure`, +and _control_ instructions, _e.g._, `wait`, and `barrier`. +Merging single-qubit gates may lead to a significant reduction in circuit depth, _i.e._, +the number of operations required to execute the circuit. + +OpenSquirrel will try to recognize whether the resulting gate is a _known_ gate, _e.g._, +if two consecutive X90 gates are merged, OpenSquirrel will recognize it as a single X gate. +Nevertheless, the gate that results from the merger of multiple single-qubit gates will, +in general, be an arbitrary rotation. +Accordingly, to be able to run the circuit on a particular backend that supports a given primitive gate set, +it is often required to perform a [decomposition](../decomposition/index.md) pass after merging the single-qubit +gates. + +!!! note + + Depending on the circuit and chosen decomposition, the circuit depth might actually increase, + even though a merging pass has been applied. + For instance, if the merging of two single-qubit gates leads to an arbitrary single-qubit rotation gate + and the [`McKayDecomposer`](../decomposition/mckay-decomposer.md) is used, then the two initial gates may + ultimately result in five single-qubit rotation gates. + This is demonstrated in the final example below. + +The example below shows how the single-qubit gates merging pass can be used to merge the single-qubit gates in the +circuit. +Note that the `SingleQubitGatesMerger` pass does not require any input arguments. + +_Check the [circuit builder](../../circuit-builder/index.md) on how to generate a circuit._ + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.passes.merger import SingleQubitGatesMerger +from math import pi # not necessary for using the SingleQubitGatesMerger +``` + +```python +builder = CircuitBuilder(1) +for _ in range(4): + builder.Rx(0, pi / 4) +circuit = builder.to_circuit() + +circuit.merge(merger=SingleQubitGatesMerger()) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[1] q + + Rx(3.1415927) q[0] + ``` + +The above example shows how four consecutive Rx rotations over $\pi/4$, are merged into a single Rx rotation over $\pi$. + +The following example shows that the merging of single-qubit gates does not occur across multi-qubit gates, +non-unitary instructions, and control instructions. + +```python +builder = CircuitBuilder(2, 2) +builder.Ry(0, pi / 2).X(0).CNOT(0, 1).H(0).X(1) +builder.barrier(1) +builder.H(0).X(1).measure(0, 0).H(0).X(1) +circuit = builder.to_circuit() + +circuit.merge(merger=SingleQubitGatesMerger()) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[2] q + bit[2] b + + H q[0] + CNOT q[0], q[1] + H q[0] + X q[1] + barrier q[1] + H q[0] + b[0] = measure q[0] + H q[0] + ``` + +!!! note + + In the above example, note that even though the `barrier` is placed on qubit at index 1, + that the Hadamards (`H`) on qubit at index 0 on either side of that barrier are not merged. + Barriers are unique in this regard; no merging of single-qubit gates occurs across barriers + regardless of the qubit on which the barrier acts. + +The final example below shows how the circuit depth ultimately increases, +even though the single-qubit gates where merged using the single-qubit gates merging pass. + +```python +builder = CircuitBuilder(1) +builder.Rx(0, pi / 3).Ry(0, pi / 5) +circuit = builder.to_circuit() + +circuit.merge(merger=SingleQubitGatesMerger()) +circuit.decompose(decomposer=McKayDecomposer()) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[1] q + + Rz(-2.2688338) q[0] + X90 q[0] + Rz(1.9872376) q[0] + X90 q[0] + Rz(-1.2436334) q[0] + ``` diff --git a/docs/compilation-passes/routing/a-star-router.md b/docs/compilation-passes/routing/a-star-router.md new file mode 100644 index 00000000..149e198f --- /dev/null +++ b/docs/compilation-passes/routing/a-star-router.md @@ -0,0 +1,153 @@ +The A\* (pronounced _A-star_) qubit routing pass (`AStarRouter`) uses the A\* search algorithm to find the optimal path between qubits +that need to interact but are not directly connected, given the backend connectivity. +By leveraging one of the following distance metrics as a heuristic: + +- Manhattan, +- Euclidean, or +- Chebyshev. + +It balances the trade-off between circuit depth and computational efficiency. +This approach ensures that SWAP gates are inserted along the most efficient paths, +minimizing the overall cost of routing while adhering to the connectivity constraints. + +The examples below show how the A\* qubit routing pass, along with specified distance metrics, can be used to route +circuits in OpenSquirrel, given the connectivity of the backend. + +_Check the [circuit builder](../../circuit-builder/index.md) on how to generate a circuit._ + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.passes.router import AStarRouter +from opensquirrel.passes.router.heuristics import DistanceMetric +``` + +```python +connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + +builder = CircuitBuilder(5) +builder.CNOT(0, 1) +builder.CNOT(1, 2) +builder.CNOT(2, 3) +builder.CNOT(3, 4) +builder.CNOT(0, 4) +circuit = builder.to_circuit() + +a_star_router = AStarRouter( + connectivity=connectivity, + distance_metric=DistanceMetric.MANHATTAN +) +circuit.route(router=a_star_router) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[5] q + + CNOT q[0], q[1] + CNOT q[1], q[2] + CNOT q[2], q[3] + CNOT q[3], q[4] + SWAP q[0], q[1] + SWAP q[1], q[2] + SWAP q[2], q[3] + CNOT q[3], q[4] + ``` + +```python +connectivity = { + "0": [1, 2, 5], + "1": [0, 3, 6], + "2": [0, 4, 7], + "3": [1, 5, 8], + "4": [2, 6, 9], + "5": [0, 3, 7], + "6": [1, 4, 8], + "7": [2, 5, 9], + "8": [3, 6, 9], + "9": [4, 7, 8], +} + +builder = CircuitBuilder(10) +builder.CNOT(0, 9) +builder.CNOT(1, 8) +builder.CNOT(2, 7) +builder.CNOT(3, 6) +builder.CNOT(4, 5) +builder.CNOT(0, 2) +builder.CNOT(1, 3) +builder.CNOT(4, 6) +builder.CNOT(5, 7) +builder.CNOT(8, 9) +builder.CNOT(0, 5) +builder.CNOT(1, 6) +builder.CNOT(2, 8) +builder.CNOT(3, 9) +circuit = builder.to_circuit() + +a_star_router = AStarRouter( + connectivity=connectivity, + distance_metric=DistanceMetric.CHEBYSHEV +) +circuit.route(router=a_star_router) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[10] q + + SWAP q[0], q[2] + SWAP q[2], q[4] + CNOT q[4], q[9] + SWAP q[1], q[6] + CNOT q[6], q[8] + SWAP q[0], q[2] + CNOT q[2], q[7] + CNOT q[3], q[6] + CNOT q[0], q[5] + CNOT q[4], q[2] + SWAP q[6], q[1] + CNOT q[1], q[3] + SWAP q[0], q[1] + CNOT q[1], q[6] + CNOT q[5], q[7] + CNOT q[8], q[9] + SWAP q[4], q[2] + SWAP q[2], q[0] + CNOT q[0], q[5] + SWAP q[2], q[4] + CNOT q[4], q[6] + SWAP q[2], q[4] + SWAP q[4], q[9] + CNOT q[9], q[8] + SWAP q[3], q[8] + SWAP q[8], q[9] + CNOT q[9], q[9] + ``` + +If, based on the connectivity, a certain interaction is not possible, the A\* router will throw an error; +as shown in the following example where qubits 0 and 1 are disconnected from qubits 2 and 3. + +```python +connectivity = {"0": [1], "1": [0], "2": [3], "3": [2]} + +builder = CircuitBuilder(4) +builder.CNOT(0, 2) +builder.CNOT(3, 1) +circuit = builder.to_circuit() + +a_star_router = AStarRouter( + connectivity=connectivity, + distance_metric=DistanceMetric.EUCLIDEAN +) +circuit.route(router=a_star_router) +``` + +!!! example "" + + `NoRoutingPathError: No routing path available between qubit 0 and qubit 2` diff --git a/docs/compilation-passes/routing/index.md b/docs/compilation-passes/routing/index.md new file mode 100644 index 00000000..1c2393d6 --- /dev/null +++ b/docs/compilation-passes/routing/index.md @@ -0,0 +1,56 @@ +The qubit routing pass is a crucial step in the process of quantum compilation. +It ensures that two-qubit interactions can be executed given a certain target backend. + +On quantum processing units (QPUs) qubits are often arranged in specific topologies where only certain pairs of qubits +can directly interact. +Which qubits can interact is given by a mapping called the backend connectivity, _e.g._: + +=== "Linear" + + ```python + connectivity = { + "0": [1], + "1": [0, 2], + "2": [1, 3], + "3": [2, 4], + "4": [3] + } + ``` + +=== "Star-shaped" + + ```python + connectivity = { + "0": [2], + "1": [2], + "2": [0, 1, 3, 4], + "3": [2], + "4": [2] + } + ``` + +=== "Diamond-shaped" + + ```python + connectivity = { + "0": [1, 2], + "1": [0, 3, 4], + "2": [0, 4, 5], + "3": [1, 4, 6], + "4": [1, 2, 6, 7], + "5": [2, 4, 7], + "6": [3, 4, 8], + "7": [4, 5, 8], + "8": [6, 7], + } + ``` + +The routing pass modifies the quantum circuit by inserting operations—typically _SWAP_ gates— +that distribute the qubits such that the defined interactions can take place between connected qubits. +In other words, it ensures that all qubit interactions respect the connectivity constraints, +making the circuit executable on the target backend. + +The following routing passes are available in Opensquirrel: + +- [A* router](a-star-router.md) (`AStarRouter`) +- [Shortest-path router](shortest-path-router.md) (`ShortestPathRouter`) diff --git a/docs/compilation-passes/routing/shortest-path-router.md b/docs/compilation-passes/routing/shortest-path-router.md new file mode 100644 index 00000000..12e0a8cd --- /dev/null +++ b/docs/compilation-passes/routing/shortest-path-router.md @@ -0,0 +1,125 @@ +The shortest-path routing pass (`ShortestPathRouter`) ensures that qubit interactions in a circuit can be executed +given the target backend connectivity. +It inserts the necessary SWAP gates along the shortest path, +moving the qubits closer together so the intended operation can be performed. +This approach aims to minimize the number of SWAPs required for each interaction +by using the `shortest_path` method from the `networkx` package. +While it uses a straightforward algorithm, it may result in an overly increased circuit depth. + +The following examples showcase the usage of the shortest-path routing pass. +Note that the backend connectivity is required as an input argument. + +_Check the [circuit builder](../../circuit-builder/index.md) on how to generate the circuit._ + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.passes.router import ShortestPathRouter +``` + +```python +connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + +builder = CircuitBuilder(5) +builder.CNOT(0, 1) +builder.CNOT(1, 2) +builder.CNOT(2, 3) +builder.CNOT(3, 4) +builder.CNOT(0, 4) +circuit = builder.to_circuit() + +shortest_path_router = ShortestPathRouter(connectivity=connectivity) +circuit.route(router=shortest_path_router) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[5] q + + CNOT q[0], q[1] + CNOT q[1], q[2] + CNOT q[2], q[3] + CNOT q[3], q[4] + SWAP q[0], q[1] + SWAP q[1], q[2] + SWAP q[2], q[3] + CNOT q[3], q[4] + ``` + +```python +connectivity = { + "0": [1, 2], + "1": [0, 3], + "2": [0, 4], + "3": [1, 5], + "4": [2, 5], + "5": [3, 4, 6], + "6": [5] +} + +builder = CircuitBuilder(7) +builder.CNOT(0, 6) +builder.CNOT(1, 5) +builder.CNOT(2, 4) +builder.CNOT(3, 6) +builder.CNOT(0, 2) +builder.CNOT(1, 3) +builder.CNOT(4, 5) +builder.CNOT(5, 6) +circuit = builder.to_circuit() + +shortest_path_router = ShortestPathRouter(connectivity=connectivity) +circuit.route(router=shortest_path_router) +``` + +??? example "`print(circuit)`" + + ``` + version 3.0 + + qubit[7] q + + SWAP q[0], q[1] + SWAP q[1], q[3] + SWAP q[3], q[5] + CNOT q[5], q[6] + SWAP q[0], q[1] + CNOT q[1], q[5] + CNOT q[2], q[4] + SWAP q[0], q[1] + SWAP q[1], q[3] + SWAP q[3], q[5] + CNOT q[5], q[6] + SWAP q[3], q[1] + SWAP q[1], q[0] + CNOT q[0], q[2] + SWAP q[1], q[3] + CNOT q[3], q[3] + SWAP q[4], q[2] + SWAP q[2], q[0] + CNOT q[0], q[5] + SWAP q[1], q[3] + SWAP q[3], q[5] + CNOT q[5], q[6] + ``` + +If, based on the connectivity, a certain interaction is not possible, the shortest-path router will throw an error; +as shown in the following example where qubits 0 and 1 are disconnected from qubits 2 and 3. + +```python +connectivity = {"0": [1], "1": [0], "2": [3], "3": [2]} + +builder = CircuitBuilder(4) +builder.CNOT(0, 2) +builder.CNOT(3, 1) +circuit = builder.to_circuit() + +shortest_path_router = ShortestPathRouter(connectivity=connectivity) +circuit.route(router=shortest_path_router) +``` + +!!! example "" + + `NoRoutingPathError: No routing path available between qubit 0 and qubit 2` diff --git a/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md b/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/decomposition/aba-decomposer.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md b/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/decomposition/predefined-decomposers.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md b/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/exporting/cqasm-v1-exporter.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/index.md b/docs/compilation-passes/types-of-passes/exporting/index.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/exporting/index.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md b/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/exporting/quantify-scheduler-exporter.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/merging/index.md b/docs/compilation-passes/types-of-passes/merging/index.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/merging/index.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md b/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/merging/single-qubit-gates-merger.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/routing/a-star-router.md b/docs/compilation-passes/types-of-passes/routing/a-star-router.md deleted file mode 100644 index 60035996..00000000 --- a/docs/compilation-passes/types-of-passes/routing/a-star-router.md +++ /dev/null @@ -1,34 +0,0 @@ -The A* qubit routing algorithm uses the A* search algorithm to find the optimal path between qubits that need to -interact but are not directly connected on the hardware. -By leveraging simple heuristics such as Manhattan, Euclidean, or Chebyshev distances, -it balances the trade-off between circuit depth and computational efficiency. -This approach ensures that SWAP gates are inserted along the most efficient paths, -minimizing the overall cost of routing while adhering to the hardware's connectivity constraints. - -## Class Object - -```python -AStarRouter(connectivity: dict[str, list[int]], distance_metric: DistanceMetric = None) -``` - -## Attribute(s) - -```python -connectivity: dictionary where key-values pairs represent -qubit connections on the backend. -distance_metric: metric to use in the computation of the shortest path -between two nodes -``` - -## Method(s) - -```python -def route(self, ir: IR) -> IR: - """ - Routes the circuit by inserting SWAP gates, with A*, to make it executable given the hardware connectivity. - Args: - ir: The intermediate representation of the circuit. - Returns: - The intermediate representation of the routed circuit (including the additional SWAP gates). - """ -``` diff --git a/docs/compilation-passes/types-of-passes/routing/index.md b/docs/compilation-passes/types-of-passes/routing/index.md deleted file mode 100644 index 392cba1c..00000000 --- a/docs/compilation-passes/types-of-passes/routing/index.md +++ /dev/null @@ -1,10 +0,0 @@ -The qubit routing pass is a crucial step in the process of quantum compilation. -It involves transforming quantum circuits to ensure that all two-qubit operations comply with the connectivity -constraints of a target quantum hardware architecture. - -In quantum computing, qubits are often arranged in specific topologies where only certain pairs of qubits can directly -interact. -The routing pass adjusts the initial mapping of virtual qubits to physical qubits by inserting necessary operations, -such as _SWAP_ gates, to move qubits into positions where they can interact as required by the quantum circuit. -This process is essential because it ensures that the quantum circuit can be executed on the hardware without violating -its connectivity constraints. diff --git a/docs/compilation-passes/types-of-passes/routing/qroute-router.md b/docs/compilation-passes/types-of-passes/routing/qroute-router.md deleted file mode 100644 index 749513eb..00000000 --- a/docs/compilation-passes/types-of-passes/routing/qroute-router.md +++ /dev/null @@ -1 +0,0 @@ -!!! note "Coming soon" diff --git a/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md b/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md deleted file mode 100644 index 6f1e0873..00000000 --- a/docs/compilation-passes/types-of-passes/routing/shortest-path-router.md +++ /dev/null @@ -1,30 +0,0 @@ -Within this routing pass, SWAP gates are introduced along the shortest path between qubit pairs that need to interact on -the hardware, but do not share a connection. -While simple and straight-forward, this may result in an overly increased circuit depth. - -## Class Object - -```python -ShortestPathRouter(connectivity: dict[str, list[int]]) -``` - -## Attribute(s) - -```python -connectivity: dictionary where key-values pairs represent -qubit connections on the backend. -``` - -## Method(s) - -```python -def route(self, ir: IR) -> IR: - """ - Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not # noqa: W291 - interact with each other, to make it executable given the hardware connectivity. - Args: - ir: The intermediate representation of the circuit. - Returns: - The intermediate representation of the routed circuit (including the additional SWAP gates). - """ -``` diff --git a/docs/compilation-passes/types-of-passes/validation/index.md b/docs/compilation-passes/types-of-passes/validation/index.md deleted file mode 100644 index 3674f313..00000000 --- a/docs/compilation-passes/types-of-passes/validation/index.md +++ /dev/null @@ -1,73 +0,0 @@ -The _Validator_ passes in _OpenSquirrel_ are meant to provide some tools to check whether a quantum circuit is -executable given the restraints imposed by the hardware. - -## Routing validator - -This pass checks whether all the connections outlined in the description of the quantum algorithm (i.e. qubits which -need to interact because of various 2-qubit gates) are executable on the hardware. -If there certain connections which are not possible on the hardware, the validator will throw a `ValueError`, -specifying which qubit interactions prevent the execution. - -### Class Object - -```python -RoutingValidator(connectivity: dict[str, list[int]]) -``` - -### Attribute(s) - -```python -connectivity: dictionary where key-values pairs represent -qubit connections on the backend. -``` - -### Method(s) - -```python -def validate(ir: IR) -> None: - """ - Check if the circuit interactions faciliate a 1-to-1 mapping to the target hardware. - - Args: - ir (IR): The intermediate representation of the circuit to be checked. - - Raises: - ValueError: If the circuit can't be mapped to the target hardware. - """ -``` - -## Primitive gate validator - -When developing quantum algorithms, their compilation on a specific device depends on whether the hardware supports the -operations implemented on the circuit. -To this end, the primitive gate validator pass checks whether the quantum gates on the quantum circuit are present in -the primitive gate set of the quantum hardware. -If this is not the case, the validator will throw a `ValueError`, -specifying which gates are present in the circuit's description, but not in the hardware's primitive gate set. - -### Class Object - -```python -NativeGateValidator(native_gate_set: list[str]) -``` - -### Attribute(s) - -```python -native_gate_set: A list containing the native gate set. -``` - -### Method(s) - -```python -def validate(ir: IR) -> None: - """ - Check if all unitary gates in the circuit are part of the native gate set. - - Args: - ir (IR): The intermediate representation of the circuit to be checked. - - Raises: - ValueError: If any unitary gate in the circuit is not part of the native gate set. - """ -``` diff --git a/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md b/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md deleted file mode 100644 index 47e27e8d..00000000 --- a/docs/compilation-passes/types-of-passes/validation/primitive-gate-validator.md +++ /dev/null @@ -1,47 +0,0 @@ -When developing quantum algorithms, their compilation on a specific device depends on whether the hardware supports the -operations implemented on the circuit. -To this end, the native gate validator pass checks whether the quantum gates on the quantum circuit are present in the -native gate set of the quantum hardware. -If this is not the case, the validator will throw a `ValueError`, specifying which gates are present in the circuit's -description, but not in the hardware's native gate set. - -## Class Object - -```python -PrimitiveGateValidator(native_gate_set: list[str]) -``` - -## Attribute(s) - -```python -native_gate_set: A list containing the primitive gate set. -``` - -The `PrimitiveGateValidator` can be used as such. - -```python -from opensquirrel import CircuitBuilder -from opensquirrel.circuit import Circuit -from opensquirrel.passes.validator import NativeGateValidator - -primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] - -validator = PrimitiveGateValidator(primtive_gate_set = primitive_gate_set) - -builder = CircuitBuilder(5) -builder.I(0) -builder.X90(1) -builder.mX90(2) -builder.Y90(3) -builder.mY90(4) -builder.Rz(0, 2) -builder.CZ(1, 2) -builder.H(0) -builder.CNOT(1, 2) -circuit = builder.to_circuit() - -validator.validate(circuit.ir) -``` -_Output_: - - ValueError: the following gates are not in the primitive gate set: ['H', 'CNOT'] diff --git a/docs/compilation-passes/types-of-passes/validation/routing-validator.md b/docs/compilation-passes/types-of-passes/validation/routing-validator.md deleted file mode 100644 index ebe1da6b..00000000 --- a/docs/compilation-passes/types-of-passes/validation/routing-validator.md +++ /dev/null @@ -1,59 +0,0 @@ -This pass checks whether all the connections outlined in the description of the quantum algorithm (i.e. qubits which need to interact because of various 2-qubit gates) are executable on the hardware. If there certain connections which are not possible on the hardware, the validator will throw a `ValueError`, specifying which qubit interactions prevent the execution. - -## Class Object - -```python -RoutingValidator(connectivity: dict[str, list[int]]) -``` - -### Attribute(s) - -```python -connectivity: dictionary where key-values pairs represent -qubit connections on the backend. -``` - -## Example - -The `RoutingValidator` can be used in the following manner to check whether all qubit interactions defined in the quantum algorithm are available in the circuit. - -```python -from opensquirrel import CircuitBuilder -from opensquirrel.circuit import Circuit -from opensquirrel.passes.validator import RoutingValidator - -connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} - -validator = RoutingValidator(connectivity = connectivity) - -builder = CircuitBuilder(5) -builder.H(0) -builder.CNOT(0, 1) -builder.H(2) -builder.CNOT(1, 2) -builder.CNOT(2, 4) -builder.CNOT(3, 4) -circuit = builder.to_circuit() - -validator.validate(circuit.ir) -``` - -In the scenario above, there will be no output, as all qubit connections are executable. On the other hand, the script below will raise a `ValueError` (considering the same `validator` object and `connectivity` as above). - -```python -builder = CircuitBuilder(5) -builder.H(0) -builder.CNOT(0, 1) -builder.CNOT(0, 3) -builder.H(2) -builder.CNOT(1, 2) -builder.CNOT(1, 3) -builder.CNOT(2, 3) -builder.CNOT(3, 4) -builder.CNOT(0, 4) - -validator.validate(circuit.ir) -``` -_Output_: - - ValueError: the following qubit interactions in the circuit prevent a 1-to-1 mapping: [(0, 3), (2, 3), (0, 4)] diff --git a/docs/compilation-passes/validation/index.md b/docs/compilation-passes/validation/index.md new file mode 100644 index 00000000..44f75106 --- /dev/null +++ b/docs/compilation-passes/validation/index.md @@ -0,0 +1,6 @@ +Validator passes in OpenSquirrel are meant to provide some tools to check whether a quantum circuit is +executable given the constraints imposed by the target backend. +OpenSquirrel facilitates the following validation passes: + +- [Interaction validator](interaction-validator.md) (`InteractionValidator`) +- [Primitive gate validator](primitive-gate-validator.md) (`PrimitiveGateValidator`) diff --git a/docs/compilation-passes/validation/interaction-validator.md b/docs/compilation-passes/validation/interaction-validator.md new file mode 100644 index 00000000..cf9b6e4f --- /dev/null +++ b/docs/compilation-passes/validation/interaction-validator.md @@ -0,0 +1,63 @@ +This pass checks whether all interactions in the circuit, _i.e._ two-qubit gates, are executable given the backend +connectivity. +If certain interactions are not possible, the validator will throw a `ValueError`, +specifying which interactions cannot be executed. + +The interaction validator (`InteractionValidator`) can be used in the following manner. + +_Check the [circuit builder](../../circuit-builder/index.md) on how to generate a circuit._ + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.passes.validator import InteractionValidator +``` + +```python +connectivity = { + "0": [1, 2], + "1": [0, 2, 3], + "2": [0, 1, 4], + "3": [1, 4], + "4": [2, 3] +} + +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(2, 4) +builder.CNOT(3, 4) +circuit = builder.to_circuit() + +interaction_validator = InteractionValidator(connectivity=connectivity) +circuit.validate(validator=interaction_validator) +``` + +In the scenario above, there will be no output since all qubit interactions are executable given the connectivity. +On the other hand, the circuit below will raise an error (`ValueError`) as certain interactions are not possible. + +```python +builder = CircuitBuilder(5) +builder.H(0) +builder.CNOT(0, 1) +builder.CNOT(0, 3) +builder.H(2) +builder.CNOT(1, 2) +builder.CNOT(1, 3) +builder.CNOT(2, 3) +builder.CNOT(3, 4) +builder.CNOT(0, 4) +circuit = builder.to_circuit() + +circuit.validate(validator=interaction_validator) +``` + +!!! example "" + + `ValueError: the following qubit interactions in the circuit prevent a 1-to-1 mapping:{(2, 3), (0, 3), (0, 4)}` + +!!! note "Resolving the error" + + The circuit can be redefined to only contain interactions between connected qubits or a + [routing pass](../routing/index.md) can be used to resolve the error. diff --git a/docs/compilation-passes/validation/primitive-gate-validator.md b/docs/compilation-passes/validation/primitive-gate-validator.md new file mode 100644 index 00000000..c02028b4 --- /dev/null +++ b/docs/compilation-passes/validation/primitive-gate-validator.md @@ -0,0 +1,62 @@ +When developing quantum algorithms, their compilation on a specific device depends on whether the hardware supports the +operations implemented on the circuit. + +To this end, the primitive gate validator pass checks whether the quantum gates in the +quantum circuit are present in the primitive gate set of the target backend. +If this is not the case, the validator will throw a `ValueError`, +specifying which gates in the circuit are not in the provided primitive gate set. + +Below are some examples of using the primitive gate validator (`PrimitiveGateValidator`). + +_Check the [circuit builder](../../circuit-builder/index.md) on how to generate a circuit._ + +```python +from opensquirrel import CircuitBuilder +from opensquirrel.passes.validator import PrimitiveGateValidator +``` + +```python +from math import pi +pgs = ["I", "Rx", "Ry", "Rz", "CZ"] + +builder = CircuitBuilder(5) +builder.Rx(pi / 2) +builder.Ry(1, -pi / 2) +builder.CZ(0, 1) +builder.Ry(1, pi / 2) +circuit = builder.to_circuit() + +circuit.validate(validator=PrimitiveGateValidator(primitive_gate_set=pgs)) +``` + +In the scenario above, there will be no output, as all gates in the circuit are in the primitive gate set. +On the other hand, the circuit below will raise an error (`ValueError`) as certain gates are not supported, +given the backend primitive gate set (`pgs`). + +```python +pgs = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + +builder = CircuitBuilder(5) +builder.I(0) +builder.X90(1) +builder.mX90(2) +builder.Y90(3) +builder.mY90(4) +builder.Rz(0, 2) +builder.CZ(1, 2) +builder.H(0) +builder.CNOT(1, 2) +circuit = builder.to_circuit() + +circuit.validate(validator=PrimitiveGateValidator(primitive_gate_set=pgs)) +``` + +!!! example "" + + `ValueError: the following gates are not in the primitive gate set: ['H', 'CNOT']` + +!!! note "Resolving the error" + + The upsupported gates can be replaced manually, or a [decomposition pass](../decomposition/index.md) can be used to + resolve the error. + diff --git a/docs/tutorial.md b/docs/tutorial.md deleted file mode 100644 index 8ce8a96f..00000000 --- a/docs/tutorial.md +++ /dev/null @@ -1,545 +0,0 @@ -# Tutorial - -## Installation - -OpenSquirrel is available through the Python Package Index ([PyPI]()). - -Accordingly, installation is as easy as ABC: -```shell -$ pip install opensquirrel -``` - -You can check if the package is installed by importing it: -```python -import opensquirrel -``` - -## Creating a circuit - -OpenSquirrel's entrypoint is the `Circuit`, which represents a quantum circuit. -You can create a circuit in two different ways: - - 1. form a string written in [cQASM](https://qutech-delft.github.io/cQASM-spec), or; - 2. by using the `CircuitBuilder` in Python. - -### 1. From a cQASM string - -```python -from opensquirrel import Circuit - -qc = Circuit.from_string( - """ - version 3.0 - - // Initialise a circuit with two qubits and a bit - qubit[2] q - bit[2] b - - // Create a Bell pair - H q[0] - CNOT q[0], q[1] - - // Measure qubits - b = measure q - """ -) - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[2] q - bit[2] b - - H q[0] - CNOT q[0], q[1] - b[0] = measure q[0] - b[1] = measure q[1] - - -### 2. Using the `CircuitBuilder` - -For creation of a circuit through Python, the `CircuitBuilder` can be used accordingly: - -```python -from opensquirrel.circuit_builder import CircuitBuilder - -builder = CircuitBuilder(qubit_register_size=2) -builder.Ry(0, 0.23).CNOT(0, 1) -qc = builder.to_circuit() - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[2] q - - Ry(0.23) q[0] - CNOT q[0], q[1] - -You can naturally use the functionalities available in Python to create your circuit: - -```python -from opensquirrel.circuit_builder import CircuitBuilder - -builder = CircuitBuilder(qubit_register_size=10) -for i in range(0, 10, 2): - builder.H(i) -qc = builder.to_circuit() - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[10] q - - H q[0] - H q[2] - H q[4] - H q[6] - H q[8] - -For instance, you can generate a quantum fourier transform (QFT) circuit as follows: - -```python -from opensquirrel.circuit_builder import CircuitBuilder - -qubit_register_size = 5 -builder = CircuitBuilder(qubit_register_size) -for i in range(qubit_register_size): - builder.H(i) - for c in range(i + 1, qubit_register_size): - builder.CRk(c, i, c-i+1) -qft = builder.to_circuit() - -print(qft) -``` -_Output_: - - version 3.0 - - qubit[5] q - - H q[0] - CRk(2) q[1], q[0] - CRk(3) q[2], q[0] - CRk(4) q[3], q[0] - CRk(5) q[4], q[0] - H q[1] - CRk(2) q[2], q[1] - CRk(3) q[3], q[1] - CRk(4) q[4], q[1] - H q[2] - CRk(2) q[3], q[2] - CRk(3) q[4], q[2] - H q[3] - CRk(2) q[4], q[3] - H q[4] - -### Strong types - -As you can see, gates require _strong types_. For instance, you cannot do: - -```python -from opensquirrel.circuit import Circuit - -try: - Circuit.from_string( - """ - version 3.0 - qubit[2] q - - CNOT q[0], 3 // The CNOT expects a qubit as second argument. - """ - ) -except Exception as e: - print(e) -``` -_Output_: - - Parsing error: failed to resolve overload for cnot with argument pack (qubit, int) - -The issue is that the `CNOT` expects a qubit as second input argument where an integer has been provided. - -## Modifying a circuit - -### Merging single qubit gates - -All single-qubit gates appearing in a circuit can be merged by applying `merge(merger=SingleQubitGatesMerger())` to the circuit. -Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. -The gate that results from the merger of single-qubit gates will, in general, -comprise an arbitrary rotation and, therefore, not be a known gate. -In OpenSquirrel an unrecognized gate is deemed _anonymous_. -When a circuit contains anonymous gates and is written to a cQASM string, -the semantic representation of the anonymous gate is exported. - -!!! warning - - The semantic representation of an anonymous gate is not compliant - [cQASM](https://qutech-delft.github.io/cQASM-spec), meaning that - a cQASM parser, _e.g._ [libQASM](https://qutech-delft.github.io/libqasm/), - will not recognize it as a valid statement. - -```python -from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.passes.merger import SingleQubitGatesMerger -from opensquirrel.ir import Float -import math - -builder = CircuitBuilder(1) -for _ in range(4): - builder.Rx(0, math.pi / 4) -qc = builder.to_circuit() - -qc.merge(merger=SingleQubitGatesMerger()) - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[1] q - - BlochSphereRotation(qubit=Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) - -In the above example, OpenSquirrel has merged all the Rx gates together. -Yet, for now, OpenSquirrel does not recognize that this results in a single Rx -over the cumulated angle of the individual rotations. -Moreover, it does not recognize that the result corresponds to the X gate (up to a global phase difference). -At a later stage, we may want OpenSquirrel to recognize the resultant gate -in the case it is part of the set of known gates. - -The gate set is, however, not immutable. -In the following section, we demonstrate how new gates can be defined and added to the default gate set. - -### Defining your own quantum gates - -OpenSquirrel accepts any new gate and requires its definition in terms of a semantic. -Creating new gates is done using Python functions, decorators, and one of the following gate semantic classes: -`BlochSphereRotation`, `ControlledGate`, or `MatrixGate`. - -- The `BlochSphereRotation` class is used to define an arbitrary single qubit gate. -It accepts a qubit, an axis, an angle, and a phase as arguments. -Below is shown how the X-gate is defined in the default gate set of OpenSquirrel: - -```python -from opensquirrel.ir import Gate, BlochSphereRotation, QubitLike, named_gate -import math - -@named_gate -def x(q: QubitLike) -> Gate: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) -``` - -Notice the `@named_gate` decorator. -This _tells_ OpenSquirrel that the function defines a gate and that it should, -therefore, have all the nice properties OpenSquirrel expects of it. - -- The `ControlledGate` class is used to define a multiple qubit gate that comprises a controlled operation. -For instance, the `CNOT` gate is defined in the default gate set of OpenSquirrel as follows: - -```python -from opensquirrel.ir import Gate, ControlledGate, QubitLike, named_gate -from opensquirrel import X - -@named_gate -def cnot(control: QubitLike, target: QubitLike) -> Gate: - return ControlledGate(control, X(target)) -``` - -- The `MatrixGate` class may be used to define a gate in the generic form of a matrix: - -```python -from opensquirrel.ir import Gate, MatrixGate, QubitLike, named_gate - -@named_gate -def swap(q1: QubitLike, q2: QubitLike) -> Gate: - return MatrixGate( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - [q1, q2], - ) -``` - -!!! note - - User defined gates can only be used in when creating a circuit with the circuit builder. - [cQASM](https://qutech-delft.github.io/cQASM-spec) parsers will not recognize user defined gates, _i.e._, - they cannot be used when creating a circuit through a cQASM string. - -### Gate decomposition - -OpenSquirrel can decompose the gates of a quantum circuit, given a specific decomposition. -OpenSquirrel offers several, so-called, decomposers out of the box, -but users can also make their own decomposer and apply them to the circuit. -Decompositions can be: - 1. predefined, or; - 2. inferred from the gate semantics. - -#### 1. Predefined decomposition - -The first kind of decomposition is when you want to replace a particular gate in the circuit, -like the `CNOT` gate, with a fixed list of gates. -It is commonly known that `CNOT` can be decomposed as `H`-`CZ`-`H`. -This decomposition is demonstrated below using a Python _lambda function_, -which requires the same parameters as the gate that is decomposed: - -```python -from opensquirrel.circuit import Circuit -from opensquirrel import CNOT, H, CZ - -qc = Circuit.from_string( - """ - version 3.0 - qubit[3] q - - X q[0:2] // Note that this notation is expanded in OpenSquirrel. - CNOT q[0], q[1] - Ry q[2], 6.78 - """ -) -qc.replace( - CNOT, - lambda control, target: - [ - H(target), - CZ(control, target), - H(target), - ] -) - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[3] q - - X q[0] - X q[1] - X q[2] - H q[1] - CZ q[0], q[1] - H q[1] - Ry(6.78) q[2] - -OpenSquirrel will check whether the provided decomposition is correct. -For instance, an exception is thrown if we forget the final Hadamard, -or H gate, in our custom-made decomposition: - -```python -from opensquirrel.circuit import Circuit -from opensquirrel import CNOT, CZ, H - -qc = Circuit.from_string( - """ - version 3.0 - qubit[3] q - - X q[0:2] - CNOT q[0], q[1] - Ry q[2], 6.78 - """ -) -try: - qc.replace( - CNOT, - lambda control, target: - [ - H(target), - CZ(control, target), - ] - ) -except Exception as e: - print(e) -``` -_Output_: - - replacement for gate CNOT does not preserve the quantum state - -##### _`CNOT` to `CZ` decomposer_ - -The decomposition of the `CNOT` gate into a `CZ` gate (with additional single-qubit gates) is used frequently. -To this end a `CNOT2CZDecomposer` has been implemented that decomposes any `CNOT`s in a circuit to a -`Ry(-π/2)`-`CZ`-`Ry(π/2)`. The decomposition is illustrated in the image below. - -

    - -`Ry` gates are used instead of, _e.g._, `H` gates, as they are, generally, -more likely to be supported already by target backends. - -##### _`SWAP` to `CNOT` decomposer_ - -The `SWAP2CNOTDecomposer` implements the predefined decomposition of the `SWAP` gate into 3 `CNOT` gates. -The decomposition is illustrated in the image below. - -

    - -##### _`SWAP` to `CZ` decomposer_ - -The `SWAP2CZDecomposer` implements the predefined decomposition of the `SWAP` gate into `Ry` rotations and 3 `CZ` -gates. -The decomposition is illustrated in the image below. - -

    - - -#### 2. Inferred decomposition - -OpenSquirrel has a variety inferred decomposition strategies. -More in depth tutorials can be found in the [decomposition example Jupyter notebook](https://github.com/QuTech-Delft/OpenSquirrel/blob/develop/example/decompositions.ipynb). - -One of the most common single qubit decomposition techniques is the ZYZ decomposition. -This technique decomposes a quantum gate into an `Rz`, `Ry` and `Rz` gate in that order. -The decompositions are found in `opensquirrel.passes.decomposer`, -an example can be seen below where a `H`, `Z`, `Y`, and `Rx` gate are all decomposed on a single qubit circuit. - -```python -from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.passes.decomposer import ZYZDecomposer -import math - -builder = CircuitBuilder(qubit_register_size=1) -builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) -qc = builder.to_circuit() - -qc.decompose(decomposer=ZYZDecomposer()) - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[1] q - - Rz(3.1415927) q[0] - Ry(1.5707963) q[0] - Rz(3.1415927) q[0] - Ry(3.1415927) q[0] - Rz(1.5707963) q[0] - Ry(1.0471976) q[0] - Rz(-1.5707963) q[0] - -Similarly, the decomposer can be used on individual gates. - -```python -from opensquirrel.passes.decomposer import ZYZDecomposer -from opensquirrel import H - -print(ZYZDecomposer().decompose(H(0))) -``` -_Output_: - - [BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 1. 0.], angle=1.5707963267948966, phase=0.0), - BlochSphereRotation(qubit=Qubit[0], axis=Axis[0. 0. 1.], angle=1.5707963267948966, phase=0.0)] - - -## Exporting a circuit - -As you have seen in the examples above, you can turn a circuit into a -[cQASM](https://qutech-delft.github.io/cQASM-spec) string -by simply using the `str` or `__repr__` methods. -We are aiming to support the possibility to export to other languages as well, -_e.g._, a OpenQASM 3.0 string, and frameworks, _e.g._, a Qiskit quantum circuit. - -## Validating Aspects of a Circuit - -The available `Validator` passes enable the user to validate various aspects of a circuit. - -### Routing Validator - -For instance, the `RoutingValidator` checks whether a circuit is directly executable given some hardware's coupling map. The example below shows how this `Validator` instance can be used. - -```python -from opensquirrel import CircuitBuilder -from opensquirrel.circuit import Circuit -from opensquirrel.passes.validator import RoutingValidator - -connectivity= {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} - -validator = RoutingValidator(connectivity = connectivity) - -builder = CircuitBuilder(5) -builder.H(0) -builder.CNOT(0, 1) -builder.H(2) -builder.CNOT(1, 2) -builder.CNOT(2, 4) -builder.CNOT(3, 4) - -circuit = builder.to_circuit() - -validator.validate(circuit.ir) -``` - -In this scenario, all 2-qubit gates are executable on the hardware and no output is produced. On the other hand, if there are indeed qubit connections that do not exist on the device, a `ValueError` will be raised. - -```python -builder = CircuitBuilder(5) -builder.H(0) -builder.CNOT(0, 1) -builder.CNOT(0, 3) -builder.H(2) -builder.CNOT(1, 2) -builder.CNOT(1, 3) -builder.CNOT(2, 3) -builder.CNOT(3, 4) -builder.CNOT(0, 4) - -circuit = builder.to_circuit() - -validator.validate(circuit.ir) -``` -_Output_: - - ValueError: the following qubit interactions in the circuit prevent a 1-to-1 mapping: ((0, 3), (1, 3), (2, 3)) - -### Native Gate Validator - -The `NativeGateValidator` will raise a `ValueError` if there are gates on the circuit that are not present in the native gate set of the quantum device. - -```python -from opensquirrel import CircuitBuilder -from opensquirrel.circuit import Circuit -from opensquirrel.passes.validator import NativeGateValidator - -native_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] - -validator = RoutingValidator(native_gate_set = native_gate_set) - -builder = CircuitBuilder(5) -builder.I(0) -builder.X90(1) -builder.mX90(2) -builder.Y90(3) -builder.mY90(4) -builder.Rz(0, 2) -builder.CZ(1, 2) -builder.H(0) -builder.CNOT(1, 2) - -circuit = builder.to_circuit() - -validator.validate(circuit.ir) -``` - -_Output_: - - ValueError: the following gates are not in the native gate set: ['H', 'CNOT'] - - - diff --git a/docs/tutorial/_static/cnot2cz.png b/docs/tutorial/_static/cnot2cz.png deleted file mode 100644 index 7b0cfdbe37ffd0ed7830df4c06938595d0f126d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115813 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≪1dl5?R>g295Rn+h}6hepI<-+4g^*vIM|y$rfUh6 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 diff --git a/docs/tutorial/_static/devcontainer_docker_icon.png b/docs/tutorial/_static/devcontainer_docker_icon.png deleted file mode 100644 index 2a1d295682f3d9e684b68a83cfd586c26d1939c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmV-L1iJf)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1KLSMK~z{r?U_kv z6loO4Uwu{8)h0dBEXFM^M8-r>M{q$T9uz^H@t`Lc1VKD0!{AL2R1iGrLC`@DGl=4H z6E_5L0cV83faqi}YGM!*Of+FMYuD0MpYN-B#Dt`4>2xP`$nQ}7-utNP@893{UbR$H zTg@Q?Oe+I6Z7E1<2}OKxEUmp&K&##hTJ5i>LZwJJGN1p3^z$RYGXoUK zAB;W&k;_+tw&ZZ+&I^>vI!|~32rWRJxe>3D=j4EQfBp$AK+-D6$_*(wovi#4T0mTx z6fn_D3Ycgn1r!2x&d;FzcmVfanIhSVp8%EsZSilQ)f|MPHD^(SMh&AAI{|9dHeht< zDbv?Ma`{o$&PHef+~^`JH@MzOmOtw3Eo6D9bGEs8ST;fnusR;&HB#n14DbG6Dv--7aLkzfM*# zM)RfbBOs|MU@2TcOmQ2>8YSnUtNG5#knJB%Bh?%o;&N2JCf60@A)4w&yQljDz@N?09FTqg)e{{;O{ zcR}C7&CvT`W9a*$Vzoa4yXP%={&)gfZ{syMr!yMQ4?dV@`ayqjEdL{6r$K*xj+|gz z0d~(D$b990Mz()tI{<14&6y>(~&BR)2Md zyzmSwXv8awqV-onPE}K69N;$SZ!TcI^9Kc@F|45BwgKt-Ly_j-SP*Nf|JnYWJ1-a} zKp?itzGnw82l8!^gHmM~)1Pd5~7zw#- zC9vXoAQ#QW0CRUPNh!vu*N&azcsBIl+-?I0*OAlP3{JX`*)G60_yu4=P;#7I00000 LNkvXXu0mjf$?5&U diff --git a/docs/tutorial/_static/devcontainer_docker_icon_2.png b/docs/tutorial/_static/devcontainer_docker_icon_2.png deleted file mode 100644 index 917cd6dd1b1b2de1a939c6d465936114c57c04f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmV-$1dscPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1O-V%K~z{r?U>n5 z6G0fj{aZk!+k;YiP@ojrQfMiqEei&T9N|*H14K;Zu$*!{7!x%y#_(W>Mqe~)Of)_i zj~9&(Mx#*^BPJeEqY)8b{o1Kt*V*0f(ehx@23{;hBGT^7tZY!=E3XVQ)T>4Fj%zk$6JfSn$s7Mv0lX7S4g#-g_&9SNrhDce((ntYP9)gPpjVIz>-X%(dlA6o9$R)^Yi(-HX9Jd}gTBZf8?Bj7&@+q~{7cGhzTHFsz+eeK>i4vEB+s_!RPHr#-Bw1->JUI4(YAcv9D*Xtlo-}aHRKZg5D&8tBzXakl6&QI$ zQd2O=0LiS#gx_DpB=|p!fXr2uNk4+vBodTfJn84|UcqXh z?(h?P-JqglIkr{g2M1Z$;c^e^aOlC>q+g*U$loc2qO0*uWdVkz09(oQvs8Eahwo#n z1dAJvra6pB`T?-Hbu`U{CIzmADq2tJii)|xd@w$>9~_A6^#|)lpJ6;9c2U&5!oA!8 z{_!Kk+6RXPE}9nBJU!>B_FP~?N+PW_y;Kz;{{FM!$#>W%A^!d+1+T>f{E+xX6Yr?8 zxKXp`Mp5NEU$-^g=2%jslw{p zrD3*WWa2X9UpZrm&(nL6UHC~gkFCFe^!k(bBN(ieuFmC#qu;5=)K9!Djf^rnhKdKw z?j2-ADSU%>EZ%l1SPZ#-1YM!IyyaMU`Xlwo@briB<|VDs1Th+I9_;S}haOWgjf?A5 zeV2`80d9wqDDxvQdTnWBqJH8vWx&pV^YmO0EO&LBReD?^sPQ9+juVIQ)O#FPb*T44 zid@a)8jeefyi`O6{0L;7!WYCp`~bdx+;y!UP0k;MPR!Tju6tMj0000xYNSd>5j9k$N=K!LH0hwU9FC}{s5|tI3P?v#kRGLI zM2dnS9U=7IJNYJ%1O@NCKHu~Hah@|~C$rbA^;>n;3=b};UZAHvNV{#@HhRRxbL!i+ z?Mc|SZTq(!RN#~7lzdU}Kbl(?bse{DW4Ma{kL;CfqUE-2N4Fu)ozZkN8g8SjH!^eP z94~p45)d3Ayzf@zK^2}-g*Q;_{xePqdkbUB>K}0Yv-?3T#g6;T%0lhOxwVe%-c3fs zxR-3tZaa!Zjoo|rXl6dB@R1EWDefkFKaq1Y%2_z+GUU-0Iak`cQ||u% zoU-DA$q-BpF=-4*iDOg|9Gqc+*e8&6jA;u@p>-c5C4*suxm!bN4MHpWkhjX@Lzt|} zBnl?0I(ZAa2Q9-fD~M4g2Rq1HbYGw)6AQ|?SS(AC={L3m=agJKni ziIUG$(}%%r$)l_6hu%%?{VTD-1IPTU0OvyEUiY&kMvw*vcf&&y$j-5oKJdC=(j6y!X!Y(- zVSXCqD5aM-SC!x41FChNcEf+GVf$!?!?5Lu)jJR~`$@mLN8O1mic_wLRZ&a`)G8IQ zqgr|MOgEI!CgC|R)8q*cSQwBh^zlu%97-)Kx_6!KF`>1#1$49>R22&K%;wo5=*{R` zo2Ej)6AcqknS@{(6%p666H7QT%qWjz7>fgYw!lu9#{{mD9i2>kQlV?2ByTDDjzv|d zTCA+8U~lLR@P1Fg2d#UlN}I{wGToXvLUz!8Q4|!y@Sv>e6Cm^xlm`cf2_a*6QUkt) zUNi?Dsi#O{2;a>m6lh*5;a4YoES(DJKyG&LoAoR6(<M4Il`RN z-5Iip;FYR)dqmY?U=inG`RFif)Miszi}HCdEIonXAfoM}x*1m$6};5a;4t|L^D7BJ zOTf;=0dKoh;y3=hW)dyPB*ZRNK`~67{j^r+9fUS44~}UrPJelt^bNwmq>KU>ir0P; zy9gh|njs|s>#e`u3J;Dj%X_`|m1Lm#cIc<@b!S7?;LVi(ksRcHN~17rCagS0W`quK zeG)&~%C>zwSd_c{Nv@-wso!~A;dS~?Vdt5iJwFP4Eb2!7$0~`7L7UJ>9mDKF^l~;i zXXc3J6y!-`#1S&lSkCJyot>NCjHCfewpSnt`}Q9AwinFOc@*KyhJc-3yvs$k-i?Hne%D||%C zTq?BD*{5^TTyOoIUQsEVgup&>h&!NXXU1B>ge}z*l*1s|)o$5pRLn9~Y5<}38H+(_ zEKePF`El&tVV5hT`9ta7T8!V`)N*OH|0p$GEAQTkq;|lq%=Hy7jaHT{SC(L7a0@Y0 zYPe~&yuRo=UMn@!^N!k3JYtlkQ@Z)!W`@LSk@;Hc_2jS+9+;R??krvgEe8=)1HzH_~)Jd@q8Ve}W4g^O`Hj>kg1q$9gWcbga(cj>OjFA!M$}Rc&)F z(>i-0$Q$tp;}r;9vu*JK$B5p%LTmbT{=AHiut5>_*#15ZsoS$ zwkn>E7w8#G$*4}&N?CN7tzt9^!FnR9Z``>$MD!q}H|8?}7pvrHwU0pEc^x$R(bthQ z6uqC1g*AN9gn6@l_%jb5#h_Oa?Ge~K8`c&3CwB~XN%Y4Sb}?mqLQ)?IwaIBpcx)zg z-`7%9X8yzzDX7M4Hal-HImMwTNT;_?7U#~xk0>toI{H<_hVRDV&5AA;0s=~>Bs&|z z1N03#mdI1hE6(|&6jJ(aP5NQ~!xXKr7CFK6<0NJY^~K6JmgW4^piYTIwt1D}smO$p znplQ}rXMdrATXfjEfKR=pXeq1G9kXk9kHK1FE@UMm+1P5GThyN4#WhiKll_0_-8pp zwq3X);rp&;$j2g?{YK?x1NR@;XmSE6#=c+z*(@aq+BCl@9Cgm9j1+eibf3g}@rzs? zxq47Jd*bS7!B}ysL7pJ9q0{AtR9&H;;&*n=UxxOfJW@YOd?T7n(kr%uc%cfNQ&B+_ z^NABCPb)sX`F2KP|2VI6>$XawxQSmN{q(m1+=aY=ec=`qGChTz>aD7byLTkqbFM8n zrcyImIu$QX>`bF^%v6o6Y+sbCQG9mej@4_>KB!gugbwXyoS4MoWA6UhAFPBYCZ-fS z>si9IB`#hdkB$rIT=*mb{XMK8k zWv(N}v09vy4LASMu||5XUi9QMHxEcdv5e-}7Ax`?ub*|?he%cgDC|MJ!uDT8XV>j1 zG~2@8-;SzeJ|&2KDqGfmFylAf;h3bae@<)Tk$V(D3)s;S8`tIRU5 z3a?1@%Bbx_v7$_EO7>q0*^J-X1VEF`P5p<&2WTI9S06bMvKnO(fv?R#OF4P7|*O*KR22vl!(bn z`+hLwz3?G9opggR29M6|c|F1U;i5(;EXY`F^D}RgW*`iZqQGxj$~PS(J&4!~cPlMA znrTT^;}>z}f6zgk#f4&*l7lUj7OrRe?Il9D(9J$Tyf-vK(M8>&72sMxXWbs^) zz+8v7H)<3Yj2(wnM(`%@->hq~^dJIhzLY~ne1Pty*x7kYY{zoCkHv?_B#8X?ft)0{ zcNF$tju45}`R=K7*CL)4+X5SunPieky00be@I5xK)4;Lcnf&_1>y70S1E;%Hox=AM zM1>$uKCJ;vrPpAx3Xuz!&ZCb82r6EyID^iH?=o~bzuDmbS$z5Xf5>1uVB(ockH3VT zI-wNIi5_}%3~}UU)+;@dP>6i?q5)tQ z&~+xEJb4Gpr^^aT!(6m(ROer(RG%Y~x_K=myx|AvSej*B=pi)RURL4qjw_obxKXbJ8Urd&O?(8 zxy2&PMs8O%iWcpmMveso4a)CZ?BcXMUTm+DNwMlB9kfqCzQd%S7CMTpp}I+o2(B$u z{Kmaf7+e<9q+;zhiN%Qb1ZoIcR7Y}rrnjaC2B(l`V`3UMrEn}9fbUJJIi34BKAH_*%lT9-{PC>KOP3s zss++&^0?EGrXO$%xfG` z1ChB!l(Tk%T1>lDQru^;&;)}5?F^$R5U&YZHKd*l$?SP0gkt@E?wH7y8CCEK75H)k z)+@W==of6sH(gG4s=97OZvP!A6cq}c`w+b|w||r}$V&A^I;v)v`3ZKIgx|D@koESe zmY!?9iHHc05x^V@=Xy!9ZNy1qX@JoSzoh9)`XGj!%6(cxXGD~;wMX=An!@JA|52yV z?`RF4VxJl@lsFB1V|Dy;swntCvxl!`a_;DxI@QY8ACKruPkcS#jl#~TFshSYMx47g z1-R}a+Rvms;D$U}?ulq%+E+C)*LN}bH~%j5lIs*Bmu84>vP_I}cu&b}3bIi)D-B=E z!MC_@t8~neF>bLHc+eTzWzou8;Xo5MPx}~@59)TjI8L%Od^=c%zmjLMFCOn4oxQ7d znFyT!p~cGqXin(MP`T+?(OmUiW}{G$56!BZ!yM=nk~%8hS~d1|`Z84Olq`N?fp(K)j~BJ;lwLa%f_g4so%ww~IP zZBbMGIfy6wySDy}y16N!XCN)8WVuH`$aS>UzyZTv#H0uc4w@MX*v-757zELbhK}kH zBAIeJ~?L*xn4d9 zws;Nm-!xw1}*XIgFfh-sUpb1u1_8<2P7`0lxcjZ`+`x6Dpcs6J$OA*uN1^5A-g1pGmR7?nCuA?vop%L`>+6)XY}wBNh^sm3}ga1tD{liE#!X=~N zv6|N;%Du|UNJGridJ9=C5DSSR zS9il%Oj+`U!|yoFozKot{Yxv_Nn;R%Md!EZy}qUZLVQ3)DxM0v0(?xJ=h!!!^~nNN z_&kK%VT+?O1Htsk7cf8KQcbQ&*#A0!|5yuO^Yx|13a1=E zeD+<1tw74xa3*Wv&^Cj_wg0$>r9BcPwddx6cK`ROnuO0b8@GNff5_ZuINkvb2Vr~jDY07;xg3}Y{P7YggMlZLQ{8)X)1p8& zq~NOOL3__g>)H0C>F&4<=%eqjF33Vy%icIp|7q^CtC_JNF)#*_G=m)U8?8UhAHwIYpICqtTCJ3Jk`AB!~@;%Z^c^(w&^HjDH} zAP6f)DTxq4pWea3CAiCQbnHM|-0EVo>gMnN(MoLtTaF1FU^6f+C2JT2GkHJ#4hcHn zy!;_C9c^1M65L`}QslH~liL<-=-T$ysSvF~mugrbTI0PsfnMDoSIq>qorgCA2lxI0bnE%(w`iFcHy_#u33 z+2;JNH{43_dc~vsL-QU`NaG(^H17#wj8>A$icNF0vc)cw;?YVXqXzUv=sus|Kf5^%$O@k)YEc8Fv_d{js5~YyzR06v6w1 z$P40HGhgFnww)xicQh=*g0_b5q3zQs!Zzhk6r90>7fB?{gq3n9>w%ByI+EFv>Qzd@M9PTIiG-6p z>-r#k_xxEXM3YY#6ev@Tit=xU&x2r6xo%}<{(FX3P|<8N4@eM_vcm*8+%2QdiEmNi zO&i@6TIkMa_9M$>eJ)}gqI*fUWz%anX%aGlvON&{MMA+Ye;`3QMy5zLIkF0nA;hBd zg5{m&&cvhzcSq>S_b)-`H?L#K_~xjxcko(#U4Vc!NPQ$2Z(kooTK<(Kmz+yy`3jV7vn>W^eoD! zpu#xS=d7FYC3g&1@;e($K6>hD8Q(4HRw7&e^IO;X>2xB~8`9DWiI#GAD4t2PGy8bh zH8q@@^nTr3Tf^vuFBZLE*DNJ_@DZ%B9uc^O3-Hj2!yCqF{1BNhqGFDte`S8Q9kV48 z*o>q#Qu~cMtq{@r&WCukQ$K-Pd2+%7fsY>T4MXU8yz`G`^y{jZE%b9Ba>Sc0g73vgD$(ou}=+dy{FWwE7QR@Dv)bG zj4N*|8UH{xl=|){=796wp3PG2<^zR!x4Di1(n^o;nOwrmx6&3Ji80#Rr$Tz^Zv$V> z@qb}fsNpMSRv_4w2bMc$_}%sRH{441Rj$FSOpJV;hZ@Wp4PC2z8Dy?F`wl_MphYJ6 zK^N(*>mWo<><3*Rg-c`8BtA#%hi95j+xZ=N;`Joz>Hk8++VYU^_q%yRuG(!~O%^dx z3sZeMD*KEt0|Vu6!so|agWhw2^|D1d3gS&haoyWABa1OG*%i5SswDrFX-4L&bbijS zf24o50Yg%j|2kmVg-nFyB@Sv^dq--m29~}KMvJS2=FaUS1G}^?p|DY`_T5ENb!JoDS>+}l^W}q-uT+zb>DIRu*ccA=GL#6Z?_P+e2pZ*%M%( zjPc70zr~lpR8w{`F;d;4+z{1zd8=Z;y#T`=8P`OG5=9i7?}Oy{UPZ+x&p@4aVs?un zlV1Dl02EImQP^?rdof@`X0&js+8TgU>s#6EQJ|mVE!OFS%wO`ub&VfPS3!IU>gd;jp%?=WG5pB5o-$wb zV-R^Z=-M~JT>oIE9)$p-+Wp-wk(3|xtDt>Q?aTR}8nXH8(?~_pKNyH#bQP&W=fR74 zrgbZN;*kXwY`?n%F}|k9`_66Gl-Or~Tz}H)P|2sIBME}fri_NL(a9G#4CWYKL64B>D;uvTr}`Gqy%`!ki}K2*+R*oo^ApR)v2>B9Yt;X~@};t6j|E$24et zHt<^L2@`iT$4dhr&FwZ-GV`}E16!+FI(J~8?a)hI382_9ZQPjyE6~>M&8pJ_gt--FI7>XPB0?YO z={l?ZcaGc#B>Cl+!mo`h4Ag*%fMb8$z2E?5&{+j4M-e%fU%R>VRz>JICv_c&(iK5$ zLBkQeVqA!cf`~khJxsP;z1hCqjj4AeLjM`@;|&1*@e?zUk>zDu-`XPv`ea(cHi(vb z*(}~l$;9SpX1Vzl<5tFW4AbV_zr58#m5~eqA+mTO00N5sxgRtnFV)Nh=ZcrMYZ%eh zfAGf_l6XcMI8(F-VcWF!s!0sIjCAXIu!(~Ge0rMBZ@a`j)&2m;emVfiMQN9_BtXtm z?o=Kq5$|3-q)$pb{s#|=XgxqLUJB#Fdj_wk2o#4FVowV-Fb<18&FYx01K}Xx{QkW- z#I)}ZSoq2eurPgR_+Qd;+IFx+ev@_0S;^M=yT%YQauu4w(-;vg|EdTvftdL+PM{AX z_@+b8e{7PhCwTdciwg&DmJ2PF{6Qbi>jPnZ9nGjC0pE$o#7A*zRXIXT>u*u8vimeA z=BE~|_d=y{HHe?}*%ho~@V!|3td-0%N>&#OJ1GTTQ_k>lf+<UgaFyq`Q#L)n$ey==>fju<+q5D3OJ3R#T65s4%NTxS)<6`{f-OM z%1xJ{pUaQpR7(dg>IqQt={>pe-^zvF)~QNr8K$|pFrLX7pNPJGOdA0a=PD!P9Ea(RKxe8--8(=vLrA?h}AS) zOExJPma8PEN(-d6&}vtNZHa9`2S7V6r`wu|sNJM*Ab;*Z4aaC{1!P_;_s2I)DEj}9 z0k)vdqBHn&2541s?5j@8*PGbsoqiK?+w^l2VbBURpk~Yl`o$3KPq9G=mshX9^_y|ZE;ZF;wYjwPFqh0L1PNNOyK4kd zyxueox*y*GV{P})?hNiYrT`lLerezWR5KN?N^S_SG|m{v>+0{0dZs%ts8F0VRJSMIP^*&(*hFF z`lge5<(ar+uO=|u{{Wl8cQp4+8Q7c?a|Dus_=l2GtQfLu?y$_2_%g7$9EtBp1c=>_Z`&cui)Z(@z$Ypx`OT7$$E!a8b{cPs z(-O;%hF?4SCE^Z`hWOGDBB1$(|NKiBGlzKWId)%5#iOL=vNyaYN0mOr_9$71Z^h{a z8o*5TKQOc3urnMcz^`v!@#sL_;$RA}z*cwzxc{~Ol|e!to18iw4_nef>?ZA)5i*cR z_?EGmrTptq9jY+j>p`?&3BFyaI1(F%;8&WQ-pfRva1se4wno(=(We>A5A+%lqg0G#poTp80ql&r0%<0SCg)s8Nn+@x@(CJPxRaFC$hz# z1##in3536_=Oz&$PvOm!(Nw`|Tp4{qJ3O-Y3Cciol8dS?@ZY^eC~H0559&pr&!g8O48H^gY|7OplQ+wxKaEj${UKdZ-V&NSbQF) zX*g2CxzO<^FTxJ8)ETeUs}ShA$h&>hSa1|ESqaln(gxiSus}Fbt1pmu3%@dptZx45 zoW;9^3^WB$>-^&+`|*N1(-Z3BY!X6DM6{RJu&nmM)RZUZXYQ?9Le!|`4p7Qz4afGv z#9;0>G_OVydj9%T&;?Lo!7#1bo#whM7n=!hc@HW)8qN$W+T95UDKx%som;`bZ$VmX zZyC|?Hqgy`ebZWZ%O}9rjmled8BvTr3TLv60G~+{_)k^tCu#ONHDwI zgmgH?;h19S(cVQ^jLKvZ%ysSx(fENBsuAXH-_%`A2(&%}i0gty1;5w7lJ3?UEMRP8 z7B9fwRHFFLm33~Lq*8jwiZ_h7t~n7FP#&^OcAhI?&*Q?NlH=o9E@s0J6ORW<*&W$J zunLI%9ATFQ6O}{X3!4R&5p^t|nWg7F-wThNQM-V{#1A)?6UYRX@!K9SvzsL(#^G)j zBf1y{v*27f8#Bm5P`F0{Yfk!3Bpv^|qxV=HF5*oy-th^#(N!|lw1OU4J+t_(u=bpd zCGg^x5NzXm1HU8|POyZ}u1gpMzkw`of`_()0%(~{O@rQC9@a+qv)z|Ei7^tfvW^6z z*nVG;NUq*qmU1%w7j6l`>Aq$gv=bj6WCUwCqr71eCH8T7{p>!Bn6c0BraG~}{`l34EhWRiZ61}Zz;a4r8nKS=t(kXFih#V54suuT^I7TCmdbAj`^{+TnoJANE;$MW-tWLr%J$NZ`!l#RNM1ED4Yh!n8okCA8xE?%D=nwGhFug^Yca zcD)_IS?*IM9`uNnM_y*>7o@f5AE&(%zTqYbmLT>Fu$_m>H2sNBVx5ttC|;Gxe;agG z+bF#u>wmc-fkOuU007>vy4x|s#c7VPJ2)2})r8lFHju4c@$bZ)`BPh=a z*mxZb_j=ep9c*O{=XQ9Rm6ki>3zpRVe7x@9G)>Q40gtOeL0-Ywi49YGg0pi8^UNw~ z`&!x`%~zvpc2H?7SCK91g(o3s&J>yK6iraMcAC*`{_HUXA#(ZOzIui$zXfIPPU2Rmj& zYZfuLghyCcczIaZM5Mgn{OEFMB%&)-{j7DXVu%r+}& zLwRr`CMXrd)Fu=LtssvS$!;p1j3v!~H~IU+=m zkh~#M2CvQ3n(U-JWs&>RvPxOw&i9wX>35Xh3SU7<)$1@3j)Ec2Fop(Uv$77gxc5a( zMU8nRTEBZ2fRDO%6yG&_Xfb}LW621g`z%kAav$Wg-Qz3Ri*LRjTQe|nV{0N9r$Zd3v#h2J8>N)#to$t3{U130h^BI({vR_UEEMLaa?=3X7V! zRG8hMh7I9B1M)p1*rqyWmYd@?(N#ECG{y&1_XJ*b|FOH;)OElh>*X|W(zOftPDeiL zs=e#XL3aYG9d6ye%DMLMSV!;!(T;yCI8L6wC0k?~l5Qkh*1HN#sN4m{c%vm0`IC|5 zN4EFDHMc8nhFekGAG%Y3HB9v~TFDJRi{2INO-2wHLp~6?zbR0g%1G2Q(F0 zPS95>Fn#I>!Ac{%bdM!Ixb#~qDZG{37rxtk_bj~C@XejASoZ??QHz@4TN2j889^YV zkCKYRJU?8&h=AHqt!?j{iLq=m^E)w2fLTbn%@vEIa^R4_n0L!BhXg<)Gc#vco963)Ap;02a(L|hU?BMxYULSv9;kU-`~E!#G1*Nj(IMmZ0qv}P`^9gKD_{=5=r{HgBcJag zjI^^TJ5(oSq1MZS#TYo?b-gC>tP9|^;m-R5*Q$PwLTy`t@`ev6W=mHCsnqp~XZ#y1 zCL=;B*1f#us@GMyIdgpi*+Ss>Qr=tZBv4Z9p_ZLL146aK_(bKH7o8GwO&5drd?`22 zNHjKQ!=!8?8h@36b+da2EQF)!h3O%G=J(W`?wO_@sH?yAfSb%yHnTF;_3D*&9N;9W zB5BaC2*90=O(TK(l2&IWVm2*YxO1YB)BU~A*jIuHLbg-Ps%0fxKd`Jzz;7GkJrOt= zt8#Cik5?KX1=Q*jJ}U}A1{&;V2$=`miM%+5H9xp%J-xnxFVCw;mb~ixYeGa?g1xvxPU6k;|)le-PHlm1KInTCnGiMTOq7+ zqh{!*2;9!bp-p_^m~A_vZ`tJwhl4<4Y7mIB z@ILu)S8nDsXuo%;IAEcvn^f5mm7JwUsQ$=FgGi;p5w$)+1-|V@CD+{^n$vzqmZ6mO z{HzBm?sp)(p;$a6m%t`+L8;A>Xt4iB3-;{N)B`P zW4=zT{RqE}3YlJQDizSpf<4^N$Nei~yL1f--_0);PWRQrJ_ZHsC-heBM1k=9UXuRo z`jJElut(DSwf~8ly2mNKT!oOrV zx4v&UyQUhnDJhlH4&qx}ZC93xZcp$Yu|F4N9Q9cNv1@d$xSp{6E3s#M#gub+|9Ww` z^aQBrzPR(&5OPE%V(3f9Q=$S*#(mJz2X5D!%%#q zv(Sc?(fd?;u?_!^_j*A6&QK5O5jJu9OVG?v;mcvc5MwWQ^Xf=lQ3Hc}zyvtm@A&Wy zUy(JMN!HQQ9e9W^(%Vo#VY~u{Yd3MNt-k*}Sm%WTox{_UMKki&#otxvG@MJyVUtXU zN4{r~_}WGz3{IYgv>j5cdl(1j&jB8&&Mtbl3o5W)<@I!+$waJurH?WJ&N!oaRq#CVkD2r}KTjzv*O%C&6k zQIi)OohxInoa^0*;CaD0o&}3JRCL{D@|=L$gD$;y?3htA2GA=Y**EdT z+vCVo=trqRS%t?cD^rhgx*DexsuFIBXeEwFtGsE)pJxKiEkQOm?JJ|MeF(MN-^}k^ zsjz%5ZS#)K>}Jq|12Z!@rsHXLo;)?~)sBjDVwf~U^yUAx;zn2q%v~GP0FsQoiY!P! zO0Vy?q&LbM>pFRqc7D}%cfmC^k_<~>V43(Hk&n7SukA;Rv$y&ylBSae)B3TqV~O>u z!*dTLQpc$GNtWdbBWcOK;IGMpFA&ZGHv-|i z$csx3-Q$-$L9!~cAnhDUOmC(L-v?g&xBFMi#p~}o{Xu%%_rZx)gA0dFlF5diRv&R9 zwX(0h;>RPOu`vVs4L%ova%@XPj5WCpeh~bI6lniO=%yuBTwdoW>(!oQ+0gkSn0FXf z|8UsyWrzu39%z7b9_m)|qdNi51Y)%}(Z7EEx5;W_0SyO#sSud(f<+&$%#obl4UDYh zzbe^g8wCFL(_iU8#_f5vvUKw8zI%QNi|26~P!MAE`Po4kgzc-{9j33|3#;5r7E#7i z5Snk6@!K@uEZ>}~bI&jB-t&(^!f8v6{JDF4)%EnEX~=Ki|Mj&*NdZijp1ia)r*V^W zSE5FeA+UJrjBNs#5G5@;nOB2e#v!H(Q!O{rx>{k(Hdo);afC%-CDTSeoi(JHe_!@% zIJ7pq4N$Li6&owkHtM72a^L5Y?jq+(M%pMqq?&zXItXxSdRG(MFC_dYGSP6l`qh=d z<_D#zBJbOC@#ktwQg2o8-z(BwIrEu+P7mpXit`RN)rI79FZFjL0+c4}jF?ff<9L2` z>YMuhHgT;FUSe{Zq-If2mISo4&fdXEzAGBIX3>swiL)ifOGItm*y`E%1ZhtY+J!5# zpl=xAaPF>9u@HuuyG-nWgsQKliyA1I7TA*A3Z)(sb{D9K3uaSh{Z&EMrkY=^{-uku zHUh}5XkkXE1>{hJyNqqdyzgaLxDe`gB*XKk0bGjwt+#BvOV{|1`sRTy*jU09SFrAA>1lxYj$Pa+O;+F& zQIIXnmH0M=q`UO2*y&6*Y~DEjllcN|Y|SMx>XPGk1l&WH9d$M^c~GY4*PZ z$7)Mql@Mz_<-0nlkPlN6@j=TXmU7voOD^|g?{Cw^9s|}>gd%At5iRH|pe!WmHZr&B zI)3}xOaQPm`P&;dHJ^bF^wp`D8vI=`%ixNL#V8zOC2m!=r5?w>uTfL^_3F_E?(9U4 zS+CWFzCLid#f<^;D_aj@#MZ2{^;!%=z4HPyEHC{7M{$^`3pBRI){+@{r-VS>dHnun z#V++9qX?NG(?&k)n_vT++OlqzxZ}wJN6I25^I!#U3Ns|3LMcoXUxpPiblbob8TnlR z0AE)I0LjAWAA8mpTpNY1Y$*9SVoN=eW>6@`zj|DbZQZJvyrHl~sC#s13{E|^^Egp+ zyCGWtibM7s=e-N4Q8vsbunUejs{3g}=o_Q;nBPP!Kr7{OFf-315M^^ajJR zp5x`NrAuHJwM_{%d^t`!L)k&=?mWlYhjzokobI-Fua!!K_TGnC*!+w%R-0^wxoTzZ zCf%UH2_lMb)^O2C^GMr>Y+{{^BvP=U5AZa2;q{?0Z|V$A7lIpd;sm=Z)CKy*--BX6 zP^7K%hH&jpt>1c`;O=@=&v;^PYH?>i2>5;5cWmD@#P1@hA6mZ= zr`%~WoFH4kwc3?eGOA{&wH{+211R~G)t95sCe;u+h(r9D>hX+kTb#Qy)1@obb^k;% zuj5w=@1IUVdW6OYf@hWPgEv@VQi`Ia_N79)g<&@ zjwgDS3L}$RfV3O;!L421B4k_4q8>itadx01K~QrysOA)KmoZ%L2Rqr)j}GNp5ESVw zQUl_Rgx~Z;L+nafH@-f{mvZo1De}wvgZZP&!Raa;-2srNX_0npcRt4FX$e}Q>%h+k z=k3g=M$46I)i{8LG=TE!DgOEQwBlN4AA;NVLQa>9$+l=BTDcnVeZ1d@>LAYne$4+?4z!*2hjn8uDTrrivw+Iw^y*Hpm#O1g4VbsE<*2)b%H!-joY z3}1vb_}^gQc;y>gIj}dAk2b6A{kc8IFKY%Qb;o_W!o-y3L#8RrdQO>wDejxzKXq-| z6bvxs6o+v+xQi?7zT*4Wg9oFEjOa@Tl#1uv+xwQ6+u!D^fAMU)*WoN{C7m}mS0DrU zFU%7QubM4#Rh%4!aWX1nlu)TklO?njRgKGys6u{BOikmh=n|b!^Yd~)32KKtvcsu} ztIG3V|GH@tp|CAinVB3VAN8h&E>;qg$DLO?pFqnqa*cBz5i&xxZ*>W${-3f&VLw+*x8Dn0Q6#-(=o&P6<^km ze+qK}`U76$;23O~V+gtUg1VP;=4~Zp=tB7DGpr55NZPpc^^H23@)Mm$Ss@-KOek^>su;AsO{&|9kn6ZBE)3b=jnP=bPP zmMKEiw)M1)BFSdVojujafHBDin8=3KRd zOF8>`-v#!(qnN9dbrT^7qcBse_wVkB#$fvxph6)GHq#}&rV%w9j{T|;5D%{kycAB< zz}sAx6fTD&;zBw18{7#CrQQ{HTII~Gsx8Z*P^5W><16R5PxN)MXOPEMwY$J=pJ7z= z^n|*Ou)z3Bn3#&>FsR~87L9q@HTO2Z1I8VP*+I@csXrW|2U>O4wW2UJkR_vpE zrZDaCU;bTtr<@QuZQYkKU_37L+0AC|2iKm6AaVllNByhpUj;t(Mr2jGEY914z5v!J zQ+0Q@@FyRH>$oh5P4WFPa#{+O;0DoLT7FzEw5;{uA5jL@^Y-EY^oMUv2?O`u!s+{~ z>?Xz~a=zpt9J&piZqB=$b)gf3ta2Uec$MR%a8Y%zdlt4leoyubzMlbhu4O+3Bj{Nv ziaRz2`UIs0FQfEE@5-QJY!)xa?RZQ8nhY%f+VzGn>-~@QyZ~s+XftoC_LqGb;FcDs z61D8K8t2t??Prcs58`q}M;K=>JwhfDd+n}eLj8Br7LPKL`{B3NV5~QjY4~!%^FeXO z$bWh_yD+ef1h67WCe(S-BR*OwesJdWNK+SUGRxve#4KWRgj=GH(6dqNj+BIk#YcGU z-u?6ghvc2`0)qj8DUH+bEU@pc7zX!UDV%Q(H_bRs)=V(NMNGG3np*0^*7pEksmWap zAFyUnp2WaVgT-bt#wwFvVcro~eZ;6cnqf&b*%!x#m{ptn0P{ZGb6N-HZUz~{bQ9q! zVQ=mewQ1+s*nofFX0&z6@S)Jkqmbzy(gH|>D6q7aB&X1gD3X=@BTTo&F-!|lJ+^RA znb7tfYSg(1!`V0Y4mG4zf_CCWn{-1ZfT}kX9q7!V#*7+&CLaGs(|2J@OdBA43qWX; zSc6>$;SBh?vPHfIl*_qLHxS;~KB$BUP<2p(yffe`Bkfc~qvWI&n|>BgFV|Y~%fdaIBG)2#mFbhHNbDn85e`asqd;r|?NU7xfudMDa_9X%VZbny zy{^ui;Zy4+mB&fhW~~a@TuIMl*J^HL1n~+Ka43@=v5WUmt9q*lV%JSe>rw(hMrc6I zbdZ}FTubC8vw%^{5z{}R#txvbsa#|&>`o;+lcdHJwiJ=G@?q@wDI%;^m;tPCta@Z? zWW72EV0GNBD`silPk|}mS90iJpu?}{1q3b!$^6U+F>s3WV{orB)eMP7 zZ4q|K^=F7K5DV{6^!1oYvviU)NP{*;p!!k*quviA9uUR(<#^^D2oV?JX)*Bf{f|RA zOyBYf-k%~GHz)bdahQfqxci5F(N8nHSBBa`^K`9s0GU5+1297KRd!z4pU63D+~O2P z6(kyo<}DQmpOItx z;^F17%o!ypH6>H_mo?R%dmq9LaH$*-Y8B&P@uxN6&6yP2?`z`D)PdCIVoz7S7}s@8UTQ-o^O6TV2; zYBSjlTo3iL^AFcqmQBN@tkIhBSb$Si5g8L`S}O1VP1(Go=Y#OR6cj4*a-@5~9$cWQ z?%tlSJm@K$>WnLt~lsTFEY-clcV2X$`W)?Bnd&}XS*pzi0Y>unxBqBGK>Q}z;? zFhlH0&F}VKEHH1GTO3V)CEG>_8&??Tb745!<|N!o2hKBkW!OTk#h`#-q>;xsYufSm zULHTO0>fl%xF42CAfNZ~_5ZBP=M;z?{N39cZ+GPwLv!p4MGl6_heh%-rR}MM?iLt? znxBD`AXcfFn|*fk?`_I$Iqo$OZ;VBrq7l~ZjQ{*W7{w|gK6h$_#%k-rUY$p;j5!62 zdM7%5BetbnN<>pbtonW1*cZW#Iw>1ha6-LlT{*! zo}W}piB$kLVWzVHm-bPMP}D-ZQ3fEgI4~#lIp!yFjPqT+DyQIt0~@u6k!NLJ=36&q z8Gt^Twy>fwDP^EMS8e?<*>j-YT==Pr@dfYm`1OUb6a%^Z?E68xCVg}%@U>x{8d4wv zP@D{aEmgO-3EY{#2wE&#!%d6XXpiV!4Ud8fB{4LPS5%XEOHN}(n8b&O<$zjhq$q9v zm$_YwmvSv}hF>f67N1^sB=**Aq#gYM0CqPWf3D{0sTC2e$>=_})|@dGeya!AESTNJ z$&ug+F~W{ttqM{LAtO9e4^CzT+IhDOmAx^td7}}UKtHqi(WABdNC=;P4&#A-CPc%2 zlCNPY#3L^82l@KSd?^!F$kc78=$7@MM9whQcdWstAq(aRH@PbJyh6RBf-nJ3_O zl!$?&cvhx-jH70GwdchZlyTWz$`udzEyudDx}#cg!D`5*j!Bo}MBAZ2!6Ca%a3TJ- z0M}m4*b!rng-d%WEooyd*K@z~-0%h62T_TJOXbYQk>H{&2M`E}fM`vnw3B|Pn0s%4 z#NeyrCsd*b3?EY5Ah^dz>gWY5SDo!wyiQ&;i8b0y*Jy7$=6Pyj0s*=Q2OMAa48t-&A$B$K3+*}}$jBub`_H}) z<^V2ecYdaJ%O6hE$c0d};#^K1>Ltl57d?uI4#OsaxHIcC1{a3CjPUYo`L@c3VL&a< z!6Hztf!GRIBYR#!N2M6S$;7fF#W)wHEI)cJceBM*MQ~;ulQG2SL=SbtY*ZgI3sjHf zGB0|5MfEN4Wk2R7^!>3U0kwL@(Vm4Dxk)JSv(vH}@{8BH{9$Zus*1ZnHFq_!^4G;E z#sw$fBhLIRbA8kXeh5*Kj~p|8F~{h7i7LbrEQgvaDTT5Rt_v;p5gHhyTm|wHaFvf) zj3qoM7$^kj8a@unl zD@QI<1!qHr4grBcC)^>v6}1p1qG`(Esf{P+Q(;?nwj9Y>-`ykzEo)yvf{WE~IZ1Zb z1URALl;Op=!wJu|2v)3)7MK@rCBX&9L>i@ePQ!B%qsq>9E_?<7k99Yr%JK!?2fP6){7Xrx3i3CCI2Ga?k*q45C-@W$|S zg|(w@iI=B#YUr}ez}Xmfge@;)95GYr{0U6?2<_UW@NH`*qU@N*Df<{$%*CuZ)&VyQ zNCUN8h)c>MC%)L1BHzF#egrVIIYsU%euIE5UTnwXKU z1}7S1z~EQv=oP!5@I}(zap(@Go>d)D0x;}pfY+!~2rjg3%jX4WCokU55y87;p-LWf6v66nu-TP|4+PX4R$ac`GJ$GlWfioE z#(O?qE`~PMX{0kl%_T?jH|o}B&;>eF{hX7KwgDHyk4$gFecrqNRp4WvaOhq(&C}1d zt@?16?%}^T^j`oK66q4HpTUNKHo+qQ08w`ro&wJ0e1dh1 zc>9y|yf)>zFv`h!qEpTOAOqpWMEU`0&@6z&fMb;n#5ScX^gTs~8JMGCujCs~XNfj&WXI{4HzI3zL2m<5_JH@^ zrRDOnjy9Ltt}+}k1Wr8bpSUhOcKShq3*P_pjNme zL7d2CbRoH65iZKL>mUIDzPsleVFjuMpj01h+FkJ&U$r#{2IeM}ZR`?8$QfL~wI3+@ zmr3lX1eNeUnhV*vh#Q4S}=r>*g#rm%NYD-ThgU_o!n`B^fpAB@hCK0~RIG zA5oiDqn=;jj9$3vZB)tg(Y=kUUq`#2$i;cYN7d!XYk*ab1cz!b2eD zJa26uIk%zg{80ADeKs1UO&g(LrqHt>ZDhO{PEsJoz5Re0(?t7Ma!jJl*PdFhx}`VMlCBpA^s(-SZ?4ewGe~rcfq__uhTNo zw>1iI@FN_wpbIrW$8%tIh{-AcM^3~7>kYlwvAY_Jx5gV?yA$SKu6N1(7CbHDm7UF9 zP>J9aj5Vyw{|{OJC0BRV7B~4Y;rK`3p}W z%s&5(m?`uEdf_GCdRR$y6!-)j>Ia}RIuiRue11%2vJlodBP&7@zNX0zN{vN_aWRUa zXEGeYTMd2YVPNMsZsnHyPVSk9OS|2+NI*mWiSb^Tw~?vDnA=Cm$qKRJ*LYn5Mn+@% zO?gAr=r|2k@%a85s6MAjr3BK^IxSG`O;y)0UXwjI$qDu${>ixYL&ocreJ-qzbD^Z~ z);kHXJ<_Tb_bi=g#Z_o_#$Qs5*|q9-t-bz;$d-$eeB^RLaOWZ^Yfg-!`d`S!jCwEi zTUD>?9D14jA*xl>J9|l=SMLp1$Lee@-ah%_?Nh91eGm4)Vzq0rhSM9&+$k|;`ftPz zWcU*hi0ZE&L?i^Fub&tzgO=lD*pp~qTs`>1A?nj+*|@Mb1P>oOMlR3&RDIeob;Mg| zC#HC;2Dz}ctp0_gbJbN;b}cVjvtJC%{VgjQtb}N!l<}P)hR&aN1c350=mFINYUK|y z%OsXJaibh-cga2kw)8v$&%u|{|Bt;l4~M$_9>*g}6w213P}T@VNw#T~tfe7YE0I)W z30ddSzNtakX+xtBLb6PI%2uePP>Dj>lAZ5)&CLCpsmJ?yKJV-L{jTftxvu%AYcj8S z-RD00Irn|eVdxMCUf@-8Nf$Z?6ew5y5;%Y8LyACe`)4sBQxlIC@%(;S=y}^dG|BB8 z9V?SaQ+cM}Qr#pWFm~+XWC6xuG^;*c33xrH)`^@C!Bq34FtGlIzake@-(gFH)0Tmq zZI#%eBBaA_)Vppg0<_k~u6X(R)pf&cxE*|Dt#QIjQ&zMdg-8THDzX&=L*G6pCO9Z? zc;_d`T4u&?dTuG_=R&^MVxKFDV6EVpep_;rJ-`}ux?-P~5Xy|>5-+%C9hmw>WmC{M zXEr5e^p{-SM1D-eE9nBy`#8tWg|4H`a(dBFT8kNb5ls6_IjyxdPKXvO`nrC-{ymw} za8|j(Vpwz@L{bLdp!!S4bk75(^%mboUV18ZnufPVgV=>{n+5#=eBC%*!T@bL(FYbyk*ke@aYwxJrcuqN^tH)KY^Ar8PO@W5car zK9_*PItmJF>xnuu%W&rwD5+Fj^{#Ed-V1Ye6GmVdLRAMFkh1v|J+I?slVqqzcz1Ad zbsE7Tt5NoNsdL%OH$LIwG0iVT&Rj(`vjic|waOu{`a?^kT9Z!}?MGfRtJ125kUM^Z z!91k0hB*UE#`oJ-O=tK~6s`qurbdoG?KN=2G;lFCtmuN^enl)jzwp_yg1etiDfT=N zE6)77r(d>Cu{7-Tl)cE{L`{fcw*z6DJXVwMnjFp8*wZ7eC*F{Ci*dF#JBeDwmpJ`n zliOF#xlOxv8!%V|SyO=fkHbaP?IbDSzTn&?@4Mw^{LQrS^x13E3r226&0_(Rp`9{8%=ooREEwu*y1s)vgnp$bBI%CT zL9CAX;uS8&an0#tE_#?}rN+5pc5%??5EPeODLZkR9FSs^gf0+LBQQQV@`@gAdRZl< z0UzvE^Hh{mt#gIKyItqHI%PH0OE10fUV^f$RZ-M!yz$e&HMuEix^_sZ;)i}rJ|Ic| z2;Pq}GK65RV_xI+65eVIvvo)sbNxl74nH?fAY)@X*00IAg?XvGg7eyT_M8d$?rIM# z>t|rc;tUX0gWlr4uTD4Vj4Z~SmN-%AyV9liLB38&!!6v0JCr|A7_3I(Idg+rTE##1 zB;p=P`@qG&SI}1-1ksvrdj1>AP%e;E%^9{YWxzS4()CC>PuTWJ%yL(c2h-$)XH*Aa z=GBSns_NCVFV5?g!R`(3wMuX8=6sB_3okfonxefkb3`b)?R zOAL*w_mg*>QrdO@FYdeFbL+F()9;B+t3JelQ~oD*B=PC->E6-K;F7N=TIH-*aXJlf zDpPfY&OYgI22p+IOce5JpnEshlWkRwsZ)b@mF<3$AlHi&CfY1AyfpSqvLaoE-VbSe z)EPXzmn0{9_xhfcG|P;NInHsL)s2S9pqC3-~0rIc|%r89F~sx&{i5?EZj;706sd=(A--8P3W{e4M-& zrFUr#gtseeAN&`9;yHJL`&ey;t_uWmh8cPIlaH=H2A$<}JbKGDoMHHp(yZkDt3eWZ z|5{!X0P3y|<_7dWlo-qWdcrzf$)xA=71BH8O*uhut2sG=ehs}!1b$UOp4N+_xl!8L>=HHVM{xVH8bZ zlm^zDCU*ZlEX3Il(iVme`@qxEY-99aPql11ZIEE+bpq>`39aJSKg>zo0$i(bdG5Yk z+z8lj>N&HFv=hBY4a6>PrWrj84hR9I_3SSuB65}_sg{PSsXhtS^H2JoQZ?|KoUyPI z%>dL$sXiHQTqWMe5W5;h$RNyEe|#IX)qpv38IBnJ=2Aw5K^GX2Y8=9ES?9I*1o!)R zLa+OabNZ5`-$YCkMp07KW^k*{ggl@j0TRi;TWdti@Ge|Q#vI%R3)1yo18A4aBMz)0%$i!FXw(h-sn-PpJgzpd5YvT?LEbxg= z>I(Te5JxPt9Wf^BEoLFvWsGD?z3G>$-eJz>62H&5^~jM)YI-)(!#@_Z+cBf8#4-n0 z4ikMyst1F7FJ2;>5#TOR#;$5blCXB1S)d}9UEbM(r6fo9-`-nGi3=VZ+%1=7N{)Ro zniM-I_7AX+5oO?1AF#8c}hPPYpHh3YsLmwlzXR)xmu9Z|W zJ&=aWaqzT^8_puorCNA)wB7srjiI+X;=lEuyZF!W7y>+bJv&y=pQ8Tc432CLOK}Sd zegWqU&D6;PN&pfEwn*Om^t&xF;$Z!D%XPgm7`wJF6F)Y83}#MoO6`0aBkWlVDr`l~ zSyb#PS(Ov=VBzCO^G9^vzgVz1_jr!%pK6FzjVH~+NOoarHiMq0_`pV(8XQudTkyut z{|iJ&FFrjER}OfN1$h<+a`T~SUTbt^fYT3{LqDNK?3|0mwIP0`qVO=&~@CR)rpJw5!8cE=*DO+vnkq3}1 z*=75CUwn0AUU}&)CiV9le|_k<;o-lDQGNa&F!vohJbn5hmHu;rH|?@j^bf|7LXJ`D zY)Hz~P1YAbxDKwoWM%D2ywpr&VXD2efT@IT9-wRPaG(_K z+tWk8EC!2Y@Sc;%)Utv_a)QWbMf-l_S}q`+HMkh@ZRnAZX&H1;XjpdnYM9@v@Pr8K z19x}tJs#^;tO*`Lf6e#h0hv?-x%dbWhKSvD5sof(4hI?dAkBsIxYsArTxlRxMSwmt zHkgOEb51hgIJ(xU`cRifNuth*k_)0Z8YlXYqXI-66^~*ZH>lpjN?^}7&)i+G3hSv4 z?f)XC&G$a@K)w8WaF)KQPG3#dffJ4GkbKA#7gV5|AQ16b=Je+r+P=5rk4L4^KO`r+VWo&pFj8(ZbLxLFhK)o;7e{`tN>h{jZN}(_ZW-!|eHGh$W zQmWq4Dd%Uflpsyz`uY?3Dkz(8uNL5Q&ic^&3N(l|V9m=QL$O}a|Cx|EJgiQ%_TvEiT*GbD^Lc&-n6pQfgzG}L5q_pX z?tDeaK6+C@vpm3$H(xu`OF6*7y_zBh_^GI|Q)-n(u|2EM;cP`3g5#3c&S{Jafg~ML zqp8P!a{LRE9Ult3t%?Ku>bf>RQZO<%jd_z{pD3beQTA#uj4Xb>S;G0-I>rqj0+6IN ze8%c|bT_z00hDHZ!4R&uQ>_V7=MNv5KN9J4NA5-a$-mzzVxeBrVF=u7W7`-vC%zt| zN*U@aM~HuccqN9d)6YcCHt*jetyk#k=m_aGT|>a-Zm2$H6%RF0Sw6 zd8bOlSCR?%Cv7#g`20UYJST5RO-g%{+X`!cPu2|VZ^UAtYpWbc|0+WrhCTftv@NoE zZMIQ6%(f_naeNwvVxeb=QOWOWAQ-=^36m$CzyE}rOcn1=`XT`f1<{}PXa!v*ry7Fj z7dZCew@1xVLLNwXx5@I4IrZPsch;!ECvZ$CV%dCL zrY{3{&Hy|GImM&j-6~@nekNOKjbuxA#@!L>M*MROfVz|U=9QIT~9%Rypu9N`L?wxLGo37}xWTn)HCb_u3q z)BFLSp0sCt;e`ROP4KSD+rhP~TUdOVZiR_pg}2JwU}g(eaSQ)SHShlzs5Ow*P`@C( zVQbjL=wfhs8Q3|WphZjQs*AK^noV5uGpma^m>UH%h$^6ZaHXL}Q5e8x!!Rbp4-&mzNq>aefe#X z6S6yE+3&#iceEIwE#)n*w&77?EU!gdu2At|gb?yR(~mTwi{Z z`Ozzk*87k-feHgWxGcj;Sy14KExT95?AcX|hVO@dG-c@e_!sC}>);xGB8}eV4m#=( zW4w{71&NP*GtRsFsko=n>vUT!SB;`GmQl&u-dWt*9tqQ?OSVpYh^olUaAJ5@_dLMj9LDR2pQr5YX@3z|Pt?xt?Y=kG77gY^GIGRVavJQHq> ztTVKxYaNF@oSlX}ZB}A;AdrglY4Ecu@cMSswr?>M=zM#12Tp0kVYXErgj8M}S_k^Z zq%&?@S%hCbShWzG%|$0w>2>F-r-6FeUr*u}bwP)HJXheD(*EXtqnAl`PS#WBmqNHg zo5;>kb1=S-e07da>d0JEjx(>InK8)gEokdEDxXTUo^)VW#T4e`q|lF zikCV!zGHYQ!(5miCAurYm@}9TR0`VMYQ0bVkF`5uzNa`t8cMVKk&q|k42Y2r^$dF| zD66VbE;VT_M#_lk=JXWmZg9;N6y+E@h1LT697k8RnJsBZ2`%~Lw0lvi!BYBUShKBQ9k1-f6MQ^1;9u#_r+gXq>auJ|-*?S9 z>1G_=ZcW5y7a0)oeiNo;BPD7?|tGqY$WIm zH{Z2EFb#QY(O9MeXGv*g$9`i~U;9lE#0RC{T^{gDJL(I4A5($WC|HStjWCi`8=M%bwO<|S@^ zh85bqWt8uY;mvxMA8z2&U*?Mf;yyM<(fd$FSpa2SuIJ#9bn12j$2rRSwD!vT_TCqF zAMV-5%9;~Vmudq_O}HNL_oUKzIHK z(b+0ju5#nQ5mws_2s?@(kFsyNVW1n~SUO^y;?@nv&6;ijpXX(R@O}$jRpYVmsLN|` zsH;u&bnHjlEYm6;(3&Lfs-54CCbLyd2I+AFpF ztxXw+tC#5iAin;(8a$NZiQ?+>gy8{l>ZK)n28e zF6sH7P8GK5be8tLv9~`yf}PpvKOI8O`_FZdl{B5TJBG$i4*H;5-ZFW`|r@dq;_zsU`;UMojcp^>vWWik7<6p7Va_d z@wnv&?4}fpj+cnzO{y`;8sPh`*ZZZlF6UOn2=!m*j~I=sugl-0gJqCCw#0HmES^ zd0Ok$-(+`D$%_2>oR+fweDAIEKUltQHRG!efT2MZaO*YJICcfmsqg%`u~nth3|72Z z9ukBi6&*;VK&Q6o#Wa}TCIA!u!Y4(;nLMwn`emCBaNEeY=B{Fcf_X*L+ws==M3 zCXT6BGPB3hGH!_~a`j@!|x_@32GL<1AkEZ6v5 zSc5YazfwcY1}oX*XI5Np`F=0ss0%hb>ZW~(uEgk9eeAl6-y6+cq5foOMl#i@L!VKC zKyXL}jyxV?)sCI_k~YJctQy738V{m3b8xHA{gUpbIyE@b!=fSDIn86sKc0imz6nmu z{p8p5)453`QLbN`dVWbO#?BswE{El(?S5Vn4;uK0P34Z6-Lrbv&l{@crolti*gT=Z zM{>Fs6f+956w>&@XGN0wN$e3Ap5>t|fdtvubNB<~4Y} z-mTwrCKBCzM>g|!0e8Uk_R~nWG=>8iGZSVpK)1=FlOJWFrf>b;gz=Hq*7IxmvHH4K zk21eOjUS}=G%RhsiMpfTOvkfkmtR|Hyf#rqW>Cc--DQvVLqz!@pnO(koth7gS2N)Z zcP?{`OVVBrZZ(SN{$jnU!R4`+=Df_d*kFwEyb}`sAS8?CTNdA9+;81u(X`ya#5l`2 z{NVyfWNQvIh4#L0)zuj8$Tr=-*5|frxv|EFh{~W}+1Lqh_Kt_g-n}l4KiB!*;{4Y@ zV}X6z3<)BHftCKX(l42Q^W+DniR_s8+(Ni~X7Td+_80f<{eP|3|5YX;QjH>GWKHm= z;R7`vyW*-1>*xxTQw{FOt8{EXBfj?2^RzuV>gKLR_|*l z)Jz0S_X>=62@KvV8NT;EX!v{NtqceK&W*q}ddjm?&}~$Q4&Z>N#glK+vPx61gEPrj zdl&)rB$5e_{P~wB)weF22CS;O;`K@AjHP?&orQ5R|NX<)cwkk$fPE4vfftU)+oAP; z`Jf8i#;f#wqSlj>qO-*CqEe}O;!sToR0>>AuJNLCf<}YyE~xR3P=SFngP+7oqM%|d zBF6vd>Q2+1bm_($EM=`v;QYnIs4mxnrVDO@F2L*j0HV1fX0xwu{_$?AXP2ec!7r12 zrzpzRO8pKhE2<}vR%6O)-P|RNR!UzlP=&%rT*$i$mbJ=hf1Kur-E%Rx94)8YeKLBa z-);1@+wT4kK8+uR+ZP*o!lzd2#vzO1?z3*qudUt6%QYI~uyIu-Bc1$#6{a2=$ktlw za*W6U+RDO-sG~%-6aC6!6Lz-qmeI%-Oc4Z$Czhr;^naQ^;;kZAUG^+{Rg{(C2hGGM2(`;h}I3E}0M+1X#cHD2Gh_wiI~EYl8Wb;Kqj&S$KEKRv*j zQO;SVLwYLfXAG_U>+bqjt6i1WgU-d$5dY3!h-;!q?AB?7xijq#F#8J5EDvhX%`RMH z=i%gam@akNGvoe!`x4Lgx(=VQvVRgmLL{iPw3-?*26Rb<)J5Ti%StKI{+Bv8I3DH9 zleUU&4mAj}*-=t}Zubc0+r$0b4|I{n?&p?IBJY{TfDi_SjA@s~8lDSwCF>b@SeN?l z=$p23Agwa@MuPJalirKc;jQ&3uA4|JOdBEJnmdS z{{7U|StNg~HgLCruC+nfD%_otUks)sHR>0gK|%o`UaAVosC(eo8&vhjF2dKp>3hr{ z>04x4UE%TWlR6Y~D^lpkn7?TaoM&O)9ni!yy$sDGbWfyyG~hSv`Ab@Bmx6THRjd== zDd|gMr)rp!EV1e=JRz%2udh6Y;-={~4*E1eOnU$jIm_w_uVOkNH~tZjATVv;EsM)g z=|-0sX)PHV0Jh3l9dR}xEio9AEp;Z_JZAPTF$WW%70Dk?$IusuJ``9E6C8#)Jw-4U zvDbP6GSjpC`@THOxDA_QT)6KbSdo=xJeOjd=M&LlW>r;1JDVpATF-jjZ^=Lc{Bw0vPF$PWM|9BWn z6=b-@7U|`zJbOibztcnJ={rN#aPq*1HaM}eF1bAu!MLBt=+rB1#ZnHeB2!Pc?(W%> z>Z&baWawk%ZIEsZ-Oa*3siSIk4$co)KZa59Xu1uF!Wtd;om9t}L0&;s!6aL$G*SBQ zEk}t5?`A?tz&U^Os|}WMEm>|%2kL;>^?NEU4vY!vCR_4)mMypzxLzuM$U9YLyK{DW&zTRb3T+(-= z^85DV9u{6t63SU~FB6dOYYLe0pqBERD1aeO(_UJtYakn}D^= zR-qrO1{p@hB<~Nt*s%q_Sx%UWr7UpKI)$CfZ#BZ>Zs^h|=H8_-B5wUpW|@QYvmls& zbK2H2NCT%*D-0IIHji)WiIVo0v5InBO@>mjerQgpxYztzr@_H!fAahI=3#>$n>?J! zTI3N!^0-Q=4|ybYV+vk;#`DtxEU=ro^Cub-n}V#Z66>OkWr$H0uYd zD(D{mMPU}m#O;AzaE{hJPf!AN`daF6vue*C5o{4v4_ISEF^3X*pcF}e%DW;R>_PV|8-H%NDL@vv0@TQMWYhb=2?bIB4{vMvAr4a?8A_7f>CJal1O z`~L&ho;qGxF?u8*(ZYL@?rBb`D|>e5?3uY_yU4oJ+jCAQd7sWzesJ{k6tymis4b#0 zTw5lucHE*KdS%UxD&Y<7RQcOCt2V?xQhy|M`N^E)z77eq8-GOi2PQNodIsyYdW`Cp z3=iL}u!_6urpZ;nRTggBQ-R_zN1iA-wKjR$J)Y@enNd!@lTYAf6$A&Vrcb8UI44c` zK@uW4w+-{JqbSO2T9n+q=6G}$=9!?XsZ-5nT6dV)$_`7*yQT=TsFgL;$BF+EfDw*` z^f#VawF!liUuUVB9xByhR0K($mvTrbOT8+L$$+X2b!W`S8Irn;h!{e`qammDn2A;v z?aqw!NYgnwOXhe-piu!;G7bqHWFOR#7dEIJy;)xY^Aa5LLmsO?oJR;?#>0FZV!`jw zPbYjo2j?8lhG2wccuSHYRl8266O|yq2K|;@Jx3cbOm*it?Q%>bWPmBsqMXWOIgE=| z|Ka^y%V4w!!ZHwoa4Ezu%dp`t<0Y`cUPlIrNFO;xtEan7V%DngC~?`0xcp0~?FciQ z${AP&AV|va#!H2sNV4W|wv-|gJ>*tOp3^Yt6UuJ!2yWxaAE^H48|H$~V2VX71It*h z%NE|K?AMA;FqZ+_A`%_r+h(Lz$nl8T{vuP*y*q_*YY!*=A0N(3HH~U8u#C~3EeK2= zX7UMJ5ZHpiwg_yCz_tiHY}W|vJli#5yGCq5U<(2}MgVV_EeLEuU<(3U5NLTYwrlji zH%3s6wBC>I00k$Bp1%WLHY(b#kLT3ld>|mK~ z5!e>tf4M~%e!f%?-36d2E_T5Vl)tbGb|eYx$~AW78e0(HG8cS`B5*hkq|?wo~qUNg3Kp49utKS`bw};e7)czvExjG}^Cvz2`D2CtU(-SYLds zkNS=CFLFrGHo6fY4^A_Wpzm%db@oEjAh1h{0=!TsEcDw}+!ecGC_}B3ArfUMgEACO z87ij?`Kd}uJ8bCS3W$9-nu&j+b%x~{1a{W z0C#Z)Mc0;?5jdx`n%H-YGPF{b@j3=l2@d{HIbMJ1*;I7NG*?vB^nmRG2{eKItsPbS zZs5rPN&1el>Tv;$9u*pmXfH7ma_`o-^{EHF0Q;sXlH206%Ym`JUSi)mVo?#LnCCoN zk#U#vtp#o=1= z0q8XF(v=(%3YX=7rgNeUms0ZGBa}ww((e0!x1OdaW-tr5frOge3v#1ce%*YU)^>~7 z*P$uUZ~Z5gOJQA8*`Jfqre8vh_{%S1s7tAPR)}AZ;~G6W6hlyk{w;%~!er{q*pSmD z9~OV|XQE$FvP!Ni6_8!rTt$I{5>nzQ?>n0C6u5R3ee!7 zjYeKcK}mG^D=yV+PLETy<0fy);2AbGT9CCoGuD(z~^LpUN*P-dbS=29q4ox1X zkFAmCuutL*%2P_)4N5_Ku=6Wc0$`i2kaK@CuG~MasFPS^k9xLB18WIU#8m>NxWX;igjoBpncf7~)Y%|I>kP5(C#ZMxgg_ZYjou0Uc<;^4~ zk~!cyXvjIOZ9lQ^GUf1P&9Kj?Z2=u>syg7hda*KN=q;hC5csP1@X&IkJk&XQn{!UR zptZEP0PPdjT_nmgHG$l;`~j_#l@hE3l-$%L4qQbzFlOCbMC@}V_9bp!^8g75o&QKh zpre1-O4#Gd!WLxK|7d^&otp>_Zm@1cU$-|6%%%$KLuz`Q`JI^Lj@Hb63#5S<-njIDGkV-@t}iFKX)ro z9LnwOZ>TpSM!lPEv+yDMKT>b?Y-&wHgMT$~52c zT3(!2QeY|5m%VxTA6g7_=)%hhdz~hKg)z4o+d+j=)2Gg|q@dqA-cA+Gf3!2k`kX1T zHZ~2I`tV2U2Hih4+@aJo>eJdbKW;cL^C9@P_@d-|($BfkTegPDLywY0 zYX<3El4%&70tBA7b>C+60}R|QL6V_z@?FiL$CRNDl*9VOK-=Z4Y6TPFY(C#{9jzM@ zNb{Y6#wF(#=Vc;HXT!pkCT&w`@1^#EzPej{SBSYvhjP;=w|?G1T_&$_@z|I)y#n%v zYuggt(kTMPIX7DlPm4!AdKsE03pmT^jpZuDz}LYLUlRQ_j8@(U-8&8iUdMJ!lEV6d zDC9)pMBw@%38?1ZHb$TF&Uobm?({oREyuc#Qih5sL-CZMfc!M(>`mH_o3>+iLFT(S zV_8Bn*oEx$Ey(<*LtmA`i#eV&JW;u^{Ys`M;v@1T-OYfVr!I-BWc~@r#m$v|7wkf> z9+4PEtd&zf|J3w%wj#N}vMEFxJG5Ir*llayPgk^C7a+Kc$R%3Cn1!(FNu@M1=59@9 zxp(`_O4MUrln_C93VcQFx2&yCYm1iOyyJJ;QoRAec5muk&=Q~_9JjCkf;Z;}>2pV5w<60>r*_%1}1t@Yv1L5xi+E zU5ulki;2&M`0I$LY&OA43RWek-A)vA!-?DMtblQmB-Rb5i}N(nFW^}$fOUV6T1;8D zBe=M#2q@ckmvY#RSd>C3p4FyApY+2ZJ&$011n3OI(ji-fVrVGSd}fs)avtD&zn(2w zLG+$HHk)Bx#hqHrsf*Orpql4jGt&*H?}GkfOTo80mX_}?Q`uTOFRg8@<+JbfagKBq z03e=U2rXN#lRc2$JPb~p&JPo0c&~x_Fkh@d^B~WNLhmB4!J|xzmMIK9VV1IPl+a}1 zkOF3?@n<>Zusw0~5HZjq`nLyw2*-JS#{=ar1mi$-E#_=7_>LP>_fxP{VVz()!dJ|M zWy9ADOlKelwl@#7MSbdQU3@@1M)h*eMqA?e7GlQ!v2#9J*Qe zEeMuOX7#U&u^9)X(Iu|(KW=tJCua_wif}@NtR;yRvUV+68m;d4H?=%9NkPD-9QZdHmR|lMeAay zq~3ve!p`s=q7KOjsQ+DUx8Am6KP^o*JEorKBv_LYhFpE9pg zeTcPXX%PyFTIQ6nKK`ocwqDA%w!rjB7C?DlVTsM z2U`*K{2~N?#dH0|r3-#2Tsn?|2}08sko!?w4gB|V-_!-dDPDYp z^9WBsI;CL?QG%y*5z}3zv9<43;Q6q{Um9^@-vk{ugvZ@Y!XSSNhsWr+*tZaHEqk3z-hzb#Cv z1CPl0js0O{u5W+`WX?UR!(bAJT#)EPqt`KGNfHFvSi`HpWK5D8q+zrcB_|?nCpcRL z799|slzE$KPV5_^96tQn?I-em81HPtI5~xP2z9Zif{)qUF=U85oRvh-8kD3Gx`CdD zMQ^KT25=&_okS|fqBje{M0_-(`yNbc!AX)>-1UWW*b@tuD~~z}|G`u5!C=?&O^i}Z z0sS{I1q!7{oH)TLk)yO36Z>wI7njo&Jrh<#Fq1_QHye>kECYF|NX?F5KtVDDE2$#W z?n7r{5zNzFn0pmxMIP~W5JRoz{i23D`}|UXVyWlNi>C4f+@dsC5KHWdKBJut9NG(i z^L7c4I~dn`JD#DQKW7~x`g<^qegf*jxQurN!?w%mx{H%bTXM?(ke!7{0v5Hgls3ND zfG`$|LVM90Vc=!s{kX@_0|Ml?JQ78t?#4jx<#*!gQl~5p+d1km%8X1&llg$F+`9u- zAv97CfuQZPoF$>YvB_y>xj&^%fYMen^^52qV{k!13}*!Wf2OJqh*pny6GtEI;r=+y z1_l&ThOSeF%KE|%EkuCPb=KQWU?0qwg)%>ep1t^7pD z!t{IgTH>6@Mdr2{k+HNyf#)QWE8lyi3$HpI>h%Du7v?`F$x z3ozf1KHi}uPTtWcI1UV zaqWvm7+8bgucg%0K#M-j!^R90B;ThY7o=}FIH!t$60LeLxR3cKE}l56CRi>dt?ePv zJNuf`oAJOKl%O;USm{=u(T$CNsPGt2;VbTIA;&;)p+mxSg=@2s)X9RACRDhKE_9lh z8B9rT#FZE{3T?VFZ;*uU0(??oX$FbmyGfig;|3)-jq)bp^Hb%nc@noMZ!BxeJ?4%h zIb%2|Tw^66{r0y1AtZoTfsUu=C?yGihLDA)2u;CtcM~J)d#+BWE*BBk?8_?TO8F#F zwKDUdVEpV1>gp>CPyQA9tPGi4Bg7bpWVFVp;9-H;lvHrydL-P>< zpYjYO1f027f&yhoRdtr8Nq_Uf_DVJ9TWQo=(>>hHl&}T`hpyHg2op4vQ0I}7AF3x- zmSt3wVK$l}wX= zmZHE11bBsPlYbBXec@W_j=7ag98V(UaZevBoW?3Qg1(EozCKhRU!@idm|mgQDE8-k z`mUWE!;NC$3i!?jrU7viP!>0Yu&~L0*-LYJ7`ur}JXvAdnt4pjo&vg_dQgSCm6%Rk zpw#sYP+L}(QCU`^^Ol;(47O?Lbr#JW*YP}j82wq>j@sY+S*?l#sfaSpV!6t=1p2@& zY8bb8aL@-#R0}XkTf{Mfa-N+0qSbOOV#vd{n-asaN67P4FRVRIZagn zliw02O=2L6APu|xWKLJvt6-Pko~;&R?lJ~;8S|>@H{2~ybgz7<{&al7Xhm7TE~l{{ zxAp4n(Uuq#yEHR%yvQgb2u<*UF?Gdq5)XcaAzQ7y2;f+@c}NOdtE-HYzgpXKC`bzz zQIZee>=8c}KOTE*LzCTcmoaCjVxVVCv`RN?LK$Nu4Ix-{&h=nqa=Rj6)x>3o^pIS+ zs{x5MuKpCDSqswBX@I(w{=v-i3_=?4uj{fQrcwmC8s+|RFsh|qt@mYFz@hQPRu!}f zI%!BRKug%^?$kqPP+b&Q);{u$9ivD6$9Jd?G)tWq?-`kX+P&BBL$29P(V0yJW#S253KV;U?ILEU*(YCERY8@ zlLp4rX)n%?1bNLP|LjCxL*nXO$o)p|te=J~Y$kc0xA4i1n9spJW3^=?EoA{QD^mXu zSiyl!9K-ekC`C??oY|!l{q+WN_XN9izRjR5LgK?zB1v$RC0fuBRUNpuG&T6QOtqY7 ze&3Fm@q}pm*l4}PXcg0rE8f2ew4}Qz2yC|WbyLK;DX`fJ8!u!7SDuFd}mQ_<%07UXVQaIeKuYEZ`W@J`7bTm>&ze@I&gT6k|cE40nL3-7*V3 zl(%!&0Cw`Z`s+9idDM1{oet-Y?PkL5ETTG~jY~5H4Xa1%92g0<=kt23Nh*TejBx^^GVW} zCi*o-`?zhAI!3)8q6fc34~7ZN+w;d6K%5mQ;IePu(4V_}VP|2L1Qdyp)c6Jxv~ks? zC+Z&c#GFMDHSOmJ)pKJ}$*^Vv&pv_bk>RqD*JT0PYW7ViZG|YXK-OV=SoLr)8fxc` z>EBByUWTFfY8!!ieE4;A2W=znS{%n+4mf|qkKN!S&I688{YuOhebWE zUG<1$Dq>wagC1(MNnbRoj)RhZZ1B@mnks`10@8fLT&KOzb71$^BR zqZc3Dm=Ha#-R)M3hY@rz^RECiiXT!T+Cw&A`W&~Ir}>xSt*Qi_m! zRLi%8{h`Qkfc#hjUlpwz!&3wpUumDE4)a$BfI^OncB?28NZjyP0M`Qa9khZi&@r`G zh5oG0JCLx?XuT;zG)cYS)M(@1>zRXb4`X^1|H-&#^H+eNylJ@`0!urYe@2WIWZqeiaM-7p3LF#zv@wQo54 zP6F94n=P=M%&tB>wD!TMuCbS4A`25>;~CEF_Dnu?w*Z;SmQ8V^2_0iw@9mo2%8Ztm zjW{^zMn}7qmx<+#tNmSRMS{|@pY~c0owfMR0xX-(%1J~>^p$}>WN@`7(s`j@7?>>K z-5B#Qh2+UIdnA65oGq(~ZL;GmQCE|wEW6Y{6gq|mP}4m}Py%XT7GgIK(UmaZ!c+ll zp2DvFtB7?qusy478mA8&_l<)+hh_I)LSJ+7}nFOCg2={x<^J?zS6q zMURmZMZwOk$Dfo2voEAWA5NdNj=Cd;ESbY(kfe>&rVRP%xA4a&{2(cqIX2U1!k!x zo*59P2Q&PjZ&!I#F&#>hEU-qh`cFKI!r+eIH$o}`Mbls+gO;SOH2ORfe`FnJOZd#h zoiuQ&q?%NX_4x~szK6Re(hgm3B97T1SaG0#`;aM?IsT#k25wKl7R|%o@rf6MRbP@3P)Whrvp z>F;=9{YxflU9Q)925SDBM=+1(v-mxWV61O`ILhq$U>w! zGeHm5`X@jBET-X4CTyqgVIl0nK=2*Q9zdQgg^yX_k5BkPkmv3A6yHq~3&TPXh7+bs zX}JB03B#hPwunJ^1owb2xNcgjg7e6PAKpTM_T&3jrc!;Vz5vDCAp~g$-8tO~bPG5i zl&V*A63c}?V^FHbE?@sesrrKrDvIAUu`C#YEcBYwPdXQa!M|~0HOn1N3fOzfrz(1q zl!-bf1!&s&HOPYNs-yV!ev^gsAPY`G6dD2vM?n@umhNGZg-DPEqIk@|$ijAz1>+PH z!~P))!m5eWIU?z@Fa=~`?v^S%QG(672`x$2_WBoDxCOFcVS*2!reb*|EqufOeO`$v zW=QY|lHk`jDIiA^xP`?qoB+eHNcS;a7$Acbb57ig#V{CvFeuC@VzL$v8OsL;6%d9z zbL7rQ{%#m9fMIx)LJw!WK&e(=2vue>ygDe=<<~EZ;XE?ohYm0d{f8D$EDOs(7RpTN zNrF^N78XuniDy$m7Sc|wRl|8?!VlX(7Sg{7{|8x+b7Z;1zB*}xLSbuiUN>@f}W}wh@gKbG4_{S zkOgZ^Z~SM+LplvQnLZ3_DuV4KAwBY&EU=v<8i%o+B({?z$aa$GT9)l3v7IDAwv$9N z3~VO}GD%Mc#jMa>0CrZ1omB#Vo9!^M9VWKJ#0WLn4inp9VmnOq;DPNhv5(#a*;yra zRtc_vvX9=tQ)XwC*jXiz1@_S!b_~SMDzURlpbpsglRy^OP7>QmVmnE6=YZ`bv7IEg zlf+0TvYjNhlf-tC=n9eTB(a?&wv+U~$VoCEzbK0C0PZ(Ka%d;4NohW@$6GvejoGjdmzu&! zn{c&Ls!K^8k?PAIDEb-B-$1yKc0!HgN>mJQLa*uioSnza7du4DAF^5MyS6LpPR~z! z`)Dhhxah`);d?5HMI{-H+m&kuZ4xTm>teYp8-@o_4-@s|gER2*{4#|kT}`>9Z*ZeR zl90s3an@ziv%h9DtL-CXlDaG{bl3e$Pl9C5gz*)TYGL$LE3|T#ZAz50MP1K0IH5OH zYpLJQGI~paqda?z%r`DP!qPTClH+K}Ut}p^yxM)j4`otKgPr2O$#~WM9;455@xB64 zhJ-*5W!-Rk|Asl7bE_jROx=ucRZ!l5@G;}sz7zk_gQA>Udwl-^XIa|O0lb_52xB(h zDU$(&i6xfO5jGtV_WW6>JPX340byHKJo=aBJ}nr+^3?D#6@*=L-yr0LPy;yI!g~j! z>8&nK306fVpHSyv=|r)alQ($%^|h)rAn=O)KR@hIY8rIgwTd}%;L6gor}2jzbUFG; z2S>{2O$ydyBw06?i-jceK$0u3q-IY@2^_2HqFp0-OXE-Cpv!bdJi3z%kEl6A-( z3C()4b<0bY4SuDag!vd+;qNar#~Ku0X#ORgCo{O6JRaYiW>9SHY5Nf0{S$?zzy}9g zjB6OnlhV0s)(%bvVZzSxBVG&s>7k7|s=_Og;^cxbTq0Kj(R~~dT(R*rwcYi`1 z6qsaDok7xfb5T|sZr3$f5b0<|)|sl?&?22DJ-CxxV%l?5Iy-qqcF7RF*Qj$L{nJvy z4du{Z)MuI{?z`edZ)Fx01=tcYO#O_=$vew;H(A6W;j*UjYO5Qfr>2(H#ywfJ_jN?e zS_5U%W%o=+(UUm(SwEN^qpC=2N|t^OAIX!}OKg^V&U4E{xY4vH&tS}wJdbRX*zC5r zas}S$B?+c`30=H6vm3p&K*%hyqvG{*8u}b+Kp&l175EqGU?;4o>UyaA)RLFwLGxl- z)E_7BjV1Y=*G>J;8;#6gR*LC(tsftZY`|MJ3B^yb=M*8xdQ zwk<(zk+65dN#!dPwWT^SW#;ai^Cm9Y_}hUuJ(72=8>K87?aX6t-QHuOw$7phZ!Pn8 zuFK@%JTBvRm~3yD)xS_Y|Na~|l&Jz4;LLENxp>8|sXeZkn(BWwpog{K-m1TLCC37ZWvt z$G(36O4We0h%BDatP$R!UMh6RC$&>{Fk9ME#?Q^Cej9>;kaPtEKyl3+Gy?@>Ffhw+ zS&dw5eKhUmLZVesP7g}G)fq~g5XMQ2d9`nbzGut=p=x(U0rI>DA}eq01(+_onwUGx zI{L>zFIE9i zH5ip&;S}Av;u|8EB5}BevAz1i2dFcmu(VkUFi__56a{%wJ*?<0zU8plYbs-;!*@f)R4*Hu227nlu-JgGKtC4&0;^YYo?4(8D&#e0E z4$?RdtGU#vQBHuB1#Wg9!atYCKf|p9zD@kYbK!w+(og05R+HnOPe1ta>d*mlo{Xkk zsim0RWCU)KEhx#{b{91AkYEc8Q?PS1%rdc~@%=drw5n{-<2s@B2=TyEXH}CgZ3X=k zZQlQBWv?u~)!W}C8;gpUaW9B(ZkB!;Ima$*_{Tlx&Z7Pb)6p8!FCPVheHZ-7Jia?j z=hwi;@sj!j_r83+8dh3k8KNM=(Pz+Cs$g4L zLGuL{i2_z@m|3|rK;sNfmF+WhR zaXU!_j0BN)ZPNUrJKPceROiP*zp`Bm!u9orUPh00CXUu6mZ#tQQSeaE`LkQ`V9WET z`QMUbvpS21l{JH2=eJ0VeU#|w4<7Fyd>~eQzOJw`@Q0_~NF(>C&H3i?xi!KOGcPlY z#4cdtkK5Gb4$vja;U@5np`%Hl$IVN*`7{|X!(?33eWc=2WGjj8jucP;$ zmIgm&{qx*x1_Wz)Q%x=Q#of}?Y~H<>)}M9TR^WTl<-HYXjMmo;gwQhwY=-S>Lz{~q z$9A?RxUxh9h?$x6m_&-EhK9#oY!*1)&?3;P4#1D1;&-cQyu=_!ioosJNxQ~>&3Y?RkM zh>rUtSCEz^4>Zc_qClaw8`chC%$NBL@UP_YD;{;7t~wjCVa|vAUw0`}O9S_6G`=W$ z{l0=e&ul`W;owvweGV_wE?p4lA%6JlWxsdT2^Ujz`)<^^m5i>cFF5iH?;!$co}harBj=Ln-~yRb@DNeV7=fUw|hLLk&&4Q-5%Wh20d-kC2#dl z2m~}u?k#iHRV(S9S90MYzm}3#XQ8J=eexp!TX(?L=R>4GP*><6b*k?9{*v+0L5yAO zY{(Sc}s^3>EJj=ZwaZ2n3vk^R+Z0Z>Wg2n z@{B1C-sEQF=@te~Qh#xOkzb{ML+?Y`~745*BM{Ec_=ht(yi7>=GR> zDL=F+4)9CpjcaxM@;tI`SC~%0`@N-ip4LRQG#tM>`l~*B$HQZV!yh^;l8s|8YPZHs zE)H+rZP1|Gx+hPrugNP1=1Qj+r7yCspfX4(Z&(I7zP3} z3r1U;jv6$)s;&D4YEIn0Jgx7!{m2pH^%bAK=m!)?K~;ycSz zFcy&S3~1Hz{8i`dT%Bxu%j$#MWj#}mEoAG0chmyLu1Pa7v$(Ew7Gu(**_n_b$60-) zPu^S|a%3bYk`zH36p-&IBVUi2%ccHy_EYbVt35RRJSro?`7R(bO@P!hYn%KGDonD> z>pw04ZL9eu!rbH0O#Pf9FS&N(zK3DAwsi(}`g^uSJGYo84s8_+YBcs(LpChf_CDr6 z0eJ+R{fp|UrWM{g6w`{w&dV^!a+V}5HLkz%8W)^xn+R9WUO#ed+*5#jyz;&hXaA-- zeuB(K&uBZi0;BqJH6%3W=RVZwqE7C;B32}STq4M~-q5F@p+;}y?J1vHqU9H3x5MVT zqu)$@KKdOXxBA@9T#kIMMHtmL&XQrM@+2M*eE;jK1G6Gsw*+R1Y&eY}iCPGvRHnEG z`57SuA&wauF{ynTPeYr>Zsz5M`#TPZpJ1_Fe}d_t4WXNd9r?@tVCzZqtG ze0jd&()azh)(>{=Qv7;s#=M?_H$}>c<0Gy0D?s%6$?vOvJ-|_O1}2#wS+tQX$l%ZW zAoF<_IQvRpryIgQ@=IvmuQBK-m&MKt5C9nHZe@yZKLiMn?`7Z0%JRQ@ij2l$p@(o} zVjq5pu3S~hZLpw9^x2Ploe9;ZdOC9PUR$gU`Limn1Pxt&OgOdZ}x zcW(07W_?)#d;rbQXVkLB$A@2fpZ?z(^PZ{M%+PlV<8X*w;{~sS?zE+Vk7>OSzG0ow9z1$O3onBzYqwa$`uOUgKfRlbCG; zNSsmxw01oE;;|XFw7dSmX0=4?=*yE+oFB` zKhoYip6dVoAAcnksZFUWM-sLW=3R$23{vKdn+A# z@6GpmI)m5i)$e`#+-|==UT)`g;+*SwUDxB9_v?BPP4C8IU2=RZ9hGYRoAKC{q`z|= z2h)2a-GR0r2yKh~&H1hl%2M-qU9b6W>+Uhyfc%u?;v`aIf=3QHBb?`Wh{xCf&dAQb zdhU8|X5Eu(PG05}7{+~JjMqsgpI%qytKaqGe}S=?b@p|(wc2nu$-k+?m{a8+#vRJE z3(TlIeT@6%&9lr3zBhIr^5Tt%%cznP=ZtcuvR%f;#mP2F=gppuaDS?t$ zQoDtUmTKO8#nayW)HE*E_bH;|7(t|7%|RPOR`|I~n|#F|NPucEcyirK*q^}ua;3q~Rm(>M#|iwLWV-UHuu4B9%A)E>i1WA;;^ zd_R;YoJUgnN34=bHx-hfVEx4jJ`7DjQsk^$DT{+*rS$5OYw&??k3(K{3aw!xmiC{w zFw})-4*y`_oNqr#pH8|QH2N<@)1FZtCTSWK_+ng&ls2uZXL@At4}|>cRETbt-CBJ~ z9wEBm_QiwK6+IEZ&P?RrX^kAcI#N=f@CTNWRIrxrBMSF?@}OmVuA^B0n}D8cCYh6- zbC;wYZ9NBd942twjZt&2g*sl~U9EYINH;_j6(KS`wJD33rENuu(3oqU=~6KZMxH`K z$frji0wc0umqott3(BEPZson2&RN@Vj>SO-N160m{{Gi3jGWC-^ zjx!kl?A$JGvrC7(gcVjr8g&DDB}ZLzhO=73_-%md6I`g&CIxRb-T-dKSiByE574bO%Yy=2TV0OE35L__Rq*#-IwtN7;Kw zf$>%(fw?`GMXU+BF#rRf>w2b(#Vr^)h_BsM8qJJ^gmxc@Q6u;>Q3@uHTff~_H6-P1 zs+vVwBV%8XO6~U#j;3mq;D_KCo`5sOh(q|3)S_smr^Bn%rH(!?9y0kLH^2i8ndY%pVGGB zh8gp&wAy9b)?RQbF(%U-d81Ew#Z*D8x!15siKQL&Crz7bvv{geE257By}8)$Na zg!y{a&n#kKv_{h-ph;3|y~J4o*3F!#dB|xl8lzzHz7@O~N<$fr)|I`cC;vkV=|JBu z>Y_?Q+jmHmN)9Gv*ngqsF35pJkvA~^{&^LaGe_vC8JHjbo*8SEiE=YFPDo{O((PQA1~f(LH}UB zNJ6%tFUH4y>W6Gq#JQOi?$9^=K@pWLSNX{u6|X)E#`%@h9;6A5;oy;!WaGicM@xNRI0dde0jP zp%L_Zl$HDoyp|V|baT@Cr|yUJe)YGh$%h<0>FNiI$l}6q{7;m(P!&6&QwofC169AS zQk_NYd${cft-|PdrZXE&<7{-3*W8vkG!;trlN;J6wrtvYrllfg8*WBZ(rtDA<{yVy2? zjg*1DU#I;$i}>kllsyK@#LcF0B$v~QQ1*h{vp%tZlkb_9vNu2(?=|=7{HLU*1JR3Y zBvH!>LyHniI`Vm8dJsu&fG7)uC?#i_!qB<9Xs_3;JjtYs2SaqgsyfhJCC2tVNK6)g z@2!dxO|n!o(LMhx05|!Ooh+L;RP-4+@#ZPEoZQ!zDY-A6Z~XRuvup*0^9d8wz4haQ z*h1gyaAp0Eu2M^VQr!&t9(Gq!^(3n<+R9IKxze8?-K|%h29-hatyvO;!&99Iajbva zKtQ`;qKXqSlKH3ur~*y$kuR#F6y6>x{rVtEQ|MN*hJzsK`aP1cHWF2&XwYz}Cnj#6 zX@uhynO%9~!gcS*0&*>@N+c`u`JVs9r>yM~Qn+cz_wM1J z3RV7X9v{(QG;p?R{FkhEf7G?t@ljrGwL4dBv6~?sy|rnQB#eI(265}mMbD~>&>4D_ zs4`<}%?+^)Zvw;5YUy!rh|yb(kgN}}z7MyqiF6{Ixs77t{eyX^RgMdv9lhz*&iC7Iu; z%=iGqQnTBE{`Y1G!>*P@kR%W0hv|`US@t$utFwcWNM2m||EP><>0+|E#ZqwNnn_yE z%lPw>aOw`&xv|%)Wd=?adUnP8l|-dPag*W7CrQwq>gR}Jky}93;h{Rs+Tmjs7jlB8I?zgq5%*NCKCM^>oiyOj?{q)6@$>2T2v8j0gL@$lU& zEB5EeGMa19+yn&$M38?$Sz~ikdGs4IA-R$0~$vAP<9(C-VVC)O!MX z(z(we6#NaMw6&2%MEL{}CDy!`luYtw-G0D6Ju!M_!rv|D!N9e17fG=QNkuk_Rx1c^ z8!)6Ed?WSK%y-AeYr)24CJJ-rM}L0xkF%ew$m*|7PQd+waC|ScAdS++ zNX*!U82e2LoW$aX9u()?uXn6)4Fr5e0Yr(AhZ_ulU==05R+6%Ow)Yw`hR+8Y?`*@( zey|@_FLZiJBL5He3x50OIkeX&>QczYBhKv-djp~!;RF(Y@jtXo$>Dl<(9Nv&uN4WL z&_?#91N(HgejwiAOq6bGhn%PVN6NPyM%u-UM~u%CB_-73nb=Y0V+~C=DVS!*?KG8mBci9 z=p;9>le#vT4uom1J67O~e&ssjX|Ls-2O=}DK$yn&x{{RkvAqwxeUU?fn)4v4(;9zO zd*Q0UI!=llN048@9kd4n@FiTlq-=yst)ltCZCdFEg}e<(+5t5DAEV9L7CCd?^&63` z2Om^0-*d{95vA~H&3b(L?OVtFQ03kNeoSmPatTr#J5)B*1^ZdZ9C4%+W@%0f+J+0O zsmqCaN-AytNticnF|^$CA97J;!N;pge3=K8g}k;Q99x-~Lz;9fH;XnkXPT=87)W99 z{YqS6q~|xg1fGfS##N#%@4En=iJ>P}^iq^=%iF;{0|D1)bdc1*hXbhV!ndGFwwiL} zShQHhOzNWx-p__w#+)}?)kJ;(@{0<}$SAzEQkT?)QK0k!Y<67cdztWK`Me++7Atk9!$bR@xv>c5HKcy*dcq~H7l?NbR}>~(Xb*YqouZfml_rV^PJ(U1L_)CWzE$5s z97+cF7M2~RabBN>A&kYmL&E(JPfyblj3I=OQ0hgGBxXIL#a`R2G{WNWC+kK&rF=K# zu!(~=hSEw8&JUSNhfB`3WsIo*K1Kx&g5t9Oxs$dXFQXQ7qRNJ|J3EXT&jsk#8pV)} zoY)rnanCPeI7Lz#yjwMjbV!EvzU>C!3C;UCpaKMRwtVK9Z^QW$=I{av05ieY3p4k;~h@WL&RNzJz_^H^-)b7jy{8H z|L!xzrd_%CF=L1vTK+diI$;bw)0fv~Z_6HZHR8{~V{>btrXB|S%cLc_E8^N>u%4TF z0IQ0ez4AuFc5A%>!VCmo5T21y6$q1AVwH(tz>}~5*2z-ZCO3e{a-X*#Kh<3DWwEAm z9%S};(wM2IpYk=w=Z@x;d6D1#?+Z0Lmz!7}?2vY^LEdndj!kZV+)$2bvbkf{iIb0M zrN8IzKt$|0+b-IH6<{OjsLn+3A1*{?FJb|6TaGa$X5rO2aBO?ORfs~qZqwMU zIE~|XOor$M)4v@QvAyl|0kR@GU@q8drBl&j86-<9Mt7~{^nVBi*0|8dF;xOc zzW=lv7^md7V3d=y2cbrOKY(ZJ${!I+(%?bNFc)le1*f;+d|tM`8a=l7KLPcJew8P9IZ))cyE4y2u8E2W@bPIYe>(%tTC2=9@)%-v5e}{7&ue zQ`|V3frH%(gQ->g3MJ8M&k^IbD}OUtyafUNQFoOtKkOiTYV;OF=>vnUZQB1jE`|XS4Q$DCg0aqj;rd*&!N|IRXk9h^4k8e_tT)d$XNN zadT|0KkT(8mQiFoO;W{mV}co{c^QQdIbGTWDnA)}-1A7@P`W~dc}XR5Y{kah!rXcz zoK2e3jputr3$>j~X|PG}#Brp)M4hE`Sbbl|UHY778fS+`2ZBTyuYyEh z2^n~kB`QG8D}OiO2;^OXFMa!^NU){<8anXNAGaWF%hR$hLxzXK5u}h~9AoPp2%E0T z44FShut)Ptz0&&5*$x2`g(Ilnq##3NOWc&y^@`WbBrM2LkgC~@kwZZXc)7hV&U@NR zRe}+fq>s= zpwGpg6Shg&G8$C3ZWB-?<%1 zeY_H9W_PK0+MmbC$4H5#csxe#um?w=SeyNE4MDNSn>h9p-6h~@i) zy@4juw~SK*X0Qh(UQfLY-EsY0(o18f)t*|TfpL6iW-`l%^u)RzaSV(&X<|QNJyJ)` zlcl@ z^Q))RXD0SJ2-Gi@5Wy<{>p6JOv-^c+&m#`Mw?f5D^jpC6vYV(VRE&h0 zN)Bo}I_HVu38uf+S+9v!>t%&ne?-*o+lvvGF$w!HQ}YOuT?| zFf0S-fHit16F+otVL-F+s&jVp7MT7C{4 z0v*T&yB2p$dys6`ctOvYVxNLt+n2;JEoDapRsPAcVaBQQ*>T4P?=7}87Mwip-dr{S z(nP|KTen+ku^H}tnYGG^AWbPxjSbQa+Ra$DcyBKeYp$pXXY);tMih&A7xt}+pQtlC z#OpGe;6`t8T3#dB2h0U}M)$9Q0upiu^Tydb4^@&XpMUc2{1_O{czgP=_wt~A6~Hd^ zOrNB&B1yyMy2zlH?dOora(jD0h*4B-z*91m@$iWUv(%i=3CAHM3ptpRiBe)U-#9Nt zvDl8Bhi}BBKt$9p-$23+LE6fHqNn6YthC(0jNzD0hDs9F{?BB^bLGS-|DC9rT6v#A zPYa=n8mQuEiVTWqS3pXs?d>MBL#uDs)vIV1rM!2P>I5+yGN%C+ohk%LD(k_CwCh!w z0);VyI%-(fIvj&d=I237+DX+TV92zT+8O?&Q>6H$gy$xJbO$I`a4KGc+YWi$j5t!_ zgo1Fx&%pgEl)h3c0wSm05)q=fcMKxL zRuEz)pM@kzh?^*8_cI!DytsS_<^Q8*`A?plXpCeG$|*Y0=?e9m5r8d3i%F;3KKdah zOyDMMS=GopW}A<%DwQ+bof=QmkqZ~RhgApGiQ;_#B78KNBqi2`x2C@4X}=_Pivmc= zL`E#AWt+a_yd{f&?{LCFQ0<-IEcIb7C|D%S?RA)_oP zsfM%+6n!=1-JeNtiO-U6u_iHS!-2%SqskY@C7gbU01zM-@kh*qDqzq4ylXaO(BfP8AwP>*d>~>4Y)ORyX`AI0xauTU72lc zHg_5wxomnTji{y=R;s|M4U{2MZ4(}Al<9oYjCy(TU<6V@n?zE&)Sv#9tK+CuP8(mu;t&&I4V2AG&d6;F|n)rqPI0-DW z;gn<|gNbF)LBzn|BF9ZFEN$Imr{#rd?Hqe!_c-L^r5u+a5Fv5037WAbXeW50fUM^R!2=r()GX=FYp64) zn5Dwqux9VV)hfCG4-~FaVJKBVNtQaDG>sCy1#_AC{f>FI9Q6SD8tV-gYLis^4vg;d zof11s?nk?LV3i!5t`&NDUP;l_29F?#_^EC9$gCznI$cS=s^Og7jkek75tb<*ctoiR z57J2`5h+`5k^ZBLmhEmk3uajfP&;qLK`r(1>=v}oqG6|oL$aEl^iwq8%4 zdjP=fLhxVRs8(V|Oqw-9|IT8;hLCncTGzkN4Q!pPLD~L`ezz!9VjmJy3=Q3vawC7F zAAb;Vn*mE_uu@SmoniQSv{abUmAdfaw3E0bv5L#m(0Ag*SCN9fuQY)T&x{{!!^Ixh z;jQrp{3r}3RC$xfL)lJT!89LNbGNAfNh>*3?J@N_L$h@$kPFUrji8{ugo-;vq|^19 zjoNra^saY8pS6fau;?V^1D6dCK#x4Y%Gv|)mBQ;QQW1!9IYQa^9sf)KdgT-jS0A5w zdO`>7r(*AleaNXDg+H?22?8$)EEzBjX}Lvt&Foz~woeUSA1oc9iKotFsago}YF}gCAef^Tz;a$S4fk%H@Y!wZJxz+& z&5l;jF5Xl6ElljFg&=-Xcw+9W+FKQ6o=~v<@h?>3!8^j}6ZHEZ?_9pz)xeW|G9HF- zrB%`$?vIJYy}NBhMYJikf4rx%i}2SBp!c4x#qoY^*C0GZ+#9GOW(uM}>G(ApHDt7fS`lX5Arr?+9r$qWida4um9& z^BRs^j0(i3Z(@IMiRI>+S5>xN`v#M`5m3f*bdnX(+93 zpRak)-icn4vP@7uuxYB1g_25@mR`e!|KcqnA?Yn#Pe?-U6p5fCuTHa(f>Xzjc9Jx3 zlugGDW`(yqAi-%wgj5jz*}5sEzxs0zI`RenJ!)Ik5j$%vEtjhbHnlt_h_I{y0mmTX zX&eZklkW+74X=;KD+48%1c)kzv@AMN-eLIO#5*)3~s2rKM8Knf{%E*tz^!gozH?!biA1uh*`;?r*Mc%P_TR$6H?l!(^xIZb(o zXY0Fx14#Xw#TEZt;~{fn2BK@Hzv#yc{_&Zt^etxCMv_pDQDOSQ_&`)Rwr)AvnZAOTdzBBDh?RJ4 z!R~xQ*)WWLHy^2P&nRc`b}PT*s#sQKq2><9ILu`;o&O&FvvBnJ))xjmp`W{tT1`~G z2SDQBbgSlcB;dP*=;Dpp%zD1;Hf+>JMI!}By`0?MBccXWAD13 z9{YgSOFg5c(vn4pgMUN&i$%ZEi7{;f|7~v=WQb&Kd^@?xyj~>!giTNSQCzGDthmx^Yh&(Q!X)scb{A59emB1zJ!v1!aQ=(qYwD6LH@V6 zV@s?G5yne+7Q)kQrg2#jze!<5%mJTX{5g#FOJo`*MkgAqHf?`_b!PnQ(?dSf*$yN; zF^xwGl9iN(L;;~`%DpfXxhUF$bAg=-_V!qst$tr;2x=}P1{r)eKIVm79k|_I9 zxvAQ{$=+%7Q{RQ-2^qEeob$2k27>FD>Y(9hPLO5Es?pS`>-TK{s%}Tij$Dp*s?UpGG&-g$ABC3=1=OK(hba>H88t zE3|v3wErm7oZ9d3*_@8)|L`2EFY(+77njHVy(Ltru68jTGghLo1k7MvkzgQEhfYvnq?kTsLP+edCHqW} z4DVleO*>GqU1lBjdGW|tA4;_G@lvJuXnCc0m7e*eS_0TM`HFH6yNZ!d4<+!29T}QM zaSZEeNyxn-J+#y_{OvC)4xZRfIeVR7cH4=80L+vEuCDQnCKO`=3o|O}xy4_9H~}nu z0xjmAf__&mtTX5Q=>80-xOOTF4pz1`R-FrY8GvuzFIpE8#~w(m9R39(Rkzy5Vtt|F zReCDs7B#V#xWNV(ut7+$?M^lyL0~83VYz^=w#WovCb_+5oxL@|{cMKXh#}kD!K{e( zyZTFA41+_$d8M72>t`QD>C`^)NueJm^KVpz)v{pme&{}NO2S8~%EH6=HOQ4DsQ95S z?fe4h;@c(&;~euGO{_QV@y9ONoslJNe5v*?s@GxqG?k$vo>%T=H}z_m*LXki?43uB zjQo{))q3tkd0*R?JL?Rwx>|-F%;!Yn%+LKGBk0YkZq@%~ z5(&a67WREA_TT9*8GR(O=d?aV{Jx_U!6>oxf$PfB%TxIa^{FXPd%-~GPGGkOZENMo zXQ9fsZ3-6jKk~2=sSm5Ih^{PzbeT10$2xKIhsR;LC_XTu3!^A>C-shMiPL~%{{j(JN+ zoR3!AbI$k;nnaXDpALAFg5qIfLF(zXpS5VOoPom)srpecKyn3auMA>)sR|xiixRr> z_09c4=v_(Vz#bN$WaxkKSb3}R3^2W)|E^;5AfE7C=)5>4{&)%#S4s&M+Y+R-!^@EX z{izs}`hjcTZ z*Z;=mzb=`}dSLO7YEAE-b&8S29=zt*-7C?TYFKlu|a)|~V`5dp{kaV4l zhhO)Mm}JneTzZlntKZ@zZ?8H13zuEEJUo;;m;&Ly_-(LTTV+Pg%U~3QgVwX}+~CN` z#bV#iWO6AK63$>wZGqgk*{oyTXfIQCQ@b4mK0=Ki!m&@MAt4BBLUQ1WQJVYxd^Oq7fVDs!?6;)HAS=p!Dj(@(Tf zZy;bkH_#eR_y@+h3`8Us9BZkXB=>q7v}MV^6u?HTw=FGsy}@`^wfOw7Voh8~;etAQ}I zwW>G1w>dL*a6($0rLzY)B6XR>IWZXnHwtUv_79 zEKhXbEoGeBb)(=UE`ZC4tCSd009s2*?8mXQp7t@1+wFO$apt{^{UGw2-jGC&(9h?f zG`U>WixrF-&Mf4h3$EFDgntFxy;|*6g3AAeG2i|)R?HW;pTF{wR1qSP&vqgc;l63n z3h{t6QTi#{U#gErFql0Fi75$Sqc%Z(Sb)uoR_Bn{+%MPF#ZG9YB3&4X|EeYtB1AOv(nuAh?>_Pf-)zL7xtcjScniMjV7BU9+C}Kt9e*~J`V|ek5REr=!(dKURq-k>3EL{xUa-L%0fFHR_t zRuoIrLP96(iU^DjBwYT@5>IZ0A)~7~IyM?u=SCS1S8QV)V`q=*KQ*R>BK9OgcuQkM zEy>-H4k_gWSexeDx1)(Tw!;`+1o#&9oeM-%^A*HF1I)=#X6ay7WV;UnY>tSiRGj#- z9yDF#7<+`$Kd6*hLE&kHO%)EeASx@dm2JTkxnQK0V^^*g#UdMd9yAjJW7R;l{fyB_ zy@+a5F#eiINw%1}Vc1ELWRgmU6v&uYmkOGyHeA&Im2ULPIc#I& z65sBOhhu}S@@Fd?p#Vf}LaxWk$eSy_KH}>`>@aQcVgD{nU0B0fCTw%>TuG^enD>5&dm}?jP5?);?nsZ#k_0hZpz42J3uhyU}`T4*qGo^j{dwFiQq4h>74@ zVzYF4bArfg#4o)u2$tDsLi2Oa|JIQOXl#8vZjI z18=e@HU!>LXnTVV7ISx#2rgT8Pyf;xDPbJzqGM_olB-A%$7_3ii3P z(=8423tGJyQOj1aP=;H*(iY1cAd$7MkC&*H+_1F1>^1XuJuYIUqr49sBNnCZLj@^I zi-zyrNSu_b%Fa*npWeS|(|FgNs6s#Ed>LtML>q$n#jYZ2sLokxSt_b+PKz^ML zp3v&u7rEN-Ly(Ygum2s}P5+{y-~)wjXJqL6lW4G)OUca_qT0LdGh6bM|NU6`;HdvaYR*n|f5Bp0FTrRlHKv!1voa!GY)xc}hbl&{VWU^m?VFM5hMb z-%LqYk?;&F082tGT&BWv;5Q1x9PX}yj~q+thtw3n#Mc1kiyCj`OO$_Bl+zBf2O zI_J=Yr-V(KmxM^@S@Q2agZ+HBw_vp1Wbn($vyvBWk^_KBi<(+_=&B zr9HJ!A3KX`c7B}9uVn9m&C8|5?UJN&5lGu+q(god4!?n(BGmHA*1fdzlUqYN_d=M`#%e9cJNR*zHNIeOE8`lgeJIa({V084waaH zh#NCcSvT4nzT82!m&LwloAx1wNrD3g|EG!GZP8*y7kex~!h#y_%q4ah zw`wkQpn*xf$mj9hiPo0{Pft2GdsPd`#T10h03^U@dp89?=EJ$&s=RxD2$3dnNUEk~ z1o*y&bUD*&c*~aNe;g?Axi*wc-cdC!H$;0Gjp}oK^-Ru49mnNueSGpA^JrN>zDcy! zV$%%LF={evaOwN9{r8Ro{%{aV1CBi>H3iq$DB}QUv&YGV{3dUlOndJ;Ax`iDIai>7 z$<5#?+cj^y5pYF(syOzsPpFIs?LK1}K;%7-(;OQPFT%v?RGHtSYD_9avmOy6Gl#JG zQaBpRAwi>z;N0VvcO9_YdHEc59sSsi8`gq!|CH%HI0_t!Ve66E*8RXRRj+Wm|7@Qn z{2^uw!`xNu!{d)Wvqw0dxjYc^Z)y5d_!g>|OQe;4oldLoN9$cPe4WiXzl`ck6^KuM zwbn0>NTYEPup2tCPx>Fvp}t48Ffqnx2l-9R;&zvn!6$4dq`+j91`F*W)wW2_U`&M= z3Bj}d5>GCiw(Jc#Nn{x5-zn*p31&k1sS6V7ovM9-_CrrZFgdg^C9I(w4&))Siaay^ zkB^qw53)KcU$SmCKBj`Ir%+M+Ml6Mg7@Yu_NWzP;)okbEs?K%YpXLh7atGc~uy_B} zPKa8+YZ z9rk9@_X~V%Gno|Z>{`}&`zo0{U+8q?3uTyAMTRcBHrm@=^$PBtb@f_IS}2b+bw2m= z4oV?+&-bR+A#oXgthHPJC5@sw>N+p!*qLvbJ<=RF)1xoV4FL_fq;OwM3CZ)0pa-X} z6*15){)YhvfB}O4U_c=-z=jgDLJb{+!k3Rj{=yugpPMU{jx3ev5y*i}4_*sVU8B9L zqs=SL-$J+=%#L;xe6z0<>qWNk9rx5(U8-7@fOSZY9P_-E)@@Z%vf&F=y0b$7K&nJm z#MR7;5JyNDlZy1YUCRtqoLBEE)oRC+T~Y$Td$KeG_|)=Rb$2Rw+RwD;A80))GKWrz zm(pHdT@^%{YplE9E_=xjKW063E8wuiVcfO=iFf!IXHHngQ>Nf&Yu|JSl^7tAjE}kS zYq$w(xRZ=-WXvkE<(hZFcCD^hPmboIj?3A5hKIM1k>@0<2SZE{MMt#Mi4$X2Rkfdq zXs4s%v#`13awHT;1EHKkxy7l?u2k23_(Lqm$DT0Dbb~YF`!9HV?&gv5DV%jL)a0xK zGSa@2YukEM65c)Tm`_wr-`IRc53ejgvJ4@%!fvTRvCdu09K}A3yT~Y>_h`Y$RE^^V zM0!szKye}}ZKVo~`jYvU?)~U1R~S3LRSyT`i{gBa@x}=#ZQ(sfGHILXLtvX}RDgxD z(9g1N;x?Lf`-$;GWSd5Y5A@|1?FU@HRbbT0R6MewEo12BZ!Vsn#s1V?+3%+j*vb;@ zRJ3~$AqA_(j*@{!ZinAHVn?UhYku7IP{)d2)GygiwDhHb@(>St7Wd^+l$CsX_#jN+ z5;lVYx==W7K6L0fx0n>}(*EeqDEu>&vqp%}_i9-bnEb?J{4oMb7fyU7KgvF{m?IU_ zLj1*79amw??y>bPMC1p8Q(WbpXm)_qY?PCFj?XbZ%%9sA!>gD7@gENZBl{EB;QTk= zl~A08T z?!x=YK2==;r7UX3@pJ(!8pb3bl#DIq!Ek&@$9bLO)uo*CCZFDs=IdFJ)e0_m1|EP_ z&`dcrS;xKjocj{^-RL7ovE>CQWd@cv<+l5L`SIeXi61rarf94)cXQlX-C0&}3reSI zNe)Dkfzfnxs9j3CgVV2nc!)J6yLBF7Ge6W>MxuHjrvw0xwK0bztoul}s82}$>Kh(? zn?aiEQRkP2V$*R1{+3?Lj9s#RK}HOH+B+wQWtctMHSyU?7pg$dH}kPu z_pa#VXkJ~2$tbGV_hwMK8cjwcG$+#Oo|5d{4#jBS5&`QWf%loGNQGpwiMuW1gJd#? zS|>ZlnOiYyPn*g4-W!`yW|LKV&>fi!{fCSgj_bYj_ju#7nm^T9v*ZN8fBvz0)%;To9>{p_Ai|blpdgYT+L=kA5DuSS1%oq;DpF`8D zSLd6@VaiR9mWNvQrK0A2P^qkGN0ic3G+`N#=~1Q<7U9NU%yYAOobyJT2enAUqt&vQ zlguTVIhuzY4ion*u0Pyg7#su^;!@raRhU{DuVu_9s4-oOR|d;$@^Ak7V%7Bi)y4xg z9dp4a-R^hEQSsqOe9Z<+$351J%A4UIsMzMAjWyjdr07S4k+dO@&uCGo_eDRBKq_YM z2^BM!Xyi08K(B}n%c3`);30ti@nXE?$>d3qr8IO$5Z*W=X?hst%rzf@b$5&vP}(!P z1s!==5Ej8oMZB3aF7QsxyG@?CJxHS%bEzCPGi3LKw61eKWMQk00hj&z>kI@eSyu?% zhJf8o0=Rl((GI6p>q)@2#czB{FdIuF&V@S0@iDHwA{%U=GVJGDDR91IEA_LNd;VKd zCH@pa<6#`Pj(eLM2mAHpU6zu@y*{QF93xh77=3hk z>6_;akJlxeDpV@ z`6v|MA*uL>8Y1P@eGrpLG=aXB64wP8T&B=LB92dsEqQp7pd*l*Bh&!OBkO}1Dp$WU=7mT(fMefvy8q)r94_qi_E4b)p z;jVyyeb-_b>Vyl9;6N)5;~dci!T6ET4_=(OR4!KwthB%)a;=gv)>7yOp-m$LIdp~uWU_9+Zv-@b*AU1Xt2~28U z?*KxmC_nR@PH0ip2im=2hi$mrik z&;O8HEREv;KT|sZ`c1L>e61H6Ab2j3M#B#2pbTCYE37E@JX($UDyfQ5ZHM7Md8hw| zBCE>lF_JSO@E@_IB>3D2KeB)8^PqsboZ#8;I2&yTapOWZZBmH}n6($lQOZcsb>n7 zgZoI1DS!UhmzkIhH9m0ZbvFi!-*gGN{J6lN@p#%7-Eo!d(u>$A8@QX3O}TS~aU+sG z+8>D;+Xn^O*UU~fTc&Z9v2W6D*KsowHYK_tQ}I1&AJ}jMD3x&4i#{gDO1ZQ{@ufln zOW(^^JydZaD{dyf*stQ^LqE_@^oQnZwb_?Cg_Q0Uv^UdHkvj@!!w4; z%S_Hsr~b|j)dK3 z$hctSGknX@@HQCeZMH9KE~wNn<}@tjgvj3xr|i_;l`;FbtW>(i?hCIg2NTFMQjGVC zcA=#j?)C^nmyLll$94C>E@JGb4lvfFqYZb*2LdGJF8czy#WFe+HWFbrA@|nsKeqN3 z8=pZP!zQ`PsD-h&m|H1MDj*wyL$qr&gvYgC;?=rq%t=f6qO&PHt)^;9L)_iZP?FGs z>%pa}JVa%e6%Cp3^P^2>d<468k$&zHcJ-3e3l;B$TGt+-C~d@K>;{uTS*_EQJ~sq2 zUsVa|wceE;vzgynh&58ob!w{!{2f%DhZ>MDdRmxSl-NhZcyU18ou&`CNsPyE2pqA* z(<%=jA-+yAG>Iz8ft@`-$J)g#^?ljsi566nqes2@}RoOn98(oPGk>xP3*eexBzLuu{$EdZIhi3*!T#c zQwf`DKW9CsLJ%I7fgU=?7-S`1%*-Lf=B zeQ5e2+E32D=icx4l7ym6H6o%Be9UuzgfU+qYGa3!rSSMRkXDT>n5hq?$>>y==s_KS zE9Ds=Bo&DtMyJTx&$3u5>llXV%iCLF8>_nPHQ~mJocve1TBJ)@szoq|MQ$Ca(av>J z`NJT!stV|zn~kHX>x#})hW#uF3!qskK@gf>(F7_!xZR>7-*s(Jd7~yyr1^VVA%p&4 z=>>5I)`PGedOymirSMZV)?nd>@_sZR<7Vk#k%fiiUVo?3@M3TVQc@ej zAUI<%Jm<9WA*@j;>Oyv(Cw5<9oM!jv4C+vXYtwA;-ks)N1v8lDUSXckMeR9BfPp#3beqCV~Sbj^JvsLobc=u<;Vn z+7%2Yxnlay-^^8spuN-$7tJjdCx=kMHYNQbun*f_Wv2o;SG`8hXumo5a8z=cv%J;6 z58Wn;ZUkD|t8N$xUfp@OkB6x)Ul8Y0dTXIeHbO-u=5R&GZ9YP2Vk>MF6^k}XP}#*3DkKZh zrJnK{z`_`s)JKlhN7&T@er)bb?>O2o?EY#idPZ(Sr5)`rM=}w**`vI#2)IdvRxWO?OZ3i)xH&;^YVQ$&{vm4@^pVG*lP zC}esF@REx2>vsKw99WA{rNrLCyZK$a*81I&`&`tpg-4iYe;=Iv*mm>lPRL0c(;)`F zy4Ci2-uz^5Zwa$)63D{U%VGUFC`~A{lqY1-kzq#hsL6n(t5{jiBLiW@o&F{ry>qju zVsC+ur*Rr^$CUjxG|7_f1XIFfb}b@Cs=20?3;yK%c~U=$Fg#Md6SI08 z7oTu%qCVA2M0{91KYk$9l0t8(@9M>iKD`5psg-ol5l--doz$y^fGR#5z&EHzy?ps80&GR~76|`xpWU|*P%LAh^A^LcsZ=jPrRwL%3-@kaF$iPM zRGe%UcR##^1o2%L1(?s?LTSU9rR*1jCUk2oQkDPt3hfp6X3q3oAt1_n{^s!K6={fe z+LAx_BW3oZ^D!w)*b4kMy~00W-)h9`xp-+JXUV*fIRx6X_$(GHkf0KDZvb~<8W)L@ zNBRql0l;I!JFLIcYbT1oxx&0xvoU>{BYKzI#3zBPI>>1AnpOwhF5#uVn`IO3Nje$G z+XPL@MZlp|>CgcUwu#kRdt1id9BUeUAK51106SWtYOCu5TsGU2cRzXU$^@8a({Nfa z!nP+Up7>7>w|Wz3#4gmU$FQ*^Ty?0D36}Ta?jvXN1T`?3>y=bXBtmX5YJSY*?Fu{Y zJ8Jf6i8*Oora>14Q+iuC1wCD%AH_OnNosGV4NfEqJfdQaKi+Rty) zG}ZrbbD<$v8PV}2=knn4i8Z!IKPXa5^b)nK2ourHy=Cs3tauTz|AI3hLWm{5Qc5#&4|CFWSa6$hO7qU7f1?b z+XY$J@z8F96IH_4a)oL-jbJ$y>{sS{gFzh>5Otu=y>I=bs%e|_+~=d>?Sc5Tb*D^X z4VZyvkZ?W3UJ~7hl!M#Dp&b0_%we;!F7(8!!CdfCmLcG>5#zrq9t z62beuUr^h)=Dj4PGDz~K+h1)Kds;eUz=W*NqxE%Ya;>wu>uP9v||IE|K%F48R>N{mU(-X92OJMitac*{i{1m-`z$!G*W7+fJQt`K(${9i* zV|u=v1YJ;st@hI!6Ul`aZ5HiHhM+3&Aa zx7GOGn__7asbI~mAhLez#gP&}Bt|s+W^LZzCG-KdttI3EdwtfEOVVKhE(id7{W#xP z0JKS?I9F5;>5c8#12&QiM%OFe;0H&=8-r&LezcD&2$>T{^UF;HYP)o-b(HFR$yc^k z=iYvBwBmV&Rb`F*I!8!K(GFLMg8tgHoxikp$T7`Z3Zje>(`9HF_{-t;3{VN1a?~*;@E?2Er zv|w#)q7Hit*g>)0`oX|Y)Tp%|nJ7#ejoF(T34z)krDQVlf_#ooh=EFQ6V^Tgq0ujk zLeaZ;M5jz&OD#56nKWK=UOQ<>8AhiN6|}HAfGZmF zeeP|uUsc2R|FU#=d-?RsDa?;0(23TaX$>|G5oME|SChEbz?GQCR1)I2SPdsVxNNKP z^k5R?4Xgo(zo2ZbNiQ}vhl_zUAd1LX&HJN)Ko%dH-S~bF_WxacmuCnUorW_%hfg-x z3*8dMv!0ofy$ckbn>9xv?s1l%c!i=d`2}~|y+W@T3QJ{>a`0p-vzLNiCMCZ`VNu7w z1C*jU1U*>@yD|tW@ncItBtAQl7b&E3!*z7lh#H?k)L6#a9M>h3+3wV;(LT(KKB(_V z-VQ|mRE!^Vvz;W)WZVZ|QHyNR7$R=bu!Ewq5P$P{vUuHbu7l6;clx4mK_VD&zeLSsuc7>Skl9d9yMkA0q?DpUr5%9l{0`?D!YVdT-WMy|xr+Rz- zi_}}N1{*QIFAH-1$X!B5&4fk;_9j1ujWW%hZI2P;&2MDylWzKN9p^_7I-JL9pl8DG z54S*;U_U*lMZQAE>_`c-t4JIah?n%se_J^@fmb zN502ocxMvgEFjV`-0_x=Put@`!E~~%Mtic0m)E&JS~aNEH;+?R(1TA?LAJT17ZSF) zlpyxuBP>-L*#QsRX)y zniY}JJZf$j&scj;#vJ31a<%LKfrd@b5z8~-!`a^xl8mgbA;r!Y;Y0ad85uBym~dua z)Q@5f?gRhXfzk(Cj*L|HI(D9@=XMXt3~eb`Fp_rQMs7)bss_H;ZotoU_^_A2_-&M_ z&4a-rl&SB-+63YO!(5~kzG!~W?#%_f0indZK@AWdb0LB6y`R>^F1R{9Pgu>q+MmqB6tWDD`*E&q2$b>^ufmoU zFTxGOjM)&R|E9O`T7Cto&>r*^&d}j_yA?4U7Nu_)S@UEAz30vEr9HoZkJ&@G@o1wa zfDz$=z|4od{{15TM=so*qlvmMzwRS9u_VGu5u`IL{HVF+aY4JOprcYk z!TMgV_3c+s+S-4z1d&K5l=nI?bZwE;3Sp6y8PW#LdNV8(UIbWz)*V%40ZE^U=XrNu z^zE%Ytcu?i)(=eT1F&=`Q14NL5A-Ox4aa zS()V|@WX(OGiUQ*9BrbqFbSSO{=jM>@Vb$lik|8E)X<97EI5z!gt8!YFxP4Gn%&*P6Gs@x(f=Sgz}#Wor^oR z@yajcf+hR;?qKNLS)D_|aH{lJ<0n<$k)im6yohJ`)IY`sYCz>dPG!$@S!B^#b1Grc z8X*S%xIA)f43A>qnjhBI>IlcbMM-}l<+c#NKj3DSFJXE0w}v-ia~#O~Z(Uut{s)oe z>OAJKrxupg84@zYGY@~&B!s(w>=0d(0_)!DzBlJ^JO`eMPZkiU z;UnOrAC=kZ|5w?U$3wmS|EIJsDkVfJlciLIWYevj9>zK(6gI}ZAZn~UEW9KqiNx$E#O9AFfJHD% z1FWxeiCWV_V#;HWK#GonIKsTCwk-}?4-xDYeMXT+o;w4T2Hq$rZad&)8Z`wEi$Bpr z0**I@0mobTFs$SoiWnGjNn3RNjv{q@_W1*1R7xH^mnS3PpG1X%Jgb2r`n@d;`zd78yglQ!GvP__CX+?mY2FB;~t-_xOBcsHb z9}?F9nUXM7AMXO7QZ)GdWbhB_*O}Io_b*seu9b-@bz_7?UDruWOhfRsI}VD(Z3%2{ z5WLNZ$`BYyAwY2LbndZ8EOnIN>n9?ptrd{QNS_xjKDm^*G{K-1IjpN$)2$Le^v&=Z zf{b@7aL!5%&=zIv((Q)iP3O)G*Z#0$2&3mU4smBT5Wky{BbFIn#ahG3;W4pfC#=Pjo>AeyfrlAa9LgQMME8LT&N06uD*@GgQt(c6w-Ga&;_{QJ^J*WihJsRKm zh51@k-MJ0njHUWpu}UzQ<`!gnHXidYD&N&|BY)s_YH~&kaO9ZIq=+~`5xMS4gy66u*^cL?Jp!Pu_(FE9xklJyB~aGT9#MWBvf3tB;5Na{9dd zffarz@j;vc*vLff=a-q4Q=}6Ml$2-z#H^%~>F;;eGs4fL(4aE(1RSH)5F|XjBKhH$ zY`T*skHoQ?yu;5 z;yQW~z)Yn-O!ibxd)g{U{kclgKn66g4_p3n+K6ygpb`XtEG-{RII2h!`@iq}eoDSH zn5d)Uq&pGR$vHVuE`S2>_@k14S)HH_??)$mgYW@LKDbqMxa?voi9?#^*@SONWpul| zZiEOUUvFRNRh?KI3Yl1qg%5bH(t%#teSi`jiHK9nQu0J|GG|g!dh0>)zaT)oVv9J; zy7a0IY+Z#MDE{G)C$7z7w+ZtJLr2Nq)X(zh(VsMHUW?x}6m|Tisw@raWHl5^GB9GV zChyt&}QLJNepjvM)2dVwKR|b};Jp!cG>+Lbc zex9Y4*W;sgi39zF{VjLOYitBEs^1k=$cfaQ3aL;HXT%V)Go5AfCfxzf9?_T;*B1Ay zak#yV`j-}Cej#r-7_hx>6TY*QS%9T`!-|Mtwf){zgK&#JI(RI1>JuKX zKx|rnTop91&QrAZUe(vCFom^`ec=MFV5D@(z?l<;$a6&3Yy^9wb^?6Bjx(*rYkxHm z%PvxR+&1MX(S`|YDW1y2e(HCPUwpqR2!#q&6|HlLX16RGPVE^xNgkt^C^obl!x*pA zh#X4~nB1u2q%U=2M@TY10B3TUcm#`xoilfP-=i?0JxKx`w++q0_WSeb-?e_(1uxQG z+>KztT)`UWzQ|XgUF@799+^6nR?NWXvtdg)@;#Nh0HwcB&7c?b5y$oNomClURcN(_ z7BpVpPl>opHc@W%lECh4f8X*g7Vdd%GP~!^%=c~~$QO3+4SB_i)cA?^T_cn~_DH_6 zcum~krToHHs6qP>`BiMo>ZPGO?IgUp(gqq;3GQZJkBi`|j1A(9;ie@#WEkD04t>vg z!ShihDyA308UH9>eqU0^yuVhARu&#}G$qH9=`zL25*Yva9c{Iu6>hP~zIjIsN?At_ zUjQVDDInMN)flY$5@Yj{T-9T)O{Dp)(7?)@rQ;v}y;;Nm?~Jog5pS@2YnaO%@$ufF zGczveL$sj8{9y)z8|veRSlqOG5yOmF*x4R|`Gmx=Rp$dG?R1??$W`Rggq)j?F~B9U ztuY@CKvAMUEifq5y)k~?rf8YBXc>}bRFNc#42!#r*H1iO`j4gh|S zckI^hF?E1tCr4AHcxHTgx)r-|iERN2mE+%^LRo^j*)4Ig+x#5+6aIJY$G_=QkQ z5Ohs2LRf$}(BrbB_LS|OSS^5ak1+VSG}Eh^+n>wi^%h+GJZl_!c4k^$wWfGjU+#hh zofL{DK#?)Jx>4r)9*TQ^d{?7dyImBzYsxhT$b>>YpG2tja3=z_Yt4!pDGXRd5}1)T z#x4r)U6wNkpD#Z6&%^_%qlAe_OaDh2pFkg=E1328=*fjXF33n5+GV=S(H-`Vw+D@j z$u)X9M_uv0$q)wwKIu9(voZ@zK4h5&cffxl958*y>@Bc3eh6WtLR#t5(Djig+GIhL zyDuYpZ>8mH%Onr&AvcS6-UjfIfro@_LXLIjay-0vLn7whn>T;*+*#oeYBGbeRzWwk zwytX|rSgwq(`sT_BKP>Vye=|OCrL2j_O#^U2b&uM6Rv2;H+W0Rv-{i1y@_Ry73)|v8~-{yBM6wRZx8gM1f{Cf732t_OUG6eX4H&} z!WtDNqh|A8)3RSl0El z)-0##(&Ek@FUaCl&mhyjR1uWcJ1+&-a3KhUdpRqD7in&UqW2+MiWr`=`7o!<^00!) zY?qU6Nn344W|#zKL6+<{-%GyYvdkG6xEZgwb(5uCI@`dT{Jh115vsmDBX3ZkW!)CP+PP>8` z&A6NKI8LRGRW>8pjihH}se||A-%!(l>y6JqWyFEsErsj&%KtX}O`93i!j5mFo#~v% zqVVIT7OPdwgi;$KruvuP7B52tz=xMkm((vRrJ9m1arvx-1zSl}W z^*&s}G&i&7pTzLC*FpVp7g_bW&o$~8&4lgz(@LOmmBhIjV&euPNpirAe%H9}IAD`K zWHv64L_o4__u%L~(BR2a!E0H`msY6QzU((*yftbAo_=fgGyU*RsQsv-(4|VJNEWB=2S)+TGFi*O{t~LL-H`#r5n_DIxRo}j z3(LhVZdFN1Vg$!*lF(%{0S9I!$gAlMqXPry?Px)05fq&mDSF<^Dn~ zMCUn$`$jJVlhRP-g^ii)@G(H~0t~SxfOgiu9zcL6E8x@I!4;-2$2U%8u?=TsTh~%) zS2w3S?k=0LU$6#MITB4RwHfM?XkEB=WdAU*N_`nf4y!l{ctwB6FPN{)#ORF zqVC2y_afH0K#$+o_Sm3xut;c1&bB~2+!!tgwBfPa2K@*=ik(xmxl?Z>1K4|YVr|d; z6LojaPg1FiWO3of+yzbfgZ>V~Tv&c5($`Ojl9BB!%i;DkJoLlV0hxN%q)1h50eq=c z!LNfF0*?E1l=@#C4&kMnK%AUXDIBD&a03OfH7-7@uov%sG?&;U z=8yE`Wt{J*G;w$_H+Ji-$Z*EZ!)v4_!BnQiNzFVNq$jKYqUh{)B~R8&}; z-@E1fUaD!2`nr8s+03-X$0WYOixhlfTrBXyq}Sa$Zd)$l4n9lLHPAqvg{PPw$b`CmZN)NIR=5(KM$wpH4Q08E+$~KyZgO%P zu_iTaai)oTdkDIO2k=)SP8R91T^1j$Jmeewg{mvFChscMBIi8*sUt44Il18s`vaib z254A3fF9kqlTyv%n4M&UuD8P_{p(zrJ~4YM%R)|ixA#}gO#Bz@0}A&AH?m<+?%2yK zi=98&##=!!Gj>~b(vaDxSZK=9wL2M2m$}M-6!5L~-=hh76oJZDdoWhLY43Fh8cG=p z#Gw`CD)cRu(ZrAt-$9~I`H`)N2{1Kou1t@EwBNR-K(6WBlk8Geaf@0{$8u1PZ zc(mWsmZ)?yr@5yZ3;l+VUW(*`NYJ! z7TN>i^fEwu3AlVboCAGi5v8BEP$EBkJUNXX0bBa^2cQvNXC~-A(lyB6!NlQIyNY5X z4o-h!X{I|nIF>5JNqh+$SS+4d)M z${v4t9W)ZpKr43U#K@=oUa#IWn+;VD962wS`z&$pV^%J0nslwNumvw~QODtEIE4AZFy1SFN%RY^nVMjeSz>e{sjC(N-DRzedk^s1GqmkJ z^s+vkP7(=?dSg^I+FTOl)(|FFIP~7VHm{*Nb4-yuYE|WLgl!N0erhqHa5f`|5yKCF zhEuir61rTHkPF&!5}!Kc66XXGY4zFPW~;0aS1ZeG*rYJo~jL8DC zBLLSb`O&_j2qUMB-?YB@3yDU1It42K{F@FYNjtYOia{kLMVNfVu<0=61h4rV0`rlZ zuArTKK5<@=`QoF1pvWJJM|V&~j=dIuIeM+^K3ZXS5#xkqas_`-=&wT2A^^i;dZr%zQaovIDWh zmKJWnLN0Z1F;W#w4EN5`Ff7Qk{*a+sQ9!O!t9FEMd1WermX z>AM@a6Zx&OskG+T{t;##$=|f!`U`!ldHhzfp+C?Bc$!=Kl%U(D_(_^9`vd2R#;CYQ z-vZy%sjwP+)l4RK{Ef{JCP}!|inpB~T~T2Zdp+a{=gMflY|J+QXCs-DRFfqcqBc|i z(^akO#{P*{RYo;-Kk3fpIrH7jUsaqK9qhZR8VMZWQqd#yw&HtZmm!rW?n5EDcf*cAxL>@oW>(3_AZoCx`!%?ohJfQ`2;HhFb3{i?`W(2>|9ha73IQfj zQTOp(3wXAf+}X>eECWidaaV}_+4uJf1|0!0#IpL4e%&)i3kw6TW9_{Zfx8Sp$8+X5 z*%2;oq}^~$gl^nquM%h|s|sVPgvpYm8r%m1=$2yso;josoSuH_(_og^m(W~cZs5Uz z6h}cXXw8vtkGY(V;2(i{v*lCV&)mHp{ViGbc5nHtBZGex{Cb|#5f^bf;?|vKP};q+ zWinIzFEN%31(W`?w#@1ue;*$_)RZlM$SYm@+(oARtw9Fjq`@mJAj%u!>&IVI8egTQ zL$$Vb`swo>5bkaR#5OK*tYX_%{u5cMnSK(NM{`cq_%Na1s zPa&?L-u&;Vzh1svzS&oilE001QQf3uva94@bBzET_Q)3R^ADv0h97XTDz+}9!7S}? z;9i6!Qo$RV>=JKEwLbI7-uF9xgmC4E4?eE`djrjwB9WA*cH12hUzq`B{Hb!~U+;?6 z{Y=}ex0bIyzF1}gxL$5^`3x2fRa{lMg$nHhA`4$_1Ozk%+WSq#{4=fRQCQFS3v|+9 zqKpK?dgjfP7iB2-mZyEk+!PVv7{_8udbfh|Y!!SvpPI1!hu(B3!)=X`S~PhER#>We?UXi=Y-ZkEpgkq zsg|ngata4zm?6@$w;pZ17b>9u#fSn3rN(@ijaz>RDh_Wr>8P*Z)u&pYJG%QjyB@=L zKF+l1CZU8-SD^hDf`2V{FLNFMf?`F*?#!ycvwBWigeRpID4=jF>btOnHVX^I5sAf( z3RO4TKcBNd%hnnK(i#C}3He+H*D~k0j5SAPm}6&77zTa0J`E~AcF>p1?p`$b?kOwy zh;Q`22c$0xAsPLF*dTc=7T7O?-e%nWk*ox4j_;}f?B-pxYT*;fTtJouzP&eXD!+0( zp<|S$I^LoRX)gP-U7oAgco>tjMTY)(?T!Pk3O1STV5o4&1ZZxE@b%+G!RYQszU3zkrG>ZsCRU)bXw`OKfnY{c%Dh6T{5gdh zHbE2o0KlstTCC7mJF2)BAOBTzL!st6VW?x=ivA`lN(IxHfqCu^nGLA2QXDyPc_5^4}PNJOsP$w3zm?lI3Y>GUJ z=b2pbNVal6HFI;Y`=50apd7%Nu!m_34ukxz;Lyex0kxj^&g0dK^wj9h^esOXUnR_* zXT*&R>Fy#pZ@Y;hqQ@($q?c^%Izs{4rRPNNU71Dl?0^EO5C;;>y$bLjt07?)NeTs{ zM2_K*1abSC?8*6wt;bU}2QCq6Ya{J}-XLS~jZcxS?}^vTvu9EwQ(AAGL|-#uL{xmd zBh`x(Byt?ERoFYyKL`JL_tha6}rEF>I~Ei-mpKg!AqDHPUzKjD!RF>btcZ}(@>&Q z^JkKjwij0XB`E;2@S|voVy8gsNX$WJer;QkF!77J5o*;4s#U9gsiWC%#5;}?crePX z$20Wx{B?#D+<=CMyqN6iRJv7wJrd_jW#SVQ3PBh(!iWjd>j56Bwl25mB<6&#+Wfht zXer_@U*oQ9np?_5Pwq2(!SNeYVYCuz93c&$lfGZ`;xelUA;ORiK+~!y-P$WZ9~U2d zK;i-Y^vxnkwykuX>Hw?^-v~a=M6to502mac+@ZExU)sgCY{DzZE-czb# z%E9%eUf_g?w>$A}gk{5ptoE@-a+`*(5~2?{Iri$dOksph$xbdJ19aO4shpiVn0P~R zCU7#u3ugsl0dd~T)VS~}n}gExY&2IUh)Eiwt=YVXe}q7_g~D?MA) zUdMSix!Jjs{nj?^$t1f4qjuyd%Bn(>(Tl{pWQNaq;mpdzqt;{}odF-R$!$g{;lyU; zdbOD(UIeiuLe(nMk7bK{R5+9FbNI!{DC^$un=js!A^#>*fxYGmcbTcP03QQdhhM7- zMFaTlJKglLKg&Hd$!p1;!n9h7NhqT;%tvRJO#MuLX9X%;+`IMEGxb@sII@WQb|1YN z!aBrWKqC@YUdN5c`tUFOp99GNz&RQUAWUqbS&+MKTILbzMTV*g#-eqbiBdgZh=9qn zUDVx%eD$60=O{)Aaa@rGyc&`;E;2og5lDatjxpJoLXTuLl1Cc}jp2N90X=0{*Yfnk zLM`tM?4;PuW*)>lD?$0h5k9a11+yu---y_Menm=${Lro2J1|h7Y3K8QzWx9889l`N tbBpjv>Noo5KhwY!&Hox4GH9CMFc1#2I`g({&Mf#x+^@4QWsmu#{|A}sS{48R diff --git a/docs/tutorial/_static/swap2cz.png b/docs/tutorial/_static/swap2cz.png deleted file mode 100644 index b95176c2e3191dfd4b508fe9b2e97f474027d458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164027 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 diff --git a/docs/tutorial/_static/terminal_icon.png b/docs/tutorial/_static/terminal_icon.png deleted file mode 100644 index 05c5d949c8bdea9416cf4d42132394c32c652654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68188 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 Gate: - return BlochSphereRotation(qubit=q, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2) -``` - -Notice the `@named_gate` decorator. -This _tells_ OpenSquirrel that the function defines a gate and that it should, -therefore, have all the nice properties OpenSquirrel expects of it. - -- The `ControlledGate` class is used to define a multiple qubit gate that comprises a controlled operation. -For instance, the `CNOT` gate is defined in the default gate set of OpenSquirrel as follows: - -```python -from opensquirrel.ir import Gate, ControlledGate, QubitLike, named_gate -from opensquirrel import X - -@named_gate -def cnot(control: QubitLike, target: QubitLike) -> Gate: - return ControlledGate(control, X(target)) -``` - -- The `MatrixGate` class may be used to define a gate in the generic form of a matrix: - -```python -from opensquirrel.ir import Gate, MatrixGate, QubitLike, named_gate - -@named_gate -def swap(q1: QubitLike, q2: QubitLike) -> Gate: - return MatrixGate( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - [q1, q2], - ) -``` - -!!! note - - User defined gates can only be used in when creating a circuit with the circuit builder. - [cQASM](https://qutech-delft.github.io/cQASM-spec) parsers will not recognize user defined gates, _i.e._, - they cannot be used when creating a circuit through a cQASM string. \ No newline at end of file diff --git a/docs/tutorial/applying-compilation-passes/index.md b/docs/tutorial/applying-compilation-passes/index.md deleted file mode 100644 index d22e4b1f..00000000 --- a/docs/tutorial/applying-compilation-passes/index.md +++ /dev/null @@ -1,36 +0,0 @@ -There are various ways in which the design of a circuit can be tailored to meet specific needs. - -1. [Merging Single Qubit Gates](../applying-compilation-passes/merging-single-qubit-gates.md) -2. [Custom Quantum Gates](../applying-compilation-passes/custom-gates.md) - -## Gate Decomposition - -OpenSquirrel can also _decompose_ the gates of a quantum circuit, given a specific decomposition. -The package offers several, so-called, decomposers out of the box, -but users can also make their own decomposer and apply them to the circuit. -Decompositions can be: - -1. [Predefined](../applying-compilation-passes/decomposition/predefined-decomposition.md) -2. [Inferred](../applying-compilation-passes/decomposition/inferred-decomposition.md) from the gate semantics. - -## Exporting a circuit - -As you have seen in the examples above, you can turn a circuit into a -[cQASM](https://qutech-delft.github.io/cQASM-spec) string -by simply using the `str` or `__repr__` methods. -We are aiming to support the possibility to export to other languages as well, -_e.g._, a OpenQASM 3.0 string, and frameworks, _e.g._, a Qiskit quantum circuit. - -## Compilation Passes - -OpenSquirrel has several ready to use, out of the box compilation passes, meant to perform necessary modifications to -the quantum circuit and facilitate its execution on a quantum computer. - -These compilation passes include the following: - -1. [Decomposition](../../compilation-passes/types-of-passes/decomposition/index.md) -2. [Exporting](../../compilation-passes/types-of-passes/exporting/index.md) -3. [Mapping](../../compilation-passes/types-of-passes/mapping/index.md) -4. [Merging](../../compilation-passes/types-of-passes/merging/index.md) -5. [Routing](../../compilation-passes/types-of-passes/routing/index.md) -6. [Validation](../../compilation-passes/types-of-passes/validation/index.md) diff --git a/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md b/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md deleted file mode 100644 index 43e529b2..00000000 --- a/docs/tutorial/applying-compilation-passes/merging-single-qubit-gates.md +++ /dev/null @@ -1,47 +0,0 @@ -All single-qubit gates appearing in a circuit can be merged by applying `merge(merger=SingleQubitGatesMerger())` to the circuit. -Note that multi-qubit gates remain untouched and single-qubit gates are not merged across any multi-qubit gates. -The gate that results from the merger of single-qubit gates will, in general, -comprise an arbitrary rotation and, therefore, not be a known gate. -In OpenSquirrel an unrecognized gate is deemed _anonymous_. -When a circuit contains anonymous gates and is written to a cQASM string, -the semantic representation of the anonymous gate is exported. - -!!! warning - - The semantic representation of an anonymous gate is not compliant - [cQASM](https://qutech-delft.github.io/cQASM-spec), meaning that - a cQASM parser, _e.g._ [libQASM](https://qutech-delft.github.io/libqasm/), - will not recognize it as a valid statement. - -```python -from opensquirrel.circuit_builder import CircuitBuilder -from opensquirrel.passes.merger import SingleQubitGatesMerger -from opensquirrel.ir import Float -import math - -builder = CircuitBuilder(1) -for _ in range(4): - builder.Rx(0, math.pi / 4) -qc = builder.to_circuit() - -qc.merge(merger=SingleQubitGatesMerger()) - -print(qc) -``` -_Output_: - - version 3.0 - - qubit[1] q - - BlochSphereRotation(qubit=Qubit[0], axis=[1. 0. 0.], angle=3.14159, phase=0.0) - -In the above example, OpenSquirrel has merged all the Rx gates together. -Yet, for now, OpenSquirrel does not recognize that this results in a single Rx -over the cumulated angle of the individual rotations. -Moreover, it does not recognize that the result corresponds to the X gate (up to a global phase difference). -At a later stage, we may want OpenSquirrel to recognize the resultant gate -in the case it is part of the set of known gates. - -The gate set is, however, not immutable. -In the following section, we demonstrate how new gates can be defined and added to the default gate set. diff --git a/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png b/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon.png deleted file mode 100644 index 2a1d295682f3d9e684b68a83cfd586c26d1939c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmV-L1iJf)P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1KLSMK~z{r?U_kv z6loO4Uwu{8)h0dBEXFM^M8-r>M{q$T9uz^H@t`Lc1VKD0!{AL2R1iGrLC`@DGl=4H z6E_5L0cV83faqi}YGM!*Of+FMYuD0MpYN-B#Dt`4>2xP`$nQ}7-utNP@893{UbR$H zTg@Q?Oe+I6Z7E1<2}OKxEUmp&K&##hTJ5i>LZwJJGN1p3^z$RYGXoUK zAB;W&k;_+tw&ZZ+&I^>vI!|~32rWRJxe>3D=j4EQfBp$AK+-D6$_*(wovi#4T0mTx z6fn_D3Ycgn1r!2x&d;FzcmVfanIhSVp8%EsZSilQ)f|MPHD^(SMh&AAI{|9dHeht< zDbv?Ma`{o$&PHef+~^`JH@MzOmOtw3Eo6D9bGEs8ST;fnusR;&HB#n14DbG6Dv--7aLkzfM*# zM)RfbBOs|MU@2TcOmQ2>8YSnUtNG5#knJB%Bh?%o;&N2JCf60@A)4w&yQljDz@N?09FTqg)e{{;O{ zcR}C7&CvT`W9a*$Vzoa4yXP%={&)gfZ{syMr!yMQ4?dV@`ayqjEdL{6r$K*xj+|gz z0d~(D$b990Mz()tI{<14&6y>(~&BR)2Md zyzmSwXv8awqV-onPE}K69N;$SZ!TcI^9Kc@F|45BwgKt-Ly_j-SP*Nf|JnYWJ1-a} zKp?itzGnw82l8!^gHmM~)1Pd5~7zw#- zC9vXoAQ#QW0CRUPNh!vu*N&azcsBIl+-?I0*OAlP3{JX`*)G60_yu4=P;#7I00000 LNkvXXu0mjf$?5&U diff --git a/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png b/docs/tutorial/circuit_modification/decomposition/_static/devcontainer_docker_icon_2.png deleted file mode 100644 index 917cd6dd1b1b2de1a939c6d465936114c57c04f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 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 None: def __repr__(self) -> str: """Write the circuit to a cQASM 3 string.""" - from opensquirrel import writer + from opensquirrel.writer import writer return writer.circuit_to_string(self) @@ -68,9 +68,9 @@ def from_string(cls, cqasm3_string: str) -> Circuit: Args: cqasm3_string: a cQASM 3 string """ - from opensquirrel.parser.libqasm.parser import Parser + from opensquirrel.reader import LibQasmParser - return Parser().circuit_from_string(cqasm3_string) + return LibQasmParser().circuit_from_string(cqasm3_string) @property def qubit_register_size(self) -> int: @@ -96,18 +96,6 @@ def asm_filter(self, backend_name: str) -> None: or (isinstance(statement, AsmDeclaration) and backend_name in str(statement.backend_name)) ] - def validate(self, validator: Validator) -> None: - """Generic validator pass. It applies the given validator to the circuit.""" - validator.validate(self.ir) - - def route(self, router: Router) -> None: - """Generic router pass. It applies the given router to the circuit.""" - router.route(self.ir) - - def merge(self, merger: Merger) -> None: - """Generic merge pass. It applies the given merger to the circuit.""" - merger.merge(self.ir, self.qubit_register_size) - def decompose(self, decomposer: Decomposer) -> None: """Generic decomposition pass. It applies the given decomposer function to every gate in the circuit. @@ -116,13 +104,34 @@ def decompose(self, decomposer: Decomposer) -> None: general_decomposer.decompose(self.ir, decomposer) + def export(self, fmt: ExportFormat | None = None) -> Any: + if fmt == ExportFormat.QUANTIFY_SCHEDULER: + from opensquirrel.passes.exporter import quantify_scheduler_exporter + + return quantify_scheduler_exporter.export(self) + if fmt == ExportFormat.CQASM_V1: + from opensquirrel.passes.exporter import cqasmv1_exporter + + return cqasmv1_exporter.export(self) + msg = "unknown exporter format" + raise ValueError(msg) + def map(self, mapper: Mapper) -> None: """Generic qubit mapper pass. Map the (virtual) qubits of the circuit to the physical qubits of the target hardware. """ from opensquirrel.passes.mapper.qubit_remapper import remap_ir - remap_ir(self, mapper.get_mapping()) + mapping = mapper.map(self.ir, self.qubit_register_size) + remap_ir(self, mapping) + + def merge(self, merger: Merger) -> None: + """Generic merge pass. It applies the given merger to the circuit.""" + merger.merge(self.ir, self.qubit_register_size) + + def route(self, router: Router) -> None: + """Generic router pass. It applies the given router to the circuit.""" + router.route(self.ir) def replace(self, gate: type[Gate], replacement_gates_function: Callable[..., list[Gate]]) -> None: """Manually replace occurrences of a given gate with a list of gates. @@ -133,14 +142,6 @@ def replace(self, gate: type[Gate], replacement_gates_function: Callable[..., li general_decomposer.replace(self.ir, gate, replacement_gates_function) - def export(self, fmt: ExportFormat | None = None) -> Any: - if fmt == ExportFormat.QUANTIFY_SCHEDULER: - from opensquirrel.passes.exporter import quantify_scheduler_exporter - - return quantify_scheduler_exporter.export(self) - if fmt == ExportFormat.CQASM_V1: - from opensquirrel.passes.exporter import cqasmv1_exporter - - return cqasmv1_exporter.export(self) - msg = "unknown exporter format" - raise ValueError(msg) + def validate(self, validator: Validator) -> None: + """Generic validator pass. It applies the given validator to the circuit.""" + validator.validate(self.ir) diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py index b05e083f..1cd550ce 100644 --- a/opensquirrel/circuit_builder.py +++ b/opensquirrel/circuit_builder.py @@ -88,9 +88,9 @@ def _add_statement(self, attr: str, *args: Any) -> Self: raise ValueError(msg) try: instruction = default_instruction_set[attr](*args) - except TypeError: - msg = f"trying to build '{attr}' with the wrong number or type of arguments: '{args}'" - raise TypeError(msg) from None + except TypeError as e: + msg = f"trying to build {attr!r} with the wrong number or type of arguments: {args!r}: {e}" + raise TypeError(msg) from e self._check_out_of_bounds_access(instruction) diff --git a/opensquirrel/circuit_matrix_calculator.py b/opensquirrel/circuit_matrix_calculator.py index f5188247..6311e2b8 100644 --- a/opensquirrel/circuit_matrix_calculator.py +++ b/opensquirrel/circuit_matrix_calculator.py @@ -5,25 +5,20 @@ import numpy as np from numpy.typing import NDArray -from opensquirrel.ir import ( - CNOT, - CR, - CZ, - SWAP, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - CRk, - Gate, - IRVisitor, - MatrixGate, -) +from opensquirrel.ir import Gate, IRVisitor from opensquirrel.utils import get_matrix if TYPE_CHECKING: + from opensquirrel import CNOT, CR, CZ, SWAP, CRk from opensquirrel.circuit import Circuit + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, + ) class _CircuitMatrixCalculator(IRVisitor): diff --git a/opensquirrel/common.py b/opensquirrel/common.py index b10a5984..58872c52 100644 --- a/opensquirrel/common.py +++ b/opensquirrel/common.py @@ -1,12 +1,17 @@ from __future__ import annotations -import math -from typing import SupportsFloat +from math import tau +from typing import TYPE_CHECKING, SupportsFloat import numpy as np from numpy.typing import NDArray +if TYPE_CHECKING: + from opensquirrel.ir.expression import Axis + + ATOL = 0.000_000_1 +REPR_DECIMALS = 5 def normalize_angle(x: SupportsFloat) -> float: @@ -19,11 +24,11 @@ def normalize_angle(x: SupportsFloat) -> float: The normalized angle. """ x = float(x) - t = x - 2 * math.pi * (x // (2 * math.pi) + 1) - if t < -math.pi + ATOL: - t += 2 * math.pi - elif t > math.pi: - t -= 2 * math.pi + t = x - tau * (x // tau + 1) + if t < -tau / 2 + ATOL: + t += tau + elif t > tau / 2: + t -= tau return t @@ -60,3 +65,16 @@ def is_identity_matrix_up_to_a_global_phase(matrix: NDArray[np.complex128]) -> b Whether matrix is an identity matrix up to a global phase. """ return are_matrices_equivalent_up_to_global_phase(matrix, np.eye(matrix.shape[0], dtype=np.complex128)) + + +def repr_round(value: float | Axis | NDArray[np.complex128], decimals: int = REPR_DECIMALS) -> str: + """ + Given a numerical value (of type `float`, `Axis`, or `NDArray[np.complex128]`): + - rounds it to `REPR_DECIMALS`, + - converts it to string, and + - removes the newlines. + + Returns: + A single-line string representation of a numerical value. + """ + return f"{np.round(value, decimals)}".replace("\n", "") diff --git a/opensquirrel/default_gate_modifiers.py b/opensquirrel/default_gate_modifiers.py index 8053c393..1a2ef38f 100644 --- a/opensquirrel/default_gate_modifiers.py +++ b/opensquirrel/default_gate_modifiers.py @@ -1,9 +1,13 @@ from __future__ import annotations from collections.abc import Callable -from typing import Any, SupportsFloat +from typing import TYPE_CHECKING, Any, SupportsFloat -from opensquirrel.ir import BlochSphereRotation, ControlledGate, QubitLike +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate +from opensquirrel.utils.context import temporary_class_attr + +if TYPE_CHECKING: + from opensquirrel.ir import QubitLike class GateModifier: @@ -15,9 +19,10 @@ def __init__(self, gate_generator: Callable[..., BlochSphereRotation]) -> None: self.gate_generator = gate_generator def __call__(self, *args: Any) -> BlochSphereRotation: - gate: BlochSphereRotation = self.gate_generator(*args) - modified_angle = gate.angle * -1 - modified_phase = gate.phase * -1 + with temporary_class_attr(BlochSphereRotation, attr="normalize_angle_params", value=False): + gate: BlochSphereRotation = self.gate_generator(*args) + modified_angle = gate.angle * -1 + modified_phase = gate.phase * -1 return BlochSphereRotation.try_match_replace_with_default( BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) ) @@ -29,9 +34,10 @@ def __init__(self, exponent: SupportsFloat, gate_generator: Callable[..., BlochS self.gate_generator = gate_generator def __call__(self, *args: Any) -> BlochSphereRotation: - gate: BlochSphereRotation = self.gate_generator(*args) - modified_angle = gate.angle * float(self.exponent) - modified_phase = gate.phase * float(self.exponent) + with temporary_class_attr(BlochSphereRotation, attr="normalize_angle_params", value=False): + gate: BlochSphereRotation = self.gate_generator(*args) + modified_angle = gate.angle * float(self.exponent) + modified_phase = gate.phase * float(self.exponent) return BlochSphereRotation.try_match_replace_with_default( BlochSphereRotation(qubit=gate.qubit, axis=gate.axis, angle=modified_angle, phase=modified_phase) ) diff --git a/opensquirrel/default_instructions.py b/opensquirrel/default_instructions.py index f7ca72f7..c9234a03 100644 --- a/opensquirrel/default_instructions.py +++ b/opensquirrel/default_instructions.py @@ -1,32 +1,27 @@ from __future__ import annotations from collections.abc import Mapping +from typing import TYPE_CHECKING from opensquirrel.ir import ( + Barrier, + Init, + Measure, + Reset, + Wait, +) +from opensquirrel.ir.default_gates import ( CNOT, CR, CZ, SWAP, X90, Y90, - Barrier, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, CRk, - Gate, H, I, - Init, - Instruction, - MatrixGate, - Measure, MinusX90, MinusY90, - NonUnitary, - Reset, Rn, Rx, Ry, @@ -35,13 +30,27 @@ SDagger, T, TDagger, - Unitary, - Wait, X, Y, Z, ) +if TYPE_CHECKING: + from opensquirrel.ir import ( + Gate, + Instruction, + NonUnitary, + Unitary, + ) + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, + ) + default_bsr_without_params_set: Mapping[str, type[BsrNoParams]] default_bsr_without_params_set = { "H": H, @@ -116,6 +125,9 @@ **default_non_unitary_set, } +default_bsr_set_without_rn: Mapping[str, type[BsrNoParams] | type[BsrAngleParam]] +default_bsr_set_without_rn = {**default_bsr_without_params_set, **default_bsr_with_angle_param_set} + def is_anonymous_gate(name: str) -> bool: return name not in default_gate_set diff --git a/opensquirrel/ir.py b/opensquirrel/ir.py deleted file mode 100644 index 525f89ef..00000000 --- a/opensquirrel/ir.py +++ /dev/null @@ -1,1055 +0,0 @@ -from __future__ import annotations - -import math -from abc import ABC, abstractmethod -from collections.abc import Iterable, Sequence -from dataclasses import dataclass -from typing import Any, Protocol, SupportsFloat, SupportsInt, Union, cast, overload, runtime_checkable - -import numpy as np -from numpy.typing import ArrayLike, DTypeLike, NDArray - -from opensquirrel.common import ATOL, are_matrices_equivalent_up_to_global_phase, normalize_angle - -REPR_DECIMALS = 5 - - -def repr_round(value: float | Axis | NDArray[np.complex128], decimals: int = REPR_DECIMALS) -> str: - """ - Given a numerical value (of type `float`, `Axis`, or `NDArray[np.complex128]`): - - rounds it to `REPR_DECIMALS`, - - converts it to string, and - - removes the newlines. - - Returns: - A single-line string representation of a numerical value. - """ - return f"{np.round(value, decimals)}".replace("\n", "") - - -class IRVisitor: - def visit_str(self, s: String) -> Any: - pass - - def visit_int(self, i: Int) -> Any: - pass - - def visit_float(self, f: Float) -> Any: - pass - - def visit_bit(self, bit: Bit) -> Any: - pass - - def visit_qubit(self, qubit: Qubit) -> Any: - pass - - def visit_axis(self, axis: Axis) -> Any: - pass - - def visit_statement(self, statement: Statement) -> Any: - pass - - def visit_asm_declaration(self, asm_declaration: AsmDeclaration) -> Any: - pass - - def visit_instruction(self, instruction: Instruction) -> Any: - pass - - def visit_unitary(self, unitary: Unitary) -> Any: - pass - - def visit_gate(self, gate: Gate) -> Any: - pass - - def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: - pass - - def visit_bsr_no_params(self, gate: BsrNoParams) -> Any: - pass - - def visit_bsr_full_params(self, gate: BsrFullParams) -> Any: - pass - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> Any: - pass - - def visit_matrix_gate(self, matrix_gate: MatrixGate) -> Any: - pass - - def visit_swap(self, gate: SWAP) -> Any: - pass - - def visit_controlled_gate(self, gate: ControlledGate) -> Any: - pass - - def visit_cnot(self, gate: CNOT) -> Any: - pass - - def visit_cz(self, gate: CZ) -> Any: - pass - - def visit_cr(self, gate: CR) -> Any: - pass - - def visit_crk(self, gate: CRk) -> Any: - pass - - def visit_non_unitary(self, gate: NonUnitary) -> Any: - pass - - def visit_measure(self, measure: Measure) -> Any: - pass - - def visit_init(self, init: Init) -> Any: - pass - - def visit_reset(self, reset: Reset) -> Any: - pass - - def visit_barrier(self, barrier: Barrier) -> Any: - pass - - def visit_wait(self, wait: Wait) -> Any: - pass - - -class IRNode(ABC): - @abstractmethod - def accept(self, visitor: IRVisitor) -> Any: - pass - - -class Expression(IRNode, ABC): - pass - - -@runtime_checkable -class SupportsStr(Protocol): - def __str__(self) -> str: ... - - -@dataclass(init=False) -class String(Expression): - """Strings used for intermediate representation of ``Statement`` arguments. - - Attributes: - value: value of the ``String`` object. - """ - - value: str - - def __init__(self, value: SupportsStr) -> None: - """Init of the ``String`` object. - - Args: - value: value of the ``String`` object. - """ - if isinstance(value, SupportsStr): - self.value = str(value) - return - - msg = "value must be a str" - raise TypeError(msg) - - def __str__(self) -> str: - """Cast the ``String`` object to a built-in Python ``str``. - - Returns: - Built-in Python ``str`` representation of the ``String``. - """ - return self.value - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_str(self) - - -@dataclass(init=False) -class Float(Expression): - """Floats used for intermediate representation of ``Statement`` arguments. - - Attributes: - value: value of the ``Float`` object. - """ - - value: float - - def __init__(self, value: SupportsFloat) -> None: - """Init of the ``Float`` object. - - Args: - value: value of the ``Float`` object. - """ - if isinstance(value, SupportsFloat): - self.value = float(value) - return - - msg = "value must be a float" - raise TypeError(msg) - - def __float__(self) -> float: - """Cast the ``Float`` object to a built-in Python ``float``. - - Returns: - Built-in Python ``float`` representation of the ``Float``. - """ - return self.value - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_float(self) - - -@dataclass(init=False) -class Int(Expression): - """Integers used for intermediate representation of ``Statement`` arguments. - - Attributes: - value: value of the ``Int`` object. - """ - - value: int - - def __init__(self, value: SupportsInt) -> None: - """Init of the ``Int`` object. - - Args: - value: value of the ``Int`` object. - """ - if isinstance(value, SupportsInt): - self.value = int(value) - return - - msg = "value must be an int" - raise TypeError(msg) - - def __int__(self) -> int: - """Cast the ``Int`` object to a built-in Python ``int``. - - Returns: - Built-in Python ``int`` representation of the ``Int``. - """ - return self.value - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_int(self) - - -@dataclass(init=False) -class Bit(Expression): - index: int - - def __init__(self, index: BitLike) -> None: - if isinstance(index, SupportsInt): - self.index = int(index) - elif isinstance(index, Bit): - self.index = index.index - else: - msg = "index must be a BitLike" - raise TypeError(msg) - - def __hash__(self) -> int: - return hash(str(self.__class__) + str(self.index)) - - def __repr__(self) -> str: - return f"Bit[{self.index}]" - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bit(self) - - -@dataclass(init=False) -class Qubit(Expression): - """``Qubit`` is used for intermediate representation of ``Statement`` arguments. - - Attributes: - index: index of the ``Qubit`` object. - """ - - index: int - - def __init__(self, index: QubitLike) -> None: - if isinstance(index, SupportsInt): - self.index = int(index) - elif isinstance(index, Qubit): - self.index = index.index - else: - msg = "index must be a QubitLike" - raise TypeError(msg) - - def __hash__(self) -> int: - return hash(str(self.__class__) + str(self.index)) - - def __repr__(self) -> str: - return f"Qubit[{self.index}]" - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_qubit(self) - - -class Axis(Sequence[np.float64], Expression): - """The ``Axis`` object parses and stores a vector containing 3 elements. - - The input vector is always normalized before it is stored. - """ - - _len = 3 - - def __init__(self, *axis: AxisLike) -> None: - """Init of the ``Axis`` object. - - axis: An ``AxisLike`` to create the axis from. - """ - axis_to_parse = axis[0] if len(axis) == 1 else cast("AxisLike", axis) - self._value = self.normalize(self.parse(axis_to_parse)) - - @property - def value(self) -> NDArray[np.float64]: - """The ``Axis`` data saved as a 1D-Array with 3 elements.""" - return self._value - - @value.setter - def value(self, axis: AxisLike) -> None: - """Parse and set a new axis. - - Args: - axis: An ``AxisLike`` to create the axis from. - """ - self._value = self.parse(axis) - self._value = self.normalize(self._value) - - @staticmethod - def parse(axis: AxisLike) -> NDArray[np.float64]: - """Parse and validate an ``AxisLike``. - - Check if the `axis` can be cast to a 1DArray of length 3, raise an error otherwise. - After casting to an array, the axis is normalized. - - Args: - axis: ``AxisLike`` to validate and parse. - - Returns: - Parsed axis represented as a 1DArray of length 3. - """ - if isinstance(axis, Axis): - return axis.value - - try: - axis = np.asarray(axis, dtype=float) - except (ValueError, TypeError) as e: - msg = "axis requires an ArrayLike" - raise TypeError(msg) from e - axis = axis.flatten() - if len(axis) != 3: - msg = f"axis requires an ArrayLike of length 3, but received an ArrayLike of length {len(axis)}" - raise ValueError(msg) - if np.all(axis == 0): - msg = "axis requires at least one element to be non-zero" - raise ValueError(msg) - return axis - - @staticmethod - def normalize(axis: NDArray[np.float64]) -> NDArray[np.float64]: - """Normalize a NDArray. - - Args: - axis: NDArray to normalize. - - Returns: - Normalized NDArray. - """ - return axis / np.linalg.norm(axis) - - @overload - def __getitem__(self, i: int, /) -> np.float64: ... - - @overload - def __getitem__(self, s: slice, /) -> list[np.float64]: ... - - def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: - """Get the item at `index`.""" - return cast("np.float64", self.value[index]) - - def __len__(self) -> int: - """Length of the axis, which is always 3.""" - return self._len - - def __repr__(self) -> str: - """String representation of the ``Axis``.""" - return f"Axis{self.value}" - - def __array__(self, dtype: DTypeLike = None, *, copy: bool = True) -> NDArray[Any]: - """Convert the ``Axis`` data to an array.""" - return np.array(self.value, dtype=dtype, copy=copy) - - def accept(self, visitor: IRVisitor) -> Any: - """Accept the ``Axis``.""" - return visitor.visit_axis(self) - - def __eq__(self, other: Any) -> bool: - """Check if `self` is equal to `other`. - - Two ``Axis`` objects are considered equal if their axes are equal. - """ - if not isinstance(other, Axis): - return False - return np.array_equal(self, other) - - -class Statement(IRNode, ABC): - pass - - -class AsmDeclaration(Statement): - """``AsmDeclaration`` is used to define an assembly declaration statement in the IR. - - Args: - backend_name: Name of the backend that is to process the provided backend code. - backend_code: (Assembly) code to be processed by the specified backend. - """ - - def __init__( - self, - backend_name: SupportsStr, - backend_code: SupportsStr, - ) -> None: - self.backend_name = String(backend_name) - self.backend_code = String(backend_code) - Statement.__init__(self) - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_statement(self) - return visitor.visit_asm_declaration(self) - - -class Instruction(Statement, ABC): - def __init__(self, name: str) -> None: - self.name = name - - @property - @abstractmethod - def arguments(self) -> tuple[Expression, ...]: - pass - - @abstractmethod - def get_qubit_operands(self) -> list[Qubit]: - pass - - @abstractmethod - def get_bit_operands(self) -> list[Bit]: - pass - - -class Unitary(Instruction, ABC): - def __init__(self, name: str) -> None: - Instruction.__init__(self, name) - - -class Gate(Unitary, ABC): - def __init__(self, name: str) -> None: - Unitary.__init__(self, name) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, Gate): - return False - return compare_gates(self, other) - - @property - @abstractmethod - def arguments(self) -> tuple[Expression, ...]: - pass - - @staticmethod - def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: - return len(qubits) != len(set(qubits)) - - @abstractmethod - def get_qubit_operands(self) -> list[Qubit]: - pass - - @abstractmethod - def get_bit_operands(self) -> list[Bit]: - pass - - @abstractmethod - def is_identity(self) -> bool: - pass - - -class BlochSphereRotation(Gate): - def __init__( - self, - qubit: QubitLike, - axis: AxisLike, - angle: SupportsFloat, - phase: SupportsFloat = 0, - name: str = "BlochSphereRotation", - ) -> None: - Gate.__init__(self, name) - self.qubit = Qubit(qubit) - self.axis = Axis(axis) - self.angle = normalize_angle(angle) - self.phase = normalize_angle(phase) - - def __repr__(self) -> str: - return ( - f"{self.name}(qubit={self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}, " - f"phase={repr_round(self.phase)})" - ) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, BlochSphereRotation): - return False - - if self.qubit != other.qubit: - return False - - if np.allclose(self.axis, other.axis, atol=ATOL): - return abs(self.angle - other.angle) < ATOL and abs(self.phase - other.phase) < ATOL - - if np.allclose(self.axis, -other.axis.value, atol=ATOL): - return abs(self.angle + other.angle) < ATOL and abs(self.phase + other.phase) < ATOL - - return False - - @property - def arguments(self) -> tuple[Expression, ...]: - return () - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bloch_sphere_rotation(self) - - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] - - def get_bit_operands(self) -> list[Bit]: - return [] - - def is_identity(self) -> bool: - # Angle and phase are already normalized. - return abs(self.angle) < ATOL and abs(self.phase) < ATOL - - @staticmethod - def try_match_replace_with_default(bsr: BlochSphereRotation) -> BlochSphereRotation: - """Try replacing a given BlochSphereRotation with a default BlochSphereRotation. - It does that by matching the input BlochSphereRotation to a default BlochSphereRotation. - - Returns: - A default BlockSphereRotation if this BlochSphereRotation is close to it, - or the input BlochSphereRotation otherwise. - """ - from opensquirrel.default_instructions import ( - default_bsr_with_angle_param_set, - default_bsr_without_params_set, - ) - - default_bsr_set_without_rn = {**default_bsr_without_params_set, **default_bsr_with_angle_param_set} - for gate_name in default_bsr_set_without_rn: - arguments: tuple[Any, ...] = (bsr.qubit,) - if gate_name in default_bsr_with_angle_param_set: - arguments += (Float(bsr.angle),) - gate = default_bsr_set_without_rn[gate_name](*arguments) - gate_bsr = BlochSphereRotation(gate.qubit, axis=gate.axis, angle=gate.angle, phase=gate.phase) - if bsr == gate_bsr: - return gate - nx, ny, nz = (Float(component) for component in bsr.axis) - return Rn(bsr.qubit, nx, ny, nz, Float(bsr.angle), Float(bsr.phase)) - - -class BsrNoParams(BlochSphereRotation): - def __init__( - self, - qubit: QubitLike, - axis: AxisLike, - angle: SupportsFloat, - phase: SupportsFloat = 0, - name: str = "BsrNoParams", - ) -> None: - BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) - - @property - def arguments(self) -> tuple[Expression, ...]: - return (self.qubit,) - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_no_params(self) - - -class I(BsrNoParams): # noqa: E742 - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=0, phase=0, name="I") - - -class H(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2, name="H") - - -class X(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="X") - - -class X90(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi / 2, phase=math.pi / 4, name="X90") - - -class MinusX90(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4, name="mX90") - - -class Y(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi, phase=math.pi / 2, name="Y") - - -class Y90(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=math.pi / 2, phase=math.pi / 4, name="Y90") - - -class MinusY90(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=-math.pi / 2, phase=-math.pi / 4, name="mY90") - - -class Z(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi, phase=math.pi / 2, name="Z") - - -class S(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 2, phase=math.pi / 4, name="S") - - -class SDagger(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 2, phase=-math.pi / 4, name="Sdag") - - -class T(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=math.pi / 4, phase=math.pi / 8, name="T") - - -class TDagger(BsrNoParams): - def __init__(self, qubit: QubitLike) -> None: - BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-math.pi / 4, phase=-math.pi / 8, name="Tdag") - - -class BsrFullParams(BlochSphereRotation): - def __init__( - self, - qubit: QubitLike, - axis: AxisLike, - angle: SupportsFloat, - phase: SupportsFloat, - name: str = "BsrFullParams", - ) -> None: - BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) - self.nx, self.ny, self.nz = (Float(component) for component in Axis(axis)) - self.theta = Float(angle) - self.phi = Float(phase) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.nx, self.ny, self.nz, self.theta, self.phi - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_full_params(self) - - -class Rn(BsrFullParams): - def __init__( - self, - qubit: QubitLike, - nx: SupportsFloat, - ny: SupportsFloat, - nz: SupportsFloat, - theta: SupportsFloat, - phi: SupportsFloat, - ) -> None: - axis: AxisLike = Axis(np.asarray([nx, ny, nz], dtype=np.float64)) - BsrFullParams.__init__(self, qubit=qubit, axis=axis, angle=theta, phase=phi, name="Rn") - - -class BsrAngleParam(BlochSphereRotation): - def __init__( - self, - qubit: QubitLike, - axis: AxisLike, - angle: SupportsFloat, - phase: SupportsFloat = 0, - name: str = "BsrNoParams", - ) -> None: - BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) - self.theta = Float(angle) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.theta - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_angle_param(self) - - -class Rx(BsrAngleParam): - def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: - BsrAngleParam.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=theta, phase=0, name="Rx") - - -class Ry(BsrAngleParam): - def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: - BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=theta, phase=0, name="Ry") - - -class Rz(BsrAngleParam): - def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: - BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=theta, phase=0, name="Rz") - - -class MatrixGate(Gate): - def __init__( - self, matrix: ArrayLike | list[list[int | DTypeLike]], operands: Iterable[QubitLike], name: str = "MatrixGate" - ) -> None: - Gate.__init__(self, name) - qubit_operands = [Qubit(operand) for operand in operands] - if len(qubit_operands) < 2: - msg = "for 1q gates, please use BlochSphereRotation" - raise ValueError(msg) - - if self._check_repeated_qubit_operands(qubit_operands): - msg = "operands cannot be the same" - raise ValueError(msg) - - matrix = np.asarray(matrix, dtype=np.complex128) - - expected_number_of_rows = 1 << len(qubit_operands) - expected_number_of_cols = expected_number_of_rows - if matrix.shape != (expected_number_of_rows, expected_number_of_cols): - msg = ( - f"incorrect matrix shape. " - f"Expected {(expected_number_of_rows, expected_number_of_cols)} but received {matrix.shape}" - ) - raise ValueError(msg) - - self.matrix = matrix - self.operands = qubit_operands - - @property - def arguments(self) -> tuple[Expression, ...]: - return () - - def __repr__(self) -> str: - return f"{self.name}(qubits={self.operands}, matrix={repr_round(self.matrix)})" - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_matrix_gate(self) - - def get_qubit_operands(self) -> list[Qubit]: - return self.operands - - def get_bit_operands(self) -> list[Bit]: - return [] - - def is_identity(self) -> bool: - return np.allclose(self.matrix, np.eye(2 ** len(self.operands)), atol=ATOL) - - -class SWAP(MatrixGate): - def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike) -> None: - MatrixGate.__init__( - self, - matrix=np.array( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ], - ), - operands=[qubit_0, qubit_1], - name="SWAP", - ) - self.qubit_0 = Qubit(qubit_0) - self.qubit_1 = Qubit(qubit_1) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit_0, self.qubit_1 - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_swap(self) - - -class ControlledGate(Gate): - def __init__(self, control_qubit: QubitLike, target_gate: Gate, name: str = "ControlledGate") -> None: - Gate.__init__(self, name) - self.control_qubit = Qubit(control_qubit) - self.target_gate = target_gate - - if self._check_repeated_qubit_operands([self.control_qubit, *target_gate.get_qubit_operands()]): - msg = "control and target qubit cannot be the same" - raise ValueError(msg) - - def __repr__(self) -> str: - return f"{self.name}(control_qubit={self.control_qubit}, target_gate={self.target_gate})" - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_controlled_gate(self) - - @property - def arguments(self) -> tuple[Expression, ...]: - return () - - def get_qubit_operands(self) -> list[Qubit]: - return [self.control_qubit, *self.target_gate.get_qubit_operands()] - - def get_bit_operands(self) -> list[Bit]: - return [] - - def is_identity(self) -> bool: - return self.target_gate.is_identity() - - -class CNOT(ControlledGate): - def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: - ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=X(target_qubit), name="CNOT") - self.control_qubit = Qubit(control_qubit) - self.target_qubit = Qubit(target_qubit) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.control_qubit, self.target_qubit - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cnot(self) - - -class CZ(ControlledGate): - def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: - ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=Z(target_qubit), name="CZ") - self.control_qubit = Qubit(control_qubit) - self.target_qubit = Qubit(target_qubit) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.control_qubit, self.target_qubit - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cz(self) - - -class CR(ControlledGate): - def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, theta: SupportsFloat) -> None: - ControlledGate.__init__( - self, - control_qubit=control_qubit, - target_gate=BlochSphereRotation(qubit=target_qubit, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), - name="CR", - ) - self.control_qubit = Qubit(control_qubit) - self.target_qubit = Qubit(target_qubit) - self.theta = Float(theta) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.control_qubit, self.target_qubit, self.theta - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cr(self) - - -class CRk(ControlledGate): - def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, k: SupportsInt) -> None: - theta = 2 * math.pi / (2 ** int(k)) - ControlledGate.__init__( - self, - control_qubit=control_qubit, - target_gate=BlochSphereRotation(qubit=target_qubit, axis=(0, 0, 1), angle=theta, phase=float(theta) / 2), - name="CRk", - ) - self.control_qubit = Qubit(control_qubit) - self.target_qubit = Qubit(target_qubit) - self.k = Int(k) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.control_qubit, self.target_qubit, self.k - - def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_crk(self) - - -class NonUnitary(Instruction, ABC): - def __init__(self, qubit: QubitLike, name: str) -> None: - Instruction.__init__(self, name) - self.qubit = Qubit(qubit) - - @property - @abstractmethod - def arguments(self) -> tuple[Expression, ...]: - pass - - def get_qubit_operands(self) -> list[Qubit]: - return [self.qubit] - - def get_bit_operands(self) -> list[Bit]: - return [] - - -class Measure(NonUnitary): - def __init__(self, qubit: QubitLike, bit: BitLike, axis: AxisLike = (0, 0, 1)) -> None: - NonUnitary.__init__(self, qubit=qubit, name="measure") - self.qubit = Qubit(qubit) - self.bit = Bit(bit) - self.axis = Axis(axis) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" - - def __eq__(self, other: object) -> bool: - return ( - isinstance(other, Measure) and self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) - ) - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.bit - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_measure(self) - - def get_bit_operands(self) -> list[Bit]: - return [self.bit] - - -class Init(NonUnitary): - def __init__(self, qubit: QubitLike) -> None: - NonUnitary.__init__(self, qubit=qubit, name="init") - self.qubit = Qubit(qubit) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(qubit={self.qubit})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Init) and self.qubit == other.qubit - - @property - def arguments(self) -> tuple[Expression, ...]: - return (self.qubit,) - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_init(self) - - -class Reset(NonUnitary): - def __init__(self, qubit: QubitLike) -> None: - NonUnitary.__init__(self, qubit=qubit, name="reset") - self.qubit = Qubit(qubit) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(qubit={self.qubit})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Reset) and self.qubit == other.qubit - - @property - def arguments(self) -> tuple[Expression, ...]: - return (self.qubit,) - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_reset(self) - - -class Barrier(NonUnitary): - def __init__(self, qubit: QubitLike) -> None: - NonUnitary.__init__(self, qubit=qubit, name="barrier") - self.qubit = Qubit(qubit) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(qubit={self.qubit})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Barrier) and self.qubit == other.qubit - - @property - def arguments(self) -> tuple[Expression, ...]: - return (self.qubit,) - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_barrier(self) - - -class Wait(NonUnitary): - def __init__(self, qubit: QubitLike, time: SupportsInt) -> None: - NonUnitary.__init__(self, qubit=qubit, name="wait") - self.qubit = Qubit(qubit) - self.time = Int(time) - - def __repr__(self) -> str: - return f"{self.name}(qubit={self.qubit}, time={self.time})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.time - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_wait(self) - - -def compare_gates(g1: Gate, g2: Gate) -> bool: - union_mapping = [q.index for q in list(set(g1.get_qubit_operands()) | set(g2.get_qubit_operands()))] - - from opensquirrel.circuit_matrix_calculator import get_circuit_matrix - from opensquirrel.reindexer import get_reindexed_circuit - - matrix_g1 = get_circuit_matrix(get_reindexed_circuit([g1], union_mapping)) - matrix_g2 = get_circuit_matrix(get_reindexed_circuit([g2], union_mapping)) - - return are_matrices_equivalent_up_to_global_phase(matrix_g1, matrix_g2) - - -class IR: - def __init__(self) -> None: - self.statements: list[Statement] = [] - - def add_asm_declaration(self, asm_declaration: AsmDeclaration) -> None: - self.statements.append(asm_declaration) - - def add_gate(self, gate: Gate) -> None: - self.statements.append(gate) - - def add_non_unitary(self, non_unitary: NonUnitary) -> None: - self.statements.append(non_unitary) - - def add_statement(self, statement: Statement) -> None: - self.statements.append(statement) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, IR): - return False - - return self.statements == other.statements - - def __repr__(self) -> str: - return f"IR: {self.statements}" - - def accept(self, visitor: IRVisitor) -> None: - for statement in self.statements: - statement.accept(visitor) - - -# Type Aliases -AxisLike = Union[ArrayLike, Axis] -BitLike = Union[SupportsInt, Bit] -QubitLike = Union[SupportsInt, Qubit] diff --git a/opensquirrel/ir/__init__.py b/opensquirrel/ir/__init__.py new file mode 100644 index 00000000..f94cd225 --- /dev/null +++ b/opensquirrel/ir/__init__.py @@ -0,0 +1,33 @@ +from opensquirrel.ir.expression import Axis, AxisLike, Bit, BitLike, Float, Int, Qubit, QubitLike, String, SupportsStr +from opensquirrel.ir.ir import IR, IRNode, IRVisitor +from opensquirrel.ir.non_unitary import Barrier, Init, Measure, NonUnitary, Reset, Wait +from opensquirrel.ir.statement import AsmDeclaration, Instruction, Statement +from opensquirrel.ir.unitary import Gate, Unitary, compare_gates + +__all__ = [ + "IR", + "AsmDeclaration", + "Axis", + "AxisLike", + "Barrier", + "Bit", + "BitLike", + "Float", + "Gate", + "IRNode", + "IRVisitor", + "Init", + "Instruction", + "Int", + "Measure", + "NonUnitary", + "Qubit", + "QubitLike", + "Reset", + "Statement", + "String", + "SupportsStr", + "Unitary", + "Wait", + "compare_gates", +] diff --git a/opensquirrel/ir/default_gates/__init__.py b/opensquirrel/ir/default_gates/__init__.py new file mode 100644 index 00000000..c79cf4ac --- /dev/null +++ b/opensquirrel/ir/default_gates/__init__.py @@ -0,0 +1,45 @@ +from opensquirrel.ir.default_gates.single_qubit_gates import ( + X90, + Y90, + H, + I, + MinusX90, + MinusY90, + Rn, + Rx, + Ry, + Rz, + S, + SDagger, + T, + TDagger, + X, + Y, + Z, +) +from opensquirrel.ir.default_gates.two_qubit_gates import CNOT, CR, CZ, SWAP, CRk + +__all__ = [ + "CNOT", + "CR", + "CZ", + "SWAP", + "X90", + "Y90", + "CRk", + "H", + "I", + "MinusX90", + "MinusY90", + "Rn", + "Rx", + "Ry", + "Rz", + "S", + "SDagger", + "T", + "TDagger", + "X", + "Y", + "Z", +] diff --git a/opensquirrel/ir/default_gates/single_qubit_gates.py b/opensquirrel/ir/default_gates/single_qubit_gates.py new file mode 100644 index 00000000..4de5f2ee --- /dev/null +++ b/opensquirrel/ir/default_gates/single_qubit_gates.py @@ -0,0 +1,101 @@ +from math import pi +from typing import SupportsFloat + +import numpy as np + +from opensquirrel.ir import Axis, AxisLike, QubitLike +from opensquirrel.ir.semantics import BsrAngleParam, BsrFullParams, BsrNoParams + + +class Rn(BsrFullParams): + def __init__( + self, + qubit: QubitLike, + nx: SupportsFloat, + ny: SupportsFloat, + nz: SupportsFloat, + theta: SupportsFloat, + phi: SupportsFloat, + ) -> None: + axis: AxisLike = Axis(np.asarray([nx, ny, nz], dtype=np.float64)) + BsrFullParams.__init__(self, qubit=qubit, axis=axis, angle=theta, phase=phi, name="Rn") + + +class Rx(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=theta, phase=0.0, name="Rx") + + +class Ry(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=theta, phase=0.0, name="Ry") + + +class Rz(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=theta, phase=0.0, name="Rz") + + +class I(BsrNoParams): # noqa: E742 + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=0, phase=0, name="I") + + +class H(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 1), angle=pi, phase=pi / 2, name="H") + + +class X(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=pi, phase=pi / 2, name="X") + + +class X90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=pi / 2, phase=pi / 4, name="X90") + + +class MinusX90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=-pi / 2, phase=-pi / 4, name="mX90") + + +class Y(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=pi, phase=pi / 2, name="Y") + + +class Y90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=pi / 2, phase=pi / 4, name="Y90") + + +class MinusY90(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 1, 0), angle=-pi / 2, phase=-pi / 4, name="mY90") + + +class Z(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=pi, phase=pi / 2, name="Z") + + +class S(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=pi / 2, phase=pi / 4, name="S") + + +class SDagger(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-pi / 2, phase=-pi / 4, name="Sdag") + + +class T(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=pi / 4, phase=pi / 8, name="T") + + +class TDagger(BsrNoParams): + def __init__(self, qubit: QubitLike) -> None: + BsrNoParams.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=-pi / 4, phase=-pi / 8, name="Tdag") diff --git a/opensquirrel/ir/default_gates/two_qubit_gates.py b/opensquirrel/ir/default_gates/two_qubit_gates.py new file mode 100644 index 00000000..f4a599eb --- /dev/null +++ b/opensquirrel/ir/default_gates/two_qubit_gates.py @@ -0,0 +1,97 @@ +import warnings +from math import pi +from typing import Any, SupportsFloat, SupportsInt + +import numpy as np + +from opensquirrel.common import normalize_angle +from opensquirrel.ir.default_gates import X, Z +from opensquirrel.ir.expression import Expression, Float, Int, Qubit, QubitLike +from opensquirrel.ir.ir import IRVisitor +from opensquirrel.ir.semantics.bsr import BsrAngleParam +from opensquirrel.ir.semantics.controlled_gate import ControlledGate +from opensquirrel.ir.semantics.matrix_gate import MatrixGate + + +# The R gate is only defined for the purpose of defining the CR and CRk gates and does not appear as a separate gate in +# the default instruction set. +class R(BsrAngleParam): + def __init__(self, qubit: QubitLike, theta: SupportsFloat) -> None: + phase = float(theta) / 2 + BsrAngleParam.__init__(self, qubit=qubit, axis=(0, 0, 1), angle=theta, phase=phase, name="R") + + +class SWAP(MatrixGate): + def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike) -> None: + MatrixGate.__init__( + self, + matrix=np.array( + [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ], + ), + operands=[qubit_0, qubit_1], + name="SWAP", + ) + self.qubit_0 = Qubit(qubit_0) + self.qubit_1 = Qubit(qubit_1) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit_0, self.qubit_1 + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit_0, self.qubit_1] + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_swap(self) + + +class CNOT(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=X(target_qubit), name="CNOT") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cnot(self) + + +class CZ(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=Z(target_qubit), name="CZ") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cz(self) + + +class CR(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, theta: SupportsFloat) -> None: + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=R(target_qubit, theta), name="CR") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + self.theta = Float(normalize_angle(theta)) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_cr(self) + + +class CRk(ControlledGate): + def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, k: SupportsInt) -> None: + if not isinstance(k, (int, Int)): + warnings.warn( + f"value of parameter 'k' is not an integer: got {type(k)!r} instead.", UserWarning, stacklevel=2 + ) + theta = normalize_angle(2 * pi / (2 ** int(k))) + ControlledGate.__init__(self, control_qubit=control_qubit, target_gate=R(target_qubit, theta), name="CRk") + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_qubit) + self.k = Int(k) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_crk(self) diff --git a/opensquirrel/ir/expression.py b/opensquirrel/ir/expression.py new file mode 100644 index 00000000..85d39b6e --- /dev/null +++ b/opensquirrel/ir/expression.py @@ -0,0 +1,292 @@ +from __future__ import annotations + +from abc import ABC +from collections.abc import Sequence +from dataclasses import dataclass +from typing import Any, Protocol, SupportsFloat, SupportsInt, Union, cast, overload, runtime_checkable + +import numpy as np +from numpy.typing import ArrayLike, DTypeLike, NDArray + +from opensquirrel.ir.ir import IRNode, IRVisitor + + +class Expression(IRNode, ABC): + pass + + +@runtime_checkable +class SupportsStr(Protocol): + def __str__(self) -> str: ... + + +@dataclass(init=False) +class String(Expression): + """Strings used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``String`` object. + """ + + value: str + + def __init__(self, value: SupportsStr) -> None: + """Init of the ``String`` object. + + Args: + value: value of the ``String`` object. + """ + if isinstance(value, SupportsStr): + self.value = str(value) + return + + msg = "value must be a str" + raise TypeError(msg) + + def __str__(self) -> str: + """Cast the ``String`` object to a built-in Python ``str``. + + Returns: + Built-in Python ``str`` representation of the ``String``. + """ + return self.value + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_str(self) + + +@dataclass(init=False) +class Float(Expression): + """Floats used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``Float`` object. + """ + + value: float + + def __init__(self, value: SupportsFloat) -> None: + """Init of the ``Float`` object. + + Args: + value: value of the ``Float`` object. + """ + if isinstance(value, SupportsFloat): + self.value = float(value) + return + + msg = "value must be a float" + raise TypeError(msg) + + def __float__(self) -> float: + """Cast the ``Float`` object to a built-in Python ``float``. + + Returns: + Built-in Python ``float`` representation of the ``Float``. + """ + return self.value + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_float(self) + + +@dataclass(init=False) +class Int(Expression): + """Integers used for intermediate representation of ``Statement`` arguments. + + Attributes: + value: value of the ``Int`` object. + """ + + value: int + + def __init__(self, value: SupportsInt) -> None: + """Init of the ``Int`` object. + + Args: + value: value of the ``Int`` object. + """ + if isinstance(value, SupportsInt): + self.value = int(value) + return + + msg = "value must be an int" + raise TypeError(msg) + + def __int__(self) -> int: + """Cast the ``Int`` object to a built-in Python ``int``. + + Returns: + Built-in Python ``int`` representation of the ``Int``. + """ + return self.value + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_int(self) + + +@dataclass(init=False) +class Bit(Expression): + index: int + + def __init__(self, index: BitLike) -> None: + if isinstance(index, SupportsInt): + self.index = int(index) + elif isinstance(index, Bit): + self.index = index.index + else: + msg = "index must be a BitLike" + raise TypeError(msg) + + def __hash__(self) -> int: + return hash(str(self.__class__) + str(self.index)) + + def __repr__(self) -> str: + return f"Bit[{self.index}]" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bit(self) + + +@dataclass(init=False) +class Qubit(Expression): + """``Qubit`` is used for intermediate representation of ``Statement`` arguments. + + Attributes: + index: index of the ``Qubit`` object. + """ + + index: int + + def __init__(self, index: QubitLike) -> None: + if isinstance(index, SupportsInt): + self.index = int(index) + elif isinstance(index, Qubit): + self.index = index.index + else: + msg = "index must be a QubitLike" + raise TypeError(msg) + + def __hash__(self) -> int: + return hash(str(self.__class__) + str(self.index)) + + def __repr__(self) -> str: + return f"Qubit[{self.index}]" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_qubit(self) + + +class Axis(Sequence[np.float64], Expression): + """The ``Axis`` object parses and stores a vector containing 3 elements. + + The input vector is always normalized before it is stored. + """ + + _len = 3 + + def __init__(self, *axis: AxisLike) -> None: + """Init of the ``Axis`` object. + + axis: An ``AxisLike`` to create the axis from. + """ + axis_to_parse = axis[0] if len(axis) == 1 else cast("AxisLike", axis) + self._value = self.normalize(self.parse(axis_to_parse)) + + @property + def value(self) -> NDArray[np.float64]: + """The ``Axis`` data saved as a 1D-Array with 3 elements.""" + return self._value + + @value.setter + def value(self, axis: AxisLike) -> None: + """Parse and set a new axis. + + Args: + axis: An ``AxisLike`` to create the axis from. + """ + self._value = self.parse(axis) + self._value = self.normalize(self._value) + + @staticmethod + def parse(axis: AxisLike) -> NDArray[np.float64]: + """Parse and validate an ``AxisLike``. + + Check if the `axis` can be cast to a 1DArray of length 3, raise an error otherwise. + After casting to an array, the axis is normalized. + + Args: + axis: ``AxisLike`` to validate and parse. + + Returns: + Parsed axis represented as a 1DArray of length 3. + """ + if isinstance(axis, Axis): + return axis.value + + try: + axis = np.asarray(axis, dtype=float) + except (ValueError, TypeError) as e: + msg = "axis requires an ArrayLike" + raise TypeError(msg) from e + axis = axis.flatten() + if len(axis) != 3: + msg = f"axis requires an ArrayLike of length 3, but received an ArrayLike of length {len(axis)}" + raise ValueError(msg) + if np.all(axis == 0): + msg = "axis requires at least one element to be non-zero" + raise ValueError(msg) + return axis + + @staticmethod + def normalize(axis: NDArray[np.float64]) -> NDArray[np.float64]: + """Normalize a NDArray. + + Args: + axis: NDArray to normalize. + + Returns: + Normalized NDArray. + """ + return axis / np.linalg.norm(axis) + + @overload + def __getitem__(self, i: int, /) -> np.float64: ... + + @overload + def __getitem__(self, s: slice, /) -> list[np.float64]: ... + + def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: + """Get the item at `index`.""" + return cast("np.float64", self.value[index]) + + def __len__(self) -> int: + """Length of the axis, which is always 3.""" + return self._len + + def __repr__(self) -> str: + """String representation of the ``Axis``.""" + return f"Axis{self.value}" + + def __array__(self, dtype: DTypeLike = None, *, copy: bool | None = None) -> NDArray[Any]: + """Convert the ``Axis`` data to an array.""" + return np.array(self.value, dtype=dtype, copy=copy) + + def accept(self, visitor: IRVisitor) -> Any: + """Accept the ``Axis``.""" + return visitor.visit_axis(self) + + def __eq__(self, other: Any) -> bool: + """Check if `self` is equal to `other`. + + Two ``Axis`` objects are considered equal if their axes are equal. + """ + if not isinstance(other, Axis): + return False + return np.array_equal(self, other) + + +# Type Aliases +BitLike = Union[SupportsInt, Bit] +QubitLike = Union[SupportsInt, Qubit] +AxisLike = Union[ArrayLike, Axis] diff --git a/opensquirrel/ir/ir.py b/opensquirrel/ir/ir.py new file mode 100644 index 00000000..cd144f7a --- /dev/null +++ b/opensquirrel/ir/ir.py @@ -0,0 +1,155 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from opensquirrel.ir import ( + AsmDeclaration, + Axis, + Barrier, + Bit, + Float, + Gate, + Init, + Int, + Measure, + Qubit, + Reset, + String, + Unitary, + Wait, + ) + from opensquirrel.ir.default_gates import CNOT, CR, CZ, SWAP, CRk + from opensquirrel.ir.non_unitary import NonUnitary + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, + ) + from opensquirrel.ir.statement import Instruction, Statement + + +class IRVisitor: + def visit_str(self, s: String) -> Any: + pass + + def visit_int(self, i: Int) -> Any: + pass + + def visit_float(self, f: Float) -> Any: + pass + + def visit_bit(self, bit: Bit) -> Any: + pass + + def visit_qubit(self, qubit: Qubit) -> Any: + pass + + def visit_axis(self, axis: Axis) -> Any: + pass + + def visit_statement(self, statement: Statement) -> Any: + pass + + def visit_asm_declaration(self, asm_declaration: AsmDeclaration) -> Any: + pass + + def visit_instruction(self, instruction: Instruction) -> Any: + pass + + def visit_unitary(self, unitary: Unitary) -> Any: + pass + + def visit_gate(self, gate: Gate) -> Any: + pass + + def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation) -> Any: + pass + + def visit_bsr_no_params(self, gate: BsrNoParams) -> Any: + pass + + def visit_bsr_full_params(self, gate: BsrFullParams) -> Any: + pass + + def visit_bsr_angle_param(self, gate: BsrAngleParam) -> Any: + pass + + def visit_matrix_gate(self, matrix_gate: MatrixGate) -> Any: + pass + + def visit_swap(self, gate: SWAP) -> Any: + pass + + def visit_controlled_gate(self, gate: ControlledGate) -> Any: + pass + + def visit_cnot(self, gate: CNOT) -> Any: + pass + + def visit_cz(self, gate: CZ) -> Any: + pass + + def visit_cr(self, gate: CR) -> Any: + pass + + def visit_crk(self, gate: CRk) -> Any: + pass + + def visit_non_unitary(self, gate: NonUnitary) -> Any: + pass + + def visit_measure(self, measure: Measure) -> Any: + pass + + def visit_init(self, init: Init) -> Any: + pass + + def visit_reset(self, reset: Reset) -> Any: + pass + + def visit_barrier(self, barrier: Barrier) -> Any: + pass + + def visit_wait(self, wait: Wait) -> Any: + pass + + +class IRNode(ABC): + @abstractmethod + def accept(self, visitor: IRVisitor) -> Any: + pass + + +class IR: + def __init__(self) -> None: + self.statements: list[Statement] = [] + + def __eq__(self, other: object) -> bool: + if not isinstance(other, IR): + return False + + return self.statements == other.statements + + def __repr__(self) -> str: + return f"IR: {self.statements}" + + def add_asm_declaration(self, asm_declaration: AsmDeclaration) -> None: + self.statements.append(asm_declaration) + + def add_gate(self, gate: Gate) -> None: + self.statements.append(gate) + + def add_non_unitary(self, non_unitary: NonUnitary) -> None: + self.statements.append(non_unitary) + + def add_statement(self, statement: Statement) -> None: + self.statements.append(statement) + + def accept(self, visitor: IRVisitor) -> None: + for statement in self.statements: + statement.accept(visitor) diff --git a/opensquirrel/ir/non_unitary.py b/opensquirrel/ir/non_unitary.py new file mode 100644 index 00000000..a68a1028 --- /dev/null +++ b/opensquirrel/ir/non_unitary.py @@ -0,0 +1,134 @@ +from abc import ABC, abstractmethod +from typing import Any, SupportsInt + +import numpy as np + +from opensquirrel.common import ATOL +from opensquirrel.ir.expression import Axis, AxisLike, Bit, BitLike, Expression, Int, Qubit, QubitLike +from opensquirrel.ir.ir import IRVisitor +from opensquirrel.ir.statement import Instruction + + +class NonUnitary(Instruction, ABC): + def __init__(self, qubit: QubitLike, name: str) -> None: + Instruction.__init__(self, name) + self.qubit = Qubit(qubit) + + @property + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + def get_bit_operands(self) -> list[Bit]: + return [] + + +class Measure(NonUnitary): + def __init__(self, qubit: QubitLike, bit: BitLike, axis: AxisLike = (0, 0, 1)) -> None: + NonUnitary.__init__(self, qubit=qubit, name="measure") + self.qubit = Qubit(qubit) + self.bit = Bit(bit) + self.axis = Axis(axis) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit}, bit={self.bit}, axis={self.axis})" + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, Measure) and self.qubit == other.qubit and np.allclose(self.axis, other.axis, atol=ATOL) + ) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.bit + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_measure(self) + + def get_bit_operands(self) -> list[Bit]: + return [self.bit] + + +class Init(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="init") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Init) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_init(self) + + +class Reset(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="reset") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Reset) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_reset(self) + + +class Barrier(NonUnitary): + def __init__(self, qubit: QubitLike) -> None: + NonUnitary.__init__(self, qubit=qubit, name="barrier") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Barrier) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_barrier(self) + + +class Wait(NonUnitary): + def __init__(self, qubit: QubitLike, time: SupportsInt) -> None: + NonUnitary.__init__(self, qubit=qubit, name="wait") + self.qubit = Qubit(qubit) + self.time = Int(time) + + def __repr__(self) -> str: + return f"{self.name}(qubit={self.qubit}, time={self.time})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.time + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_non_unitary(self) + return visitor.visit_wait(self) diff --git a/opensquirrel/ir/semantics/__init__.py b/opensquirrel/ir/semantics/__init__.py new file mode 100644 index 00000000..26690e10 --- /dev/null +++ b/opensquirrel/ir/semantics/__init__.py @@ -0,0 +1,12 @@ +from opensquirrel.ir.semantics.bsr import BlochSphereRotation, BsrAngleParam, BsrFullParams, BsrNoParams +from opensquirrel.ir.semantics.controlled_gate import ControlledGate +from opensquirrel.ir.semantics.matrix_gate import MatrixGate + +__all__ = [ + "BlochSphereRotation", + "BsrAngleParam", + "BsrFullParams", + "BsrNoParams", + "ControlledGate", + "MatrixGate", +] diff --git a/opensquirrel/ir/semantics/bsr.py b/opensquirrel/ir/semantics/bsr.py new file mode 100644 index 00000000..24cabac0 --- /dev/null +++ b/opensquirrel/ir/semantics/bsr.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, SupportsFloat + +import numpy as np + +from opensquirrel.common import ATOL, normalize_angle, repr_round +from opensquirrel.ir import Axis, AxisLike, Bit, Float, Gate, Qubit, QubitLike + +if TYPE_CHECKING: + from opensquirrel.ir import IRVisitor + from opensquirrel.ir.expression import Expression + + +class BlochSphereRotation(Gate): + normalize_angle_params: bool = True + + def __init__( + self, + qubit: QubitLike, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat, + name: str = "BlochSphereRotation", + ) -> None: + Gate.__init__(self, name) + self.qubit = Qubit(qubit) + self.axis = Axis(axis) + self.angle = normalize_angle(angle) if self.normalize_angle_params else float(angle) + self.phase = normalize_angle(phase) if self.normalize_angle_params else float(phase) + + @staticmethod + def try_match_replace_with_default(bsr: BlochSphereRotation) -> BlochSphereRotation: + """Try replacing a given BlochSphereRotation with a default BlochSphereRotation. + It does that by matching the input BlochSphereRotation to a default BlochSphereRotation. + + Returns: + A default BlockSphereRotation if this BlochSphereRotation is close to it, + or the input BlochSphereRotation otherwise. + """ + from opensquirrel.default_instructions import ( + default_bsr_set_without_rn, + default_bsr_with_angle_param_set, + ) + from opensquirrel.ir.default_gates import Rn + + for gate_name in default_bsr_set_without_rn: + arguments: tuple[Any, ...] = (bsr.qubit,) + if gate_name in default_bsr_with_angle_param_set: + arguments += (Float(bsr.angle),) + gate = default_bsr_set_without_rn[gate_name](*arguments) + gate_bsr = BlochSphereRotation(gate.qubit, axis=gate.axis, angle=gate.angle, phase=gate.phase) + if bsr == gate_bsr: + return gate + nx, ny, nz = (Float(component) for component in bsr.axis) + return Rn(bsr.qubit, nx, ny, nz, Float(bsr.angle), Float(bsr.phase)) + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bloch_sphere_rotation(self) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + def get_bit_operands(self) -> list[Bit]: + return [] + + def is_identity(self) -> bool: + # Angle and phase are already normalized. + return abs(self.angle) < ATOL and abs(self.phase) < ATOL + + def __repr__(self) -> str: + return ( + f"{self.name}(qubit={self.qubit}, axis={repr_round(self.axis)}, angle={repr_round(self.angle)}, " + f"phase={repr_round(self.phase)})" + ) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, BlochSphereRotation): + return False + + if self.qubit != other.qubit: + return False + + if np.allclose(self.axis.value, other.axis.value, atol=ATOL): + return abs(self.angle - other.angle) < ATOL and abs(self.phase - other.phase) < ATOL + + if np.allclose(self.axis.value, -other.axis.value, atol=ATOL): + return abs(self.angle + other.angle) < ATOL and abs(self.phase + other.phase) < ATOL + + return False + + +class BsrNoParams(BlochSphereRotation): + def __init__( + self, + qubit: QubitLike, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat, + name: str = "BsrNoParams", + ) -> None: + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bsr_no_params(self) + + +class BsrFullParams(BlochSphereRotation): + def __init__( + self, qubit: QubitLike, axis: AxisLike, angle: SupportsFloat, phase: SupportsFloat, name: str = "BsrFullParams" + ) -> None: + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) + self.nx, self.ny, self.nz = (Float(component) for component in Axis(axis)) + self.theta = Float(self.angle) + self.phi = Float(self.phase) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.nx, self.ny, self.nz, self.theta, self.phi + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bsr_full_params(self) + + +class BsrAngleParam(BlochSphereRotation): + def __init__( + self, + qubit: QubitLike, + axis: AxisLike, + angle: SupportsFloat, + phase: SupportsFloat, + name: str = "BsrNoParams", + ) -> None: + BlochSphereRotation.__init__(self, qubit, axis, angle, phase, name) + self.theta = Float(self.angle) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.theta + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_bsr_angle_param(self) diff --git a/opensquirrel/ir/semantics/controlled_gate.py b/opensquirrel/ir/semantics/controlled_gate.py new file mode 100644 index 00000000..dc97e9fd --- /dev/null +++ b/opensquirrel/ir/semantics/controlled_gate.py @@ -0,0 +1,38 @@ +from typing import Any + +from opensquirrel.ir import Bit, Gate, IRVisitor, Qubit, QubitLike +from opensquirrel.ir.expression import Expression +from opensquirrel.ir.semantics import BlochSphereRotation + + +class ControlledGate(Gate): + def __init__( + self, control_qubit: QubitLike, target_gate: BlochSphereRotation, name: str = "ControlledGate" + ) -> None: + Gate.__init__(self, name) + self.control_qubit = Qubit(control_qubit) + self.target_qubit = Qubit(target_gate.qubit) + self.target_gate = target_gate + + if self._check_repeated_qubit_operands([self.control_qubit, self.target_qubit]): + msg = "control and target qubit cannot be the same" + raise ValueError(msg) + + def __repr__(self) -> str: + return f"{self.name}(control_qubit={self.control_qubit}, target_gate={self.target_gate})" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_controlled_gate(self) + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.control_qubit, *self.target_gate.arguments + + def get_qubit_operands(self) -> list[Qubit]: + return [self.control_qubit, self.target_qubit] + + def get_bit_operands(self) -> list[Bit]: + return [] + + def is_identity(self) -> bool: + return self.target_gate.is_identity() diff --git a/opensquirrel/ir/semantics/matrix_gate.py b/opensquirrel/ir/semantics/matrix_gate.py new file mode 100644 index 00000000..f2929ce9 --- /dev/null +++ b/opensquirrel/ir/semantics/matrix_gate.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any + +import numpy as np +from numpy.typing import ArrayLike, DTypeLike + +from opensquirrel.common import ATOL, repr_round +from opensquirrel.ir import Bit, Gate, Qubit, QubitLike + +if TYPE_CHECKING: + from opensquirrel.ir import IRVisitor + from opensquirrel.ir.expression import Expression + + +class MatrixGate(Gate): + def __init__( + self, matrix: ArrayLike | list[list[int | DTypeLike]], operands: Iterable[QubitLike], name: str = "MatrixGate" + ) -> None: + Gate.__init__(self, name) + self.operands = [Qubit(operand) for operand in operands] + if len(self.operands) < 2: + msg = "for 1q gates, please use BlochSphereRotation" + raise ValueError(msg) + + if self._check_repeated_qubit_operands(self.operands): + msg = "operands cannot be the same" + raise ValueError(msg) + + matrix = np.asarray(matrix, dtype=np.complex128) + + expected_number_of_rows = 1 << len(self.operands) + expected_number_of_cols = expected_number_of_rows + if matrix.shape != (expected_number_of_rows, expected_number_of_cols): + msg = ( + f"incorrect matrix shape. " + f"Expected {(expected_number_of_rows, expected_number_of_cols)} but received {matrix.shape}" + ) + raise ValueError(msg) + + self.matrix = matrix + + @property + def arguments(self) -> tuple[Expression, ...]: + return tuple(self.operands) + + def __repr__(self) -> str: + return f"{self.name}(qubits={self.operands}, matrix={repr_round(self.matrix)})" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_matrix_gate(self) + + def get_qubit_operands(self) -> list[Qubit]: + return self.operands + + def get_bit_operands(self) -> list[Bit]: + return [] + + def is_identity(self) -> bool: + return np.allclose(self.matrix, np.eye(2 ** len(self.operands)), atol=ATOL) diff --git a/opensquirrel/ir/statement.py b/opensquirrel/ir/statement.py new file mode 100644 index 00000000..a0340257 --- /dev/null +++ b/opensquirrel/ir/statement.py @@ -0,0 +1,49 @@ +from abc import ABC, abstractmethod +from typing import Any + +from opensquirrel.ir.expression import Bit, Expression, Qubit, String, SupportsStr +from opensquirrel.ir.ir import IRNode, IRVisitor + + +class Statement(IRNode, ABC): + pass + + +class AsmDeclaration(Statement): + """``AsmDeclaration`` is used to define an assembly declaration statement in the IR. + + Args: + backend_name: Name of the backend that is to process the provided backend code. + backend_code: (Assembly) code to be processed by the specified backend. + """ + + def __init__( + self, + backend_name: SupportsStr, + backend_code: SupportsStr, + ) -> None: + self.backend_name = String(backend_name) + self.backend_code = String(backend_code) + Statement.__init__(self) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_statement(self) + return visitor.visit_asm_declaration(self) + + +class Instruction(Statement, ABC): + def __init__(self, name: str) -> None: + self.name = name + + @property + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + pass + + @abstractmethod + def get_bit_operands(self) -> list[Bit]: + pass diff --git a/opensquirrel/ir/unitary.py b/opensquirrel/ir/unitary.py new file mode 100644 index 00000000..c873379c --- /dev/null +++ b/opensquirrel/ir/unitary.py @@ -0,0 +1,54 @@ +from abc import ABC, abstractmethod +from collections.abc import Sequence + +from opensquirrel.common import are_matrices_equivalent_up_to_global_phase +from opensquirrel.ir.expression import Bit, Expression, Qubit +from opensquirrel.ir.statement import Instruction + + +class Unitary(Instruction, ABC): + def __init__(self, name: str) -> None: + Instruction.__init__(self, name) + + +class Gate(Unitary, ABC): + def __init__(self, name: str) -> None: + Unitary.__init__(self, name) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Gate): + return False + return compare_gates(self, other) + + @property + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + + @staticmethod + def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: + return len(qubits) != len(set(qubits)) + + @abstractmethod + def get_qubit_operands(self) -> list[Qubit]: + pass + + @abstractmethod + def get_bit_operands(self) -> list[Bit]: + pass + + @abstractmethod + def is_identity(self) -> bool: + pass + + +def compare_gates(g1: Gate, g2: Gate) -> bool: + union_mapping = [q.index for q in list(set(g1.get_qubit_operands()) | set(g2.get_qubit_operands()))] + + from opensquirrel.circuit_matrix_calculator import get_circuit_matrix + from opensquirrel.reindexer import get_reindexed_circuit + + matrix_g1 = get_circuit_matrix(get_reindexed_circuit([g1], union_mapping)) + matrix_g2 = get_circuit_matrix(get_reindexed_circuit([g2], union_mapping)) + + return are_matrices_equivalent_up_to_global_phase(matrix_g1, matrix_g2) diff --git a/opensquirrel/parser/libqasm/README.md b/opensquirrel/parser/libqasm/README.md deleted file mode 100644 index 99fd4fe4..00000000 --- a/opensquirrel/parser/libqasm/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Under development - -This directory will contain the code to parse a cQasm string using libqasm. diff --git a/opensquirrel/parser/libqasm/__init__.py b/opensquirrel/parser/libqasm/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/opensquirrel/passes/decomposer/__init__.py b/opensquirrel/passes/decomposer/__init__.py index 4ef191cb..e44be7c1 100644 --- a/opensquirrel/passes/decomposer/__init__.py +++ b/opensquirrel/passes/decomposer/__init__.py @@ -9,7 +9,6 @@ from opensquirrel.passes.decomposer.cnot2cz_decomposer import CNOT2CZDecomposer from opensquirrel.passes.decomposer.cnot_decomposer import CNOTDecomposer from opensquirrel.passes.decomposer.cz_decomposer import CZDecomposer -from opensquirrel.passes.decomposer.general_decomposer import Decomposer from opensquirrel.passes.decomposer.mckay_decomposer import McKayDecomposer from opensquirrel.passes.decomposer.swap2cnot_decomposer import SWAP2CNOTDecomposer from opensquirrel.passes.decomposer.swap2cz_decomposer import SWAP2CZDecomposer @@ -18,7 +17,6 @@ "CNOT2CZDecomposer", "CNOTDecomposer", "CZDecomposer", - "Decomposer", "McKayDecomposer", "SWAP2CNOTDecomposer", "SWAP2CZDecomposer", diff --git a/opensquirrel/passes/decomposer/aba_decomposer.py b/opensquirrel/passes/decomposer/aba_decomposer.py index c991025e..51fa4cc7 100644 --- a/opensquirrel/passes/decomposer/aba_decomposer.py +++ b/opensquirrel/passes/decomposer/aba_decomposer.py @@ -10,7 +10,8 @@ from opensquirrel import Rx, Ry, Rz from opensquirrel.common import ATOL -from opensquirrel.ir import Axis, AxisLike, BlochSphereRotation, Gate +from opensquirrel.ir import Axis, AxisLike, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer.general_decomposer import Decomposer from opensquirrel.utils import acos, are_axes_consecutive, filter_out_identities diff --git a/opensquirrel/passes/decomposer/cnot2cz_decomposer.py b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py index caaca6fb..5e8aaefa 100644 --- a/opensquirrel/passes/decomposer/cnot2cz_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot2cz_decomposer.py @@ -1,10 +1,15 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING -from opensquirrel.ir import CZ, BlochSphereRotation, ControlledGate, Gate, Ry +from opensquirrel import CZ, Ry +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate from opensquirrel.passes.decomposer.general_decomposer import Decomposer +if TYPE_CHECKING: + from opensquirrel.ir import Gate + class CNOT2CZDecomposer(Decomposer): """Predefined decomposition of CNOT gate to CZ gate with Y rotations. @@ -30,7 +35,7 @@ def decompose(self, gate: Gate) -> list[Gate]: # If CNOT is not implemented as a ControlledGate but, e.g., as a MatrixGate. control_qubit, target_qubit = gate.get_qubit_operands() return [ - Ry(target_qubit, -math.pi / 2), + Ry(target_qubit, -pi / 2), CZ(control_qubit, target_qubit), - Ry(target_qubit, math.pi / 2), + Ry(target_qubit, pi / 2), ] diff --git a/opensquirrel/passes/decomposer/cnot_decomposer.py b/opensquirrel/passes/decomposer/cnot_decomposer.py index 93f3e627..42a17a94 100644 --- a/opensquirrel/passes/decomposer/cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/cnot_decomposer.py @@ -1,15 +1,19 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING from opensquirrel import CNOT, Ry, Rz, X from opensquirrel.common import ATOL -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate from opensquirrel.passes.decomposer import ZYZDecomposer from opensquirrel.passes.decomposer.general_decomposer import Decomposer from opensquirrel.passes.merger import general_merger from opensquirrel.utils import filter_out_identities +if TYPE_CHECKING: + from opensquirrel.ir import Gate + class CNOTDecomposer(Decomposer): """ @@ -43,7 +47,7 @@ def decompose(self, g: Gate) -> list[Gate]: controlled_rotation_times_x.axis, controlled_rotation_times_x.angle, ) - if abs((theta0_with_x - theta2_with_x) % (2 * math.pi)) < ATOL: + if abs((theta0_with_x - theta2_with_x) % (2 * pi)) < ATOL: # The decomposition can use a single CNOT according to the lemma. A = [Ry(target_qubit, -theta1_with_x / 2), Rz(target_qubit, -theta2_with_x)] # noqa: N806 B = [Rz(target_qubit, theta2_with_x), Ry(target_qubit, theta1_with_x / 2)] # noqa: N806 @@ -52,7 +56,7 @@ def decompose(self, g: Gate) -> list[Gate]: *B, CNOT(g.control_qubit, target_qubit), *A, - Rz(g.control_qubit, g.target_gate.phase - math.pi / 2), + Rz(g.control_qubit, g.target_gate.phase - pi / 2), ], ) diff --git a/opensquirrel/passes/decomposer/cz_decomposer.py b/opensquirrel/passes/decomposer/cz_decomposer.py index 8dfe9030..33ec06bb 100644 --- a/opensquirrel/passes/decomposer/cz_decomposer.py +++ b/opensquirrel/passes/decomposer/cz_decomposer.py @@ -1,15 +1,19 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING from opensquirrel import CZ, Rx, Ry, Rz, Z from opensquirrel.common import ATOL -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate from opensquirrel.passes.decomposer import XYXDecomposer from opensquirrel.passes.decomposer.general_decomposer import Decomposer from opensquirrel.passes.merger import general_merger from opensquirrel.utils import filter_out_identities +if TYPE_CHECKING: + from opensquirrel.ir import Gate + class CZDecomposer(Decomposer): """ @@ -44,7 +48,7 @@ def decompose(self, g: Gate) -> list[Gate]: controlled_rotation_times_z.axis, controlled_rotation_times_z.angle, ) - if abs((theta0_with_z - theta2_with_z) % (2 * math.pi)) < ATOL: + if abs((theta0_with_z - theta2_with_z) % (2 * pi)) < ATOL: # The decomposition can use a single CZ according to the lemma. A = [Ry(target_qubit, theta1_with_z / 2), Rx(target_qubit, theta2_with_z)] # noqa: N806 B = [Rx(target_qubit, -theta2_with_z), Ry(target_qubit, -theta1_with_z / 2)] # noqa: N806 @@ -53,7 +57,7 @@ def decompose(self, g: Gate) -> list[Gate]: *B, CZ(g.control_qubit, target_qubit), *A, - Rz(g.control_qubit, g.target_gate.phase - math.pi / 2), + Rz(g.control_qubit, g.target_gate.phase - pi / 2), ], ) diff --git a/opensquirrel/passes/decomposer/mckay_decomposer.py b/opensquirrel/passes/decomposer/mckay_decomposer.py index 2a54987b..65755e01 100644 --- a/opensquirrel/passes/decomposer/mckay_decomposer.py +++ b/opensquirrel/passes/decomposer/mckay_decomposer.py @@ -4,7 +4,8 @@ from opensquirrel import X90, I, Rz from opensquirrel.common import ATOL, normalize_angle -from opensquirrel.ir import Axis, BlochSphereRotation, Gate +from opensquirrel.ir import Axis, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import ZXZDecomposer from opensquirrel.passes.decomposer.general_decomposer import Decomposer diff --git a/opensquirrel/passes/decomposer/swap2cnot_decomposer.py b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py index d18b3728..31c677ca 100644 --- a/opensquirrel/passes/decomposer/swap2cnot_decomposer.py +++ b/opensquirrel/passes/decomposer/swap2cnot_decomposer.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING -from opensquirrel.ir import CNOT +from opensquirrel import CNOT from opensquirrel.passes.decomposer.general_decomposer import Decomposer if TYPE_CHECKING: diff --git a/opensquirrel/passes/decomposer/swap2cz_decomposer.py b/opensquirrel/passes/decomposer/swap2cz_decomposer.py index 09611183..3eaac714 100644 --- a/opensquirrel/passes/decomposer/swap2cz_decomposer.py +++ b/opensquirrel/passes/decomposer/swap2cz_decomposer.py @@ -1,9 +1,9 @@ from __future__ import annotations -import math +from math import pi from typing import TYPE_CHECKING -from opensquirrel.ir import CZ, Ry +from opensquirrel import CZ, Ry from opensquirrel.passes.decomposer.general_decomposer import Decomposer if TYPE_CHECKING: @@ -24,13 +24,13 @@ def decompose(self, gate: Gate) -> list[Gate]: return [gate] qubit0, qubit1 = gate.get_qubit_operands() return [ - Ry(qubit1, -math.pi / 2), + Ry(qubit1, -pi / 2), CZ(qubit0, qubit1), - Ry(qubit1, math.pi / 2), - Ry(qubit0, -math.pi / 2), + Ry(qubit1, pi / 2), + Ry(qubit0, -pi / 2), CZ(qubit1, qubit0), - Ry(qubit0, math.pi / 2), - Ry(qubit1, -math.pi / 2), + Ry(qubit0, pi / 2), + Ry(qubit1, -pi / 2), CZ(qubit0, qubit1), - Ry(qubit1, math.pi / 2), + Ry(qubit1, pi / 2), ] diff --git a/opensquirrel/passes/exporter/__init__.py b/opensquirrel/passes/exporter/__init__.py index 47f01182..412a2497 100644 --- a/opensquirrel/passes/exporter/__init__.py +++ b/opensquirrel/passes/exporter/__init__.py @@ -1,3 +1,5 @@ from opensquirrel.passes.exporter.export_format import ExportFormat -__all__ = ["ExportFormat"] +__all__ = [ + "ExportFormat", +] diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py index 6f561dbf..84c6a4e9 100644 --- a/opensquirrel/passes/exporter/cqasmv1_exporter.py +++ b/opensquirrel/passes/exporter/cqasmv1_exporter.py @@ -5,23 +5,12 @@ from opensquirrel.exceptions import UnsupportedGateError from opensquirrel.ir import ( - CNOT, - CR, - CZ, - SWAP, Barrier, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - CRk, Float, Gate, Init, Int, IRVisitor, - MatrixGate, Measure, Qubit, Reset, @@ -29,7 +18,22 @@ ) if TYPE_CHECKING: + from opensquirrel import ( + CNOT, + CR, + CZ, + SWAP, + CRk, + ) from opensquirrel.circuit import Circuit + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, + ) from opensquirrel.register_manager import RegisterManager diff --git a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py index 4ad67bc4..64b958e0 100644 --- a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py +++ b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py @@ -7,29 +7,32 @@ from opensquirrel.common import ATOL from opensquirrel.exceptions import ExporterError, UnsupportedGateError from opensquirrel.ir import ( - CNOT, - CR, - CZ, - SWAP, + IRVisitor, + Measure, + Reset, +) +from opensquirrel.ir.semantics import ( BlochSphereRotation, BsrAngleParam, BsrFullParams, BsrNoParams, ControlledGate, - CRk, - IRVisitor, MatrixGate, - Measure, - Reset, ) try: import quantify_scheduler - import quantify_scheduler.operations.gate_library as quantify_scheduler_gates except ModuleNotFoundError: pass if TYPE_CHECKING: + from opensquirrel import ( + CNOT, + CR, + CZ, + SWAP, + CRk, + ) from opensquirrel.circuit import Circuit from opensquirrel.ir import Qubit from opensquirrel.register_manager import RegisterManager @@ -61,14 +64,18 @@ def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) phi: float = round(math.degrees(math.atan2(gate.axis[1], gate.axis[0])), FIXED_POINT_DEG_PRECISION) self.schedule.add( - quantify_scheduler_gates.Rxy(theta=theta, phi=phi, qubit=self._get_qubit_string(gate.qubit)) + quantify_scheduler.operations.gate_library.Rxy( + theta=theta, phi=phi, qubit=self._get_qubit_string(gate.qubit) + ) ) return if abs(gate.axis[0]) < ATOL and abs(gate.axis[1]) < ATOL: # Rz rotation. theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) - self.schedule.add(quantify_scheduler_gates.Rz(theta=theta, qubit=self._get_qubit_string(gate.qubit))) + self.schedule.add( + quantify_scheduler.operations.gate_library.Rz(theta=theta, qubit=self._get_qubit_string(gate.qubit)) + ) return raise UnsupportedGateError(gate) @@ -94,7 +101,7 @@ def visit_controlled_gate(self, gate: ControlledGate) -> None: def visit_cnot(self, gate: CNOT) -> None: self.schedule.add( - quantify_scheduler_gates.CNOT( + quantify_scheduler.operations.gate_library.CNOT( qC=self._get_qubit_string(gate.control_qubit), qT=self._get_qubit_string(gate.target_qubit), ), @@ -103,7 +110,7 @@ def visit_cnot(self, gate: CNOT) -> None: def visit_cz(self, gate: CZ) -> None: self.schedule.add( - quantify_scheduler_gates.CZ( + quantify_scheduler.operations.gate_library.CZ( qC=self._get_qubit_string(gate.control_qubit), qT=self._get_qubit_string(gate.target_qubit), ), @@ -122,7 +129,7 @@ def visit_measure(self, gate: Measure) -> None: acq_index = self.acq_index_record[qubit_index] self.bit_string_mapping[bit_index] = (acq_index, qubit_index) self.schedule.add( - quantify_scheduler_gates.Measure( + quantify_scheduler.operations.gate_library.Measure( self._get_qubit_string(gate.qubit), acq_channel=qubit_index, acq_index=acq_index, @@ -133,7 +140,7 @@ def visit_measure(self, gate: Measure) -> None: return def visit_reset(self, gate: Reset) -> Any: - self.schedule.add(quantify_scheduler_gates.Reset(self._get_qubit_string(gate.qubit))) + self.schedule.add(quantify_scheduler.operations.gate_library.Reset(self._get_qubit_string(gate.qubit))) def export(circuit: Circuit) -> tuple[quantify_scheduler.Schedule, list[tuple[Any, Any]]]: @@ -146,8 +153,6 @@ def __getattr__(self, attr_name: Any) -> None: global quantify_scheduler quantify_scheduler = QuantifySchedulerNotInstalled() - global quantify_scheduler_gates - quantify_scheduler_gates = QuantifySchedulerNotInstalled() schedule_creator = _ScheduleCreator(circuit.register_manager) try: diff --git a/opensquirrel/passes/mapper/__init__.py b/opensquirrel/passes/mapper/__init__.py index 8664e7bc..8d940329 100644 --- a/opensquirrel/passes/mapper/__init__.py +++ b/opensquirrel/passes/mapper/__init__.py @@ -1,4 +1,9 @@ -from opensquirrel.passes.mapper.general_mapper import Mapper +from opensquirrel.passes.mapper.mip_mapper import MIPMapper from opensquirrel.passes.mapper.simple_mappers import HardcodedMapper, IdentityMapper, RandomMapper -__all__ = ["HardcodedMapper", "IdentityMapper", "Mapper", "RandomMapper"] +__all__ = [ + "HardcodedMapper", + "IdentityMapper", + "MIPMapper", + "RandomMapper", +] diff --git a/opensquirrel/passes/mapper/general_mapper.py b/opensquirrel/passes/mapper/general_mapper.py index 834d47dc..b173d04e 100644 --- a/opensquirrel/passes/mapper/general_mapper.py +++ b/opensquirrel/passes/mapper/general_mapper.py @@ -2,23 +2,19 @@ from __future__ import annotations -from typing import Any +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING, Any -from opensquirrel.passes.mapper.mapping import Mapping +if TYPE_CHECKING: + from opensquirrel.ir import IR + from opensquirrel.passes.mapper.mapping import Mapping -class Mapper: +class Mapper(ABC): """Base class for the Mapper pass.""" - def __init__(self, qubit_register_size: int, mapping: Mapping | None = None, **kwargs: Any) -> None: - """Use ``IdentityMapper`` as the fallback case for ``Mapper``""" - physical_qubit_register = list(range(qubit_register_size)) - self.mapping = mapping if mapping is not None else Mapping(physical_qubit_register) + def __init__(self, **kwargs: Any) -> None: ... - if qubit_register_size != self.mapping.size(): - msg = "qubit register size and mapping size differ" - raise ValueError(msg) - - def get_mapping(self) -> Mapping: - """Get mapping.""" - return self.mapping + @abstractmethod + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + raise NotImplementedError diff --git a/opensquirrel/passes/mapper/mip_mapper.py b/opensquirrel/passes/mapper/mip_mapper.py new file mode 100644 index 00000000..162c4673 --- /dev/null +++ b/opensquirrel/passes/mapper/mip_mapper.py @@ -0,0 +1,157 @@ +# OpenQL MIP-Like Mapper +from __future__ import annotations + +from typing import Any + +import numpy as np +from scipy.optimize import Bounds, LinearConstraint, milp + +from opensquirrel.ir import IR, Instruction, Qubit +from opensquirrel.passes.mapper.general_mapper import Mapper +from opensquirrel.passes.mapper.mapping import Mapping + +DISTANCE_UL = 999999 + + +class MIPMapper(Mapper): + def __init__( + self, + connectivity: dict[str, list[int]], + timeout: float | None = None, + **kwargs: Any, + ) -> None: + super().__init__(**kwargs) + self.connectivity = connectivity + self.timeout = timeout + + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + """ + Find an initial mapping of virtual qubits to physical qubits that minimizes + the sum of distances between mapped operands of all two-qubit gates, using + Mixed Integer Programming (MIP). + + This method formulates the mapping as a linear assignment problem, where the + objective is to minimize the total "distance cost" of executing all two-qubit + gates, given the connectivity. + + Args: + ir (IR): The intermediate representation of the quantum circuit to be mapped. + qubit_register_size (int): The number of virtual qubits in the circuit. + + Returns: + Mapping: Mapping from virtual to physical qubits. + + Raises: + RuntimeError: If the MIP solver fails to find a feasible mapping or times out. + RuntimeError: If the number of virtual qubits exceeds the number of physical qubits. + """ + num_physical_qubits = len(self.connectivity) + + if qubit_register_size > num_physical_qubits: + error_message = ( + f"Number of virtual qubits ({qubit_register_size}) exceeds " + f"number of physical qubits ({num_physical_qubits})" + ) + raise RuntimeError(error_message) + + distance = self._get_distance(self.connectivity) + cost = self._get_cost(ir, distance, qubit_register_size, num_physical_qubits) + constraints, integrality, bounds = self._get_constraints(qubit_register_size, num_physical_qubits) + milp_options = self._get_milp_options() + mapping = self._solve_and_extract_mapping( + cost, constraints, integrality, bounds, milp_options, qubit_register_size, num_physical_qubits + ) + return Mapping(mapping) + + @staticmethod + def _get_distance(connectivity: dict[str, list[int]]) -> list[list[int]]: + num_physical_qubits = len(connectivity) + distance = np.full((num_physical_qubits, num_physical_qubits), DISTANCE_UL, dtype=int) + np.fill_diagonal(distance, 0) + + for start_qubit_index, end_qubit_indices in connectivity.items(): + for end_qubit_index in end_qubit_indices: + distance[int(start_qubit_index), end_qubit_index] = 1 + + for k in range(num_physical_qubits): + for i in range(num_physical_qubits): + for j in range(num_physical_qubits): + if distance[i][j] > distance[i][k] + distance[k][j]: + distance[i][j] = distance[i][k] + distance[k][j] + + return list(distance) + + def _get_cost( + self, ir: IR, distance: list[list[int]], num_virtual_qubits: int, num_physical_qubits: int + ) -> list[list[int]]: + reference_counter = [[0 for _ in range(num_virtual_qubits)] for _ in range(num_virtual_qubits)] + for statement in getattr(ir, "statements", []): + if isinstance(statement, Instruction): + args = statement.arguments + if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): + qubit_args = [arg for arg in args if isinstance(arg, Qubit)] + for q_0, q_1 in zip(qubit_args[:-1], qubit_args[1:]): + reference_counter[q_0.index][q_1.index] += 1 + reference_counter[q_1.index][q_0.index] += 1 + cost = [[0 for _ in range(num_physical_qubits)] for _ in range(num_virtual_qubits)] + for i in range(num_virtual_qubits): + for k in range(num_physical_qubits): + cost[i][k] = sum( + reference_counter[i][j] * distance[k][l] + for j in range(num_virtual_qubits) + for l in range(num_physical_qubits) # noqa: E741 + ) + return cost + + def _get_constraints( + self, num_virtual_qubits: int, num_physical_qubits: int + ) -> tuple[list[LinearConstraint], list[bool], Bounds]: + num_vars = num_virtual_qubits * num_physical_qubits + eq_a = np.zeros((num_virtual_qubits, num_vars)) + for q_i in range(num_virtual_qubits): + for q_k in range(num_physical_qubits): + eq_a[q_i, q_i * num_physical_qubits + q_k] = 1 + eq_b = np.ones(num_virtual_qubits) + ub_a = np.zeros((num_physical_qubits, num_vars)) + for q_k in range(num_physical_qubits): + for q_i in range(num_virtual_qubits): + ub_a[q_k, q_i * num_physical_qubits + q_k] = 1 + ub_b = np.ones(num_physical_qubits) + integrality = np.ones(num_vars, dtype=bool) + bounds = Bounds(0, 1) + constraints = [LinearConstraint(eq_a, eq_b, eq_b), LinearConstraint(ub_a, -np.inf, ub_b)] + return constraints, list(integrality), bounds + + def _get_milp_options(self) -> dict[str, float]: + milp_options = {} + if self.timeout is not None: + milp_options["time_limit"] = self.timeout + return milp_options + + def _solve_and_extract_mapping( + self, + cost_matrix: list[list[int]], + constraints: list[LinearConstraint], + integrality: list[bool], + bounds: Bounds, + milp_options: dict[str, float], + num_virtual_qubits: int, + num_physical_qubits: int, + ) -> list[int]: + cost = np.array(cost_matrix).flatten() + + res = milp(c=cost, constraints=constraints, integrality=integrality, bounds=bounds, options=milp_options) + + if not res.success: + error_message = ( + f"MIP solver failed to find a feasible mapping. Status: {res.status}, Message: {res.message}" + ) + raise RuntimeError(error_message) + + x_sol = res.x.reshape((num_virtual_qubits, num_physical_qubits)) + mapping = [] + for q_i in range(num_virtual_qubits): + q_k = int(np.argmax(x_sol[q_i])) + mapping.append(q_k) + + return mapping diff --git a/opensquirrel/passes/mapper/qubit_remapper.py b/opensquirrel/passes/mapper/qubit_remapper.py index da87bd59..b74a7bea 100644 --- a/opensquirrel/passes/mapper/qubit_remapper.py +++ b/opensquirrel/passes/mapper/qubit_remapper.py @@ -1,25 +1,29 @@ -from opensquirrel.circuit import Circuit -from opensquirrel.ir import ( +from opensquirrel import ( CNOT, CR, CZ, - IR, SWAP, - Barrier, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, CRk, +) +from opensquirrel.circuit import Circuit +from opensquirrel.ir import ( + IR, + Barrier, Init, IRVisitor, - MatrixGate, Measure, Qubit, Reset, Wait, ) +from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, +) from opensquirrel.passes.mapper.mapping import Mapping @@ -27,16 +31,16 @@ class _QubitRemapper(IRVisitor): """ Remap a whole IR. + A new IR where the qubit indices are replaced by the values passed in mapping. + _E.g._, for mapping = [3, 1, 0, 2]: + - Qubit(index=0) becomes Qubit(index=3), + - Qubit(index=1) becomes Qubit(index=1), + - Qubit(index=2) becomes Qubit(index=0), and + - Qubit(index=3) becomes Qubit(index=2). + Args: - mapping: a list of qubit indices, e.g. [3, 1, 0, 2] - - Returns: - A new IR where the qubit indices are replaced by the values passed in mapping. - E.g., for mapping = [3, 1, 0, 2]: - - Qubit(index=0) becomes Qubit(index=3), - - Qubit(index=1) becomes Qubit(index=1), - - Qubit(index=2) becomes Qubit(index=0), and - - Qubit(index=3) becomes Qubit(index=2). + mapping: a list of qubit indices, _e.g._, [3, 1, 0, 2] + """ def __init__(self, mapping: Mapping) -> None: @@ -80,8 +84,8 @@ def visit_bsr_angle_param(self, gate: BsrAngleParam) -> BlochSphereRotation: return self.visit_bloch_sphere_rotation(gate) def visit_matrix_gate(self, matrix_gate: MatrixGate) -> MatrixGate: - for op in matrix_gate.operands: - op.accept(self) + for operand in matrix_gate.operands: + operand.accept(self) return matrix_gate def visit_swap(self, gate: SWAP) -> MatrixGate: @@ -89,7 +93,7 @@ def visit_swap(self, gate: SWAP) -> MatrixGate: def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: controlled_gate.control_qubit.accept(self) - controlled_gate.target_gate.accept(self) + self.visit_bloch_sphere_rotation(controlled_gate.target_gate) return controlled_gate def visit_cnot(self, gate: CNOT) -> ControlledGate: diff --git a/opensquirrel/passes/mapper/simple_mappers.py b/opensquirrel/passes/mapper/simple_mappers.py index 2e9f1723..4e407b83 100644 --- a/opensquirrel/passes/mapper/simple_mappers.py +++ b/opensquirrel/passes/mapper/simple_mappers.py @@ -5,40 +5,63 @@ * RandomMapper """ +from __future__ import annotations + import random -from typing import Any +from typing import TYPE_CHECKING, Any from opensquirrel.passes.mapper.general_mapper import Mapper from opensquirrel.passes.mapper.mapping import Mapping +if TYPE_CHECKING: + from opensquirrel.ir import IR + class IdentityMapper(Mapper): - def __init__(self, qubit_register_size: int, **kwargs: Any) -> None: + def __init__(self, **kwargs: Any) -> None: """An ``IdentityMapper`` maps each virtual qubit to exactly the same physical qubit.""" - super().__init__(qubit_register_size, **kwargs) + super().__init__(**kwargs) + + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + """Create identity mapping.""" + return Mapping(list(range(qubit_register_size))) class HardcodedMapper(Mapper): - def __init__(self, qubit_register_size: int, mapping: Mapping, **kwargs: Any) -> None: + def __init__(self, mapping: Mapping, **kwargs: Any) -> None: """ A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit Args: - qubit_register_size: The number of qubits in the physical qubit register mapping: The mapping from virtual to physical qubits """ - super().__init__(qubit_register_size, mapping, **kwargs) + super().__init__(**kwargs) + self._mapping = mapping + + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + """Return the hardcoded mapping.""" + if qubit_register_size != self._mapping.size(): + msg = f"qubit register size ({qubit_register_size}) and mapping size ({self._mapping.size()}) differ" + raise ValueError(msg) + return self._mapping class RandomMapper(Mapper): - def __init__(self, qubit_register_size: int, **kwargs: Any) -> None: + def __init__(self, seed: int | None = None, **kwargs: Any) -> None: """ A ``RandomMapper`` maps each virtual qubit to a random physical qubit. Args: - qubit_register_size: The number of qubits in the physical qubit register + seed: Random seed for reproducible results """ + super().__init__(**kwargs) + self.seed = seed + + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + """Create a random mapping.""" + if self.seed: + random.seed(self.seed) + physical_qubit_register = list(range(qubit_register_size)) random.shuffle(physical_qubit_register) - random_mapping = Mapping(physical_qubit_register) - super().__init__(qubit_register_size, random_mapping, **kwargs) + return Mapping(physical_qubit_register) diff --git a/opensquirrel/passes/merger/__init__.py b/opensquirrel/passes/merger/__init__.py index 23ff519f..324c1c39 100644 --- a/opensquirrel/passes/merger/__init__.py +++ b/opensquirrel/passes/merger/__init__.py @@ -1,7 +1,5 @@ -from opensquirrel.passes.merger.general_merger import Merger from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger __all__ = [ - "Merger", "SingleQubitGatesMerger", ] diff --git a/opensquirrel/passes/merger/general_merger.py b/opensquirrel/passes/merger/general_merger.py index 09a47768..faa8edab 100644 --- a/opensquirrel/passes/merger/general_merger.py +++ b/opensquirrel/passes/merger/general_merger.py @@ -8,7 +8,8 @@ from opensquirrel import I from opensquirrel.common import ATOL -from opensquirrel.ir import IR, Barrier, BlochSphereRotation, Instruction, Statement +from opensquirrel.ir import IR, Barrier, Instruction, Statement +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.utils import acos, flatten_list diff --git a/opensquirrel/passes/merger/single_qubit_gates_merger.py b/opensquirrel/passes/merger/single_qubit_gates_merger.py index 9259e053..b0dd808d 100644 --- a/opensquirrel/passes/merger/single_qubit_gates_merger.py +++ b/opensquirrel/passes/merger/single_qubit_gates_merger.py @@ -1,7 +1,8 @@ from typing import cast from opensquirrel import I -from opensquirrel.ir import IR, AsmDeclaration, Barrier, BlochSphereRotation, Instruction, Qubit +from opensquirrel.ir import IR, AsmDeclaration, Barrier, Instruction, Qubit +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.merger.general_merger import Merger, compose_bloch_sphere_rotations @@ -11,7 +12,9 @@ def merge(self, ir: IR, qubit_register_size: int) -> None: Gates obtained from merging other gates become anonymous gates. Args: - circuit: Circuit to perform the merge on. + ir: Intermediate representation of the circuit. + qubit_register_size: Size of the qubit register + """ accumulators_per_qubit: dict[Qubit, BlochSphereRotation] = { Qubit(qubit_index): I(qubit_index) for qubit_index in range(qubit_register_size) diff --git a/opensquirrel/passes/router/__init__.py b/opensquirrel/passes/router/__init__.py index afdfe837..88d314bd 100644 --- a/opensquirrel/passes/router/__init__.py +++ b/opensquirrel/passes/router/__init__.py @@ -1,5 +1,7 @@ -from opensquirrel.passes.router.general_router import Router # noqa: I001 from opensquirrel.passes.router.astar_router import AStarRouter from opensquirrel.passes.router.shortest_path_router import ShortestPathRouter -__all__ = ["AStarRouter", "Router", "ShortestPathRouter"] +__all__ = [ + "AStarRouter", + "ShortestPathRouter", +] diff --git a/opensquirrel/passes/router/astar_router.py b/opensquirrel/passes/router/astar_router.py index b6fe01d6..ad89798f 100644 --- a/opensquirrel/passes/router/astar_router.py +++ b/opensquirrel/passes/router/astar_router.py @@ -5,18 +5,34 @@ import networkx as nx +from opensquirrel import SWAP from opensquirrel.exceptions import NoRoutingPathError -from opensquirrel.ir import IR, SWAP, Gate -from opensquirrel.passes.router import Router +from opensquirrel.ir import IR, Gate, Instruction +from opensquirrel.passes.router.general_router import Router from opensquirrel.passes.router.heuristics import DistanceMetric, calculate_distance class AStarRouter(Router): - def __init__(self, connectivity: dict[str, list[int]], distance_metric: DistanceMetric, **kwargs: Any) -> None: + def __init__( + self, connectivity: dict[str, list[int]], distance_metric: DistanceMetric | None = None, **kwargs: Any + ) -> None: super().__init__(**kwargs) self.connectivity = connectivity self.distance_metric = distance_metric + def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: + for start_qubit_index, end_qubit_index in zip(shortest_path[:-2], shortest_path[1:-1]): + ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) + # Update subsequent statements to reflect the swap + for statement in ir.statements[statement_index + 1 :]: + if isinstance(statement, Instruction): + for qubit in statement.get_qubit_operands(): + if qubit.index == start_qubit_index: + qubit.index = end_qubit_index + elif qubit.index == end_qubit_index: + qubit.index = start_qubit_index + statement_index += 1 + def route(self, ir: IR) -> IR: """ Routes the circuit by inserting SWAP gates, with A*, to make it executable given the hardware connectivity. @@ -28,9 +44,6 @@ def route(self, ir: IR) -> IR: graph_data = {int(start_node): end_nodes for start_node, end_nodes in self.connectivity.items()} graph = nx.Graph(graph_data) num_available_qubits = max(graph.nodes) + 1 - # Calculate the number of columns in a grid layout of the qubits. - # This assumes the qubits are arranged in a square or rectangular grid. - # The number of columns is derived from the total number of qubits on the hardware. num_columns = math.ceil(math.sqrt(num_available_qubits)) statement_index = 0 while statement_index < len(ir.statements): @@ -48,9 +61,11 @@ def route(self, ir: IR) -> IR: target=q1.index, heuristic=lambda u, v: calculate_distance(u, v, num_columns, self.distance_metric), ) - for start_qubit_index, end_qubit_index in zip(shortest_path[:-1], shortest_path[1:]): - ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) - statement_index += 1 + # -2 because we skip inserting a swap for the last edge in the path: + # len(path) - 1 edges in total + num_swaps_inserted = len(shortest_path) - 2 + self._insert_and_propagate_swaps(ir, statement_index, shortest_path) + statement_index += num_swaps_inserted except nx.NetworkXNoPath as e: msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" raise NoRoutingPathError(msg) from e diff --git a/opensquirrel/passes/router/shortest_path_router.py b/opensquirrel/passes/router/shortest_path_router.py index b6e7902b..df55035d 100644 --- a/opensquirrel/passes/router/shortest_path_router.py +++ b/opensquirrel/passes/router/shortest_path_router.py @@ -2,9 +2,10 @@ import networkx as nx +from opensquirrel import SWAP from opensquirrel.exceptions import NoRoutingPathError -from opensquirrel.ir import IR, SWAP, Gate -from opensquirrel.passes.router import Router +from opensquirrel.ir import IR, Gate, Instruction +from opensquirrel.passes.router.general_router import Router class ShortestPathRouter(Router): @@ -12,9 +13,22 @@ def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: super().__init__(**kwargs) self.connectivity = connectivity + def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: + for start_qubit_index, end_qubit_index in zip(shortest_path[:-2], shortest_path[1:-1]): + ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) + # Update subsequent statements to reflect the swap + for statement in ir.statements[statement_index + 1 :]: + if isinstance(statement, Instruction): + for qubit in statement.get_qubit_operands(): + if qubit.index == start_qubit_index: + qubit.index = end_qubit_index + elif qubit.index == end_qubit_index: + qubit.index = start_qubit_index + statement_index += 1 + def route(self, ir: IR) -> IR: """ - Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not # noqa: W291 + Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not interact with each other, to make it executable given the hardware connectivity. Args: ir: The intermediate representation of the circuit. @@ -31,9 +45,11 @@ def route(self, ir: IR) -> IR: if not graph.has_edge(q0.index, q1.index): try: shortest_path = nx.shortest_path(graph, source=q0.index, target=q1.index) - for start_qubit_index, end_qubit_index in zip(shortest_path[:-1], shortest_path[1:]): - ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) - statement_index += 1 + # -2 because we skip inserting a swap for the last edge in the path: + # len(path) - 1 edges in total + num_swaps_inserted = len(shortest_path) - 2 + self._insert_and_propagate_swaps(ir, statement_index, shortest_path) + statement_index += num_swaps_inserted except nx.NetworkXNoPath as e: msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" raise NoRoutingPathError(msg) from e diff --git a/opensquirrel/passes/validator/__init__.py b/opensquirrel/passes/validator/__init__.py index 4a0d992c..e728ce2e 100644 --- a/opensquirrel/passes/validator/__init__.py +++ b/opensquirrel/passes/validator/__init__.py @@ -1,7 +1,7 @@ -"""Init file for the validator passes.""" - -from opensquirrel.passes.validator.general_validator import Validator +from opensquirrel.passes.validator.interaction_validator import InteractionValidator from opensquirrel.passes.validator.primitive_gate_validator import PrimitiveGateValidator -from opensquirrel.passes.validator.routing_validator import RoutingValidator -__all__ = ["PrimitiveGateValidator", "RoutingValidator", "Validator"] +__all__ = [ + "InteractionValidator", + "PrimitiveGateValidator", +] diff --git a/opensquirrel/passes/validator/routing_validator.py b/opensquirrel/passes/validator/interaction_validator.py similarity index 93% rename from opensquirrel/passes/validator/routing_validator.py rename to opensquirrel/passes/validator/interaction_validator.py index 96ef7388..558059dd 100644 --- a/opensquirrel/passes/validator/routing_validator.py +++ b/opensquirrel/passes/validator/interaction_validator.py @@ -1,10 +1,10 @@ from typing import Any from opensquirrel.ir import IR, Instruction, Qubit -from opensquirrel.passes.validator import Validator +from opensquirrel.passes.validator.general_validator import Validator -class RoutingValidator(Validator): +class InteractionValidator(Validator): def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: super().__init__(**kwargs) self.connectivity = connectivity diff --git a/opensquirrel/passes/validator/primitive_gate_validator.py b/opensquirrel/passes/validator/primitive_gate_validator.py index a84e73c1..22ce4f1b 100644 --- a/opensquirrel/passes/validator/primitive_gate_validator.py +++ b/opensquirrel/passes/validator/primitive_gate_validator.py @@ -1,7 +1,7 @@ from typing import Any from opensquirrel.ir import IR, Instruction -from opensquirrel.passes.validator import Validator +from opensquirrel.passes.validator.general_validator import Validator class PrimitiveGateValidator(Validator): diff --git a/opensquirrel/reader/__init__.py b/opensquirrel/reader/__init__.py new file mode 100644 index 00000000..b7cecf69 --- /dev/null +++ b/opensquirrel/reader/__init__.py @@ -0,0 +1,5 @@ +from opensquirrel.reader.libqasm_parser import LibQasmParser + +__all__ = [ + "LibQasmParser", +] diff --git a/opensquirrel/parser/libqasm/parser.py b/opensquirrel/reader/libqasm_parser.py similarity index 94% rename from opensquirrel/parser/libqasm/parser.py rename to opensquirrel/reader/libqasm_parser.py index 9cc06acf..18fbe210 100644 --- a/opensquirrel/parser/libqasm/parser.py +++ b/opensquirrel/reader/libqasm_parser.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Any, Callable, cast +from typing import TYPE_CHECKING, Any, Callable, cast import cqasm.v3x as cqasm @@ -11,7 +11,6 @@ IR, AsmDeclaration, Bit, - BlochSphereRotation, Float, Gate, Int, @@ -21,8 +20,11 @@ ) from opensquirrel.register_manager import RegisterManager +if TYPE_CHECKING: + from opensquirrel.ir.semantics import BlochSphereRotation -class Parser: + +class LibQasmParser: def __init__(self) -> None: self.ir = IR() @@ -55,12 +57,12 @@ def _size_of(ast_expression: Any) -> int: @staticmethod def _is_qubit_type(ast_expression: Any) -> bool: - ast_type = Parser._type_of(ast_expression) + ast_type = LibQasmParser._type_of(ast_expression) return bool(ast_type == cqasm.types.Qubit or ast_type == cqasm.types.QubitArray) @staticmethod def _is_bit_type(ast_expression: Any) -> bool: - ast_type = Parser._type_of(ast_expression) + ast_type = LibQasmParser._type_of(ast_expression) return bool(ast_type == cqasm.types.Bit or ast_type == cqasm.types.BitArray) @staticmethod @@ -194,9 +196,9 @@ def _get_non_unitary_generator(self, instruction: cqasm.semantic.NonGateInstruct def circuit_from_string(self, s: str) -> Circuit: # Analysis result will be either an Abstract Syntax Tree (AST) or a list of error messages - analyzer = Parser._create_analyzer() + analyzer = LibQasmParser._create_analyzer() analysis_result = analyzer.analyze_string(s) - Parser._check_analysis_result(analysis_result) + LibQasmParser._check_analysis_result(analysis_result) ast = analysis_result # Create RegisterManager @@ -206,17 +208,17 @@ def circuit_from_string(self, s: str) -> Circuit: expanded_args: list[tuple[Any, ...]] = [] for statement in ast.block.statements: instruction_generator: Callable[..., Statement] - if Parser._is_gate_instruction(statement): + if LibQasmParser._is_gate_instruction(statement): instruction_generator = self._get_gate_generator(statement) expanded_args = self._get_expanded_instruction_args(statement) - elif Parser._is_non_unitary_instruction(statement): + elif LibQasmParser._is_non_unitary_instruction(statement): instruction_generator = self._get_non_unitary_generator(statement) expanded_args = ( self._get_expanded_measure_args(statement.operands) if statement.name == "measure" else self._get_expanded_instruction_args(statement) ) - elif Parser._is_asm_declaration(statement): + elif LibQasmParser._is_asm_declaration(statement): asm_declaration = AsmDeclaration(statement.backend_name, statement.backend_code) self.ir.add_statement(asm_declaration) else: diff --git a/opensquirrel/reindexer/__init__.py b/opensquirrel/reindexer/__init__.py index 1911e800..d4be3b06 100644 --- a/opensquirrel/reindexer/__init__.py +++ b/opensquirrel/reindexer/__init__.py @@ -1,3 +1,5 @@ from opensquirrel.reindexer.qubit_reindexer import get_reindexed_circuit -__all__ = ["get_reindexed_circuit"] +__all__ = [ + "get_reindexed_circuit", +] diff --git a/opensquirrel/reindexer/qubit_reindexer.py b/opensquirrel/reindexer/qubit_reindexer.py index cbbe46d2..23c856e9 100644 --- a/opensquirrel/reindexer/qubit_reindexer.py +++ b/opensquirrel/reindexer/qubit_reindexer.py @@ -4,44 +4,49 @@ from typing import TYPE_CHECKING from opensquirrel.ir import ( - CNOT, - CR, - CZ, IR, - SWAP, Barrier, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - CRk, Gate, Init, IRVisitor, - MatrixGate, Measure, Reset, Wait, ) +from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, +) from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager if TYPE_CHECKING: + from opensquirrel import ( + CNOT, + CR, + CZ, + SWAP, + CRk, + ) from opensquirrel.circuit import Circuit class _QubitReindexer(IRVisitor): """ Reindex a whole IR. + A new IR where the qubit indices are replaced by their positions in qubit indices. + _E.g._, for mapping = [3, 1]: + - Qubit(index=1) becomes Qubit(index=1), and + - Qubit(index=3) becomes Qubit(index=0). Args: qubit_indices: a list of qubit indices, e.g. [3, 1] Returns: - A new IR where the qubit indices are replaced by their positions in qubit indices. - E.g., for mapping = [3, 1]: - - Qubit(index=1) becomes Qubit(index=1), and - - Qubit(index=3) becomes Qubit(index=0). + """ def __init__(self, qubit_indices: list[int]) -> None: diff --git a/opensquirrel/utils/check_mapper.py b/opensquirrel/utils/check_mapper.py index 73921c80..bfb1d440 100644 --- a/opensquirrel/utils/check_mapper.py +++ b/opensquirrel/utils/check_mapper.py @@ -4,8 +4,10 @@ from copy import deepcopy +from opensquirrel import I from opensquirrel.circuit import Circuit -from opensquirrel.ir import IR, BlochSphereRotation, ControlledGate, I, Measure +from opensquirrel.ir import IR, Measure +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate from opensquirrel.passes.mapper.general_mapper import Mapper from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager diff --git a/opensquirrel/utils/context.py b/opensquirrel/utils/context.py new file mode 100644 index 00000000..8a034392 --- /dev/null +++ b/opensquirrel/utils/context.py @@ -0,0 +1,22 @@ +from collections.abc import Generator +from contextlib import contextmanager +from typing import Any + + +@contextmanager +def temporary_class_attr(cls: type[Any], attr: str, value: Any) -> Generator[None, None, None]: + """Context method to temporarily assign a value to a class attribute. + + The assigned value will only be held within the context. + + Args: + cls: Class of which the class attribute value is to be assigned. + attr: Name of class attribute. + value: Value to assign to class attribute (must be correct type). + """ + original_value = getattr(cls, attr) + setattr(cls, attr, value) + try: + yield + finally: + setattr(cls, attr, original_value) diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py index 01085c7b..9ddcce0d 100644 --- a/opensquirrel/utils/matrix_expander.py +++ b/opensquirrel/utils/matrix_expander.py @@ -3,31 +3,37 @@ import cmath import math from collections.abc import Iterable -from typing import Any +from typing import TYPE_CHECKING, Any import numpy as np from numpy.typing import NDArray from opensquirrel.ir import ( - CNOT, - CR, - CZ, - SWAP, Axis, AxisLike, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - CRk, Gate, IRVisitor, - MatrixGate, Qubit, QubitLike, ) +if TYPE_CHECKING: + from opensquirrel import ( + CNOT, + CR, + CZ, + SWAP, + CRk, + ) + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, + ) + def get_reduced_ket(ket: int, qubits: Iterable[QubitLike]) -> int: """ diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py index 706fbabd..b5862976 100644 --- a/opensquirrel/writer/writer.py +++ b/opensquirrel/writer/writer.py @@ -1,26 +1,22 @@ from typing import Any, SupportsFloat, SupportsInt -from opensquirrel.circuit import Circuit -from opensquirrel.ir import ( +from opensquirrel import ( CNOT, CR, CZ, SWAP, + CRk, +) +from opensquirrel.circuit import Circuit +from opensquirrel.ir import ( AsmDeclaration, Barrier, Bit, - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - CRk, Float, Gate, Init, Int, IRVisitor, - MatrixGate, Measure, Qubit, Reset, @@ -28,6 +24,14 @@ SupportsStr, Wait, ) +from opensquirrel.ir.semantics import ( + BlochSphereRotation, + BsrAngleParam, + BsrFullParams, + BsrNoParams, + ControlledGate, + MatrixGate, +) from opensquirrel.register_manager import RegisterManager diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index e3c91722..00000000 --- a/poetry.lock +++ /dev/null @@ -1,6332 +0,0 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. - -[[package]] -name = "adaptive" -version = "1.3.2" -description = "Parallel active learning of mathematical functions" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637"}, - {file = "adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294"}, -] - -[package.dependencies] -cloudpickle = "*" -loky = ">=2.9" -scipy = "*" -sortedcollections = ">=1.1" -sortedcontainers = ">=2.0" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} -versioningit = "*" - -[package.extras] -notebook = ["bokeh", "holoviews (>=1.9.1)", "ipykernel (>=4.8.0)", "ipython", "ipywidgets", "jupyter-client (>=5.2.2)", "matplotlib", "pandas", "plotly"] -other = ["dill", "distributed", "ipyparallel (>=6.2.5)", "pexpect ; os_name != \"nt\"", "wexpect ; os_name == \"nt\""] -testing = ["flaky", "pre-commit", "pytest", "pytest-cov", "pytest-randomly", "pytest-timeout", "typeguard"] - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "anyio" -version = "4.9.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, - {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] -trio = ["trio (>=0.26.1)"] - -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -groups = ["examples", "export"] -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, -] -markers = {examples = "platform_system == \"Darwin\"", export = "python_version < \"3.10\""} - -[[package]] -name = "argon2-cffi" -version = "23.1.0" -description = "Argon2 for Python" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, - {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" - -[package.extras] -dev = ["argon2-cffi[tests,typing]", "tox (>4)"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] -tests = ["hypothesis", "pytest"] -typing = ["mypy"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -groups = ["examples"] -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] - -[[package]] -name = "asciitree" -version = "0.3.3" -description = "Draws ASCII trees." -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e"}, -] - -[[package]] -name = "asteval" -version = "1.0.6" -description = "Safe, minimalistic evaluator of python expression using ast module" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc"}, - {file = "asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f"}, -] - -[package.extras] -all = ["asteval[dev,doc,test]"] -dev = ["build", "twine"] -doc = ["Sphinx"] -test = ["coverage", "pytest", "pytest-cov"] - -[[package]] -name = "asttokens" -version = "3.0.0" -description = "Annotate AST trees with source code positions" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples", "export"] -files = [ - {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, - {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -astroid = ["astroid (>=2,<4)"] -test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "async-lru" -version = "2.0.5" -description = "Simple LRU cache for asyncio" -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, - {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "attrs" -version = "25.3.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] - -[[package]] -name = "babel" -version = "2.17.0" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.8" -groups = ["docs", "examples"] -files = [ - {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, - {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, -] - -[package.extras] -dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] - -[[package]] -name = "backrefs" -version = "5.8" -description = "A wrapper around re and regex that adds additional back references." -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d"}, - {file = "backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b"}, - {file = "backrefs-5.8-py312-none-any.whl", hash = "sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486"}, - {file = "backrefs-5.8-py313-none-any.whl", hash = "sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585"}, - {file = "backrefs-5.8-py39-none-any.whl", hash = "sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc"}, - {file = "backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd"}, -] - -[package.extras] -extras = ["regex"] - -[[package]] -name = "beautifulsoup4" -version = "4.13.3" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.7.0" -groups = ["examples", "export"] -files = [ - {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, - {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -soupsieve = ">1.2" -typing-extensions = ">=4.0.0" - -[package.extras] -cchardet = ["cchardet"] -chardet = ["chardet"] -charset-normalizer = ["charset-normalizer"] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "bleach" -version = "6.2.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, - {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, -] - -[package.dependencies] -tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.5)"] - -[[package]] -name = "broadbean" -version = "0.14.0" -description = "Package for easily generating and manipulating signal pulses." -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7"}, - {file = "broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c"}, -] - -[package.dependencies] -matplotlib = "*" -numpy = ">=1.12.1" -schema = "*" -versioningit = ">=2.0.1" - -[package.extras] -docs = ["nbsphinx", "sphinx", "sphinx-jsonschema", "sphinx-rtd-theme"] -test = ["black (>=22.3.0)", "coverage[toml] (>=6.2)", "hypothesis (>=5.49.0)", "jupyter (>=1.0.0)", "mypy (>=0.960)", "pytest (>=6.2.2)", "pytest-cov (>=3.0.0)", "types-pytz (>=2021.3.0)"] - -[[package]] -name = "cachetools" -version = "5.5.2" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, - {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, -] - -[[package]] -name = "certifi" -version = "2025.1.31" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -groups = ["docs", "examples", "export"] -files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "cf-xarray" -version = "0.9.4" -description = "A convenience wrapper for using CF attributes on xarray objects" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "cf_xarray-0.9.4-py3-none-any.whl", hash = "sha256:9f7acf73fe14bed66680bdb135682656ea8451e1f6c59221bc31a912b62ea46a"}, - {file = "cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb"}, -] - -[package.dependencies] -xarray = "*" - -[package.extras] -all = ["matplotlib", "pint (>=0.18,!=0.24.0)", "pooch", "regex", "rich", "shapely"] - -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] -markers = {export = "python_version < \"3.10\" and implementation_name == \"pypy\""} - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "cftime" -version = "1.6.4.post1" -description = "Time-handling functionality from netcdf4-python" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "cftime-1.6.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0baa9bc4850929da9f92c25329aa1f651e2d6f23e237504f337ee9e12a769f5d"}, - {file = "cftime-1.6.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bb6b087f4b2513c37670bccd457e2a666ca489c5f2aad6e2c0e94604dc1b5b9"}, - {file = "cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d9bdeb9174962c9ca00015190bfd693de6b0ec3ec0b3dbc35c693a4f48efdcc"}, - {file = "cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e735cfd544878eb94d0108ff5a093bd1a332dba90f979a31a357756d609a90d5"}, - {file = "cftime-1.6.4.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dcd1b140bf50da6775c56bd7ca179e84bd258b2f159b53eefd5c514b341f2bf"}, - {file = "cftime-1.6.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:e60b8f24b20753f7548f410f7510e28b941f336f84bd34e3cfd7874af6e70281"}, - {file = "cftime-1.6.4.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1bf7be0a0afc87628cb8c8483412aac6e48e83877004faa0936afb5bf8a877ba"}, - {file = "cftime-1.6.4.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0f64ca83acc4e3029f737bf3a32530ffa1fbf53124f5bee70b47548bc58671a7"}, - {file = "cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ebdfd81726b0cfb8b524309224fa952898dfa177c13d5f6af5b18cefbf497d"}, - {file = "cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ea0965a4c87739aebd84fe8eed966e5809d10065eeffd35c99c274b6f8da15"}, - {file = "cftime-1.6.4.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:800a18aea4e8cb2b206450397cb8a53b154798738af3cdd3c922ce1ca198b0e6"}, - {file = "cftime-1.6.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:5dcfc872f455db1f12eabe3c3ba98e93757cd60ed3526a53246e966ccde46c8a"}, - {file = "cftime-1.6.4.post1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a590f73506f4704ba5e154ef55bfbaed5e1b4ac170f3caeb8c58e4f2c619ee4e"}, - {file = "cftime-1.6.4.post1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:933cb10e1af4e362e77f513e3eb92b34a688729ddbf938bbdfa5ac20a7f44ba0"}, - {file = "cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf17a1b36f62e9e73c4c9363dd811e1bbf1170f5ac26d343fb26012ccf482908"}, - {file = "cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e18021f421aa26527bad8688c1acf0c85fa72730beb6efce969c316743294f2"}, - {file = "cftime-1.6.4.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5835b9d622f9304d1c23a35603a0f068739f428d902860f25e6e7e5a1b7cd8ea"}, - {file = "cftime-1.6.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:7f50bf0d1b664924aaee636eb2933746b942417d1f8b82ab6c1f6e8ba0da6885"}, - {file = "cftime-1.6.4.post1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5c89766ebf088c097832ea618c24ed5075331f0b7bf8e9c2d4144aefbf2f1850"}, - {file = "cftime-1.6.4.post1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f27113f7ccd1ca32881fdcb9a4bec806a5f54ae621fc1c374f1171f3ed98ef2"}, - {file = "cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da367b23eea7cf4df071c88e014a1600d6c5bbf22e3393a4af409903fa397e28"}, - {file = "cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0"}, - {file = "cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4"}, - {file = "cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259"}, - {file = "cftime-1.6.4.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9df3e2d49e548c62d1939e923800b08d2ab732d3ac8d75b857edd7982c878552"}, - {file = "cftime-1.6.4.post1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2892b7e7654142d825655f60eb66c3e1af745901890316907071d44cf9a18d8a"}, - {file = "cftime-1.6.4.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4ab54e6c04e68395d454cd4001188fc4ade2fe48035589ed65af80c4527ef08"}, - {file = "cftime-1.6.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:568b69fc52f406e361db62a4d7a219c6fb0ced138937144c3b3a511648dd6c50"}, - {file = "cftime-1.6.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:640911d2629f4a8f81f6bc0163a983b6b94f86d1007449b8cbfd926136cda253"}, - {file = "cftime-1.6.4.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:44e9f8052600803b55f8cb6bcac2be49405c21efa900ec77a9fb7f692db2f7a6"}, - {file = "cftime-1.6.4.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a90b6ef4a3fc65322c212a2c99cec75d1886f1ebaf0ff6189f7b327566762222"}, - {file = "cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652700130dbcca3ae36dbb5b61ff360e62aa09fabcabc42ec521091a14389901"}, - {file = "cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a7fb6cc541a027dab37fdeb695f8a2b21cd7d200be606f81b5abc38f2391e2"}, - {file = "cftime-1.6.4.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc2c0abe2dbd147e1b1e6d0f3de19a5ea8b04956acc204830fd8418066090989"}, - {file = "cftime-1.6.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:0ee2f5af8643aa1b47b7e388763a1a6e0dc05558cd2902cffb9cbcf954397648"}, - {file = "cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f"}, -] - -[package.dependencies] -numpy = {version = ">1.13.3", markers = "python_version < \"3.12.0.rc1\""} - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["docs", "examples", "export"] -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -groups = ["docs", "export"] -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "cloudpickle" -version = "3.1.1" -description = "Pickler class to extend the standard pickle.Pickler functionality" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, - {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "dev", "docs", "examples", "export"] -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -markers = {examples = "sys_platform == \"win32\"", export = "python_version < \"3.10\" and platform_system == \"Windows\" or sys_platform == \"win32\" and python_version < \"3.11\""} - -[[package]] -name = "columnar" -version = "1.4.1" -description = "A tool for printing data in a columnar format." -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798"}, - {file = "Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72"}, -] - -[package.dependencies] -toolz = "*" -wcwidth = "*" - -[[package]] -name = "comm" -version = "0.2.2" -description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, - {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -traitlets = ">=4" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "contourpy" -version = "1.3.0" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, -] - -[package.dependencies] -numpy = ">=1.23" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "coverage" -version = "7.8.2" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "coverage-7.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd8ec21e1443fd7a447881332f7ce9d35b8fbd2849e761bb290b584535636b0a"}, - {file = "coverage-7.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c26c2396674816deaeae7ded0e2b42c26537280f8fe313335858ffff35019be"}, - {file = "coverage-7.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aec326ed237e5880bfe69ad41616d333712c7937bcefc1343145e972938f9b3"}, - {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e818796f71702d7a13e50c70de2a1924f729228580bcba1607cccf32eea46e6"}, - {file = "coverage-7.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:546e537d9e24efc765c9c891328f30f826e3e4808e31f5d0f87c4ba12bbd1622"}, - {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab9b09a2349f58e73f8ebc06fac546dd623e23b063e5398343c5270072e3201c"}, - {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fd51355ab8a372d89fb0e6a31719e825cf8df8b6724bee942fb5b92c3f016ba3"}, - {file = "coverage-7.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0774df1e093acb6c9e4d58bce7f86656aeed6c132a16e2337692c12786b32404"}, - {file = "coverage-7.8.2-cp310-cp310-win32.whl", hash = "sha256:00f2e2f2e37f47e5f54423aeefd6c32a7dbcedc033fcd3928a4f4948e8b96af7"}, - {file = "coverage-7.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:145b07bea229821d51811bf15eeab346c236d523838eda395ea969d120d13347"}, - {file = "coverage-7.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b99058eef42e6a8dcd135afb068b3d53aff3921ce699e127602efff9956457a9"}, - {file = "coverage-7.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5feb7f2c3e6ea94d3b877def0270dff0947b8d8c04cfa34a17be0a4dc1836879"}, - {file = "coverage-7.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:670a13249b957bb9050fab12d86acef7bf8f6a879b9d1a883799276e0d4c674a"}, - {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bdc8bf760459a4a4187b452213e04d039990211f98644c7292adf1e471162b5"}, - {file = "coverage-7.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07a989c867986c2a75f158f03fdb413128aad29aca9d4dbce5fc755672d96f11"}, - {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2db10dedeb619a771ef0e2949ccba7b75e33905de959c2643a4607bef2f3fb3a"}, - {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e6ea7dba4e92926b7b5f0990634b78ea02f208d04af520c73a7c876d5a8d36cb"}, - {file = "coverage-7.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ef2f22795a7aca99fc3c84393a55a53dd18ab8c93fb431004e4d8f0774150f54"}, - {file = "coverage-7.8.2-cp311-cp311-win32.whl", hash = "sha256:641988828bc18a6368fe72355df5f1703e44411adbe49bba5644b941ce6f2e3a"}, - {file = "coverage-7.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8ab4a51cb39dc1933ba627e0875046d150e88478dbe22ce145a68393e9652975"}, - {file = "coverage-7.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:8966a821e2083c74d88cca5b7dcccc0a3a888a596a04c0b9668a891de3a0cc53"}, - {file = "coverage-7.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2f6fe3654468d061942591aef56686131335b7a8325684eda85dacdf311356c"}, - {file = "coverage-7.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76090fab50610798cc05241bf83b603477c40ee87acd358b66196ab0ca44ffa1"}, - {file = "coverage-7.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd0a0a5054be160777a7920b731a0570284db5142abaaf81bcbb282b8d99279"}, - {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da23ce9a3d356d0affe9c7036030b5c8f14556bd970c9b224f9c8205505e3b99"}, - {file = "coverage-7.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9392773cffeb8d7e042a7b15b82a414011e9d2b5fdbbd3f7e6a6b17d5e21b20"}, - {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:876cbfd0b09ce09d81585d266c07a32657beb3eaec896f39484b631555be0fe2"}, - {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3da9b771c98977a13fbc3830f6caa85cae6c9c83911d24cb2d218e9394259c57"}, - {file = "coverage-7.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a990f6510b3292686713bfef26d0049cd63b9c7bb17e0864f133cbfd2e6167f"}, - {file = "coverage-7.8.2-cp312-cp312-win32.whl", hash = "sha256:bf8111cddd0f2b54d34e96613e7fbdd59a673f0cf5574b61134ae75b6f5a33b8"}, - {file = "coverage-7.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:86a323a275e9e44cdf228af9b71c5030861d4d2610886ab920d9945672a81223"}, - {file = "coverage-7.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:820157de3a589e992689ffcda8639fbabb313b323d26388d02e154164c57b07f"}, - {file = "coverage-7.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ea561010914ec1c26ab4188aef8b1567272ef6de096312716f90e5baa79ef8ca"}, - {file = "coverage-7.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cb86337a4fcdd0e598ff2caeb513ac604d2f3da6d53df2c8e368e07ee38e277d"}, - {file = "coverage-7.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a4636ddb666971345541b59899e969f3b301143dd86b0ddbb570bd591f1e85"}, - {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5040536cf9b13fb033f76bcb5e1e5cb3b57c4807fef37db9e0ed129c6a094257"}, - {file = "coverage-7.8.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc67994df9bcd7e0150a47ef41278b9e0a0ea187caba72414b71dc590b99a108"}, - {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e6c86888fd076d9e0fe848af0a2142bf606044dc5ceee0aa9eddb56e26895a0"}, - {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:684ca9f58119b8e26bef860db33524ae0365601492e86ba0b71d513f525e7050"}, - {file = "coverage-7.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8165584ddedb49204c4e18da083913bdf6a982bfb558632a79bdaadcdafd0d48"}, - {file = "coverage-7.8.2-cp313-cp313-win32.whl", hash = "sha256:34759ee2c65362163699cc917bdb2a54114dd06d19bab860725f94ef45a3d9b7"}, - {file = "coverage-7.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:2f9bc608fbafaee40eb60a9a53dbfb90f53cc66d3d32c2849dc27cf5638a21e3"}, - {file = "coverage-7.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:9fe449ee461a3b0c7105690419d0b0aba1232f4ff6d120a9e241e58a556733f7"}, - {file = "coverage-7.8.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8369a7c8ef66bded2b6484053749ff220dbf83cba84f3398c84c51a6f748a008"}, - {file = "coverage-7.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:159b81df53a5fcbc7d45dae3adad554fdbde9829a994e15227b3f9d816d00b36"}, - {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6fcbbd35a96192d042c691c9e0c49ef54bd7ed865846a3c9d624c30bb67ce46"}, - {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05364b9cc82f138cc86128dc4e2e1251c2981a2218bfcd556fe6b0fbaa3501be"}, - {file = "coverage-7.8.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46d532db4e5ff3979ce47d18e2fe8ecad283eeb7367726da0e5ef88e4fe64740"}, - {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4000a31c34932e7e4fa0381a3d6deb43dc0c8f458e3e7ea6502e6238e10be625"}, - {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:43ff5033d657cd51f83015c3b7a443287250dc14e69910577c3e03bd2e06f27b"}, - {file = "coverage-7.8.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94316e13f0981cbbba132c1f9f365cac1d26716aaac130866ca812006f662199"}, - {file = "coverage-7.8.2-cp313-cp313t-win32.whl", hash = "sha256:3f5673888d3676d0a745c3d0e16da338c5eea300cb1f4ada9c872981265e76d8"}, - {file = "coverage-7.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:2c08b05ee8d7861e45dc5a2cc4195c8c66dca5ac613144eb6ebeaff2d502e73d"}, - {file = "coverage-7.8.2-cp313-cp313t-win_arm64.whl", hash = "sha256:1e1448bb72b387755e1ff3ef1268a06617afd94188164960dba8d0245a46004b"}, - {file = "coverage-7.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:496948261eaac5ac9cf43f5d0a9f6eb7a6d4cb3bedb2c5d294138142f5c18f2a"}, - {file = "coverage-7.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eacd2de0d30871eff893bab0b67840a96445edcb3c8fd915e6b11ac4b2f3fa6d"}, - {file = "coverage-7.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b039ffddc99ad65d5078ef300e0c7eed08c270dc26570440e3ef18beb816c1ca"}, - {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e49824808d4375ede9dd84e9961a59c47f9113039f1a525e6be170aa4f5c34d"}, - {file = "coverage-7.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b069938961dfad881dc2f8d02b47645cd2f455d3809ba92a8a687bf513839787"}, - {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:de77c3ba8bb686d1c411e78ee1b97e6e0b963fb98b1637658dd9ad2c875cf9d7"}, - {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1676628065a498943bd3f64f099bb573e08cf1bc6088bbe33cf4424e0876f4b3"}, - {file = "coverage-7.8.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8e1a26e7e50076e35f7afafde570ca2b4d7900a491174ca357d29dece5aacee7"}, - {file = "coverage-7.8.2-cp39-cp39-win32.whl", hash = "sha256:6782a12bf76fa61ad9350d5a6ef5f3f020b57f5e6305cbc663803f2ebd0f270a"}, - {file = "coverage-7.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1efa4166ba75ccefd647f2d78b64f53f14fb82622bc94c5a5cb0a622f50f1c9e"}, - {file = "coverage-7.8.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:ec455eedf3ba0bbdf8f5a570012617eb305c63cb9f03428d39bf544cb2b94837"}, - {file = "coverage-7.8.2-py3-none-any.whl", hash = "sha256:726f32ee3713f7359696331a18daf0c3b3a70bb0ae71141b9d3c52be7c595e32"}, - {file = "coverage-7.8.2.tar.gz", hash = "sha256:a886d531373a1f6ff9fad2a2ba4a045b68467b779ae729ee0b3b10ac20033b27"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli ; python_full_version <= \"3.11.0a6\""] - -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "dask" -version = "2024.8.0" -description = "Parallel PyData with Task Scheduling" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309"}, - {file = "dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee"}, -] - -[package.dependencies] -click = ">=8.1" -cloudpickle = ">=1.5.0" -fsspec = ">=2021.09.0" -importlib-metadata = {version = ">=4.13.0", markers = "python_version < \"3.12\""} -packaging = ">=20.0" -partd = ">=1.4.0" -pyyaml = ">=5.3.1" -toolz = ">=0.10.0" - -[package.extras] -array = ["numpy (>=1.21)"] -complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)", "pyarrow-hotfix"] -dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=2.0)"] -diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] -distributed = ["distributed (==2024.8.0)"] -test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] - -[[package]] -name = "dataclasses-json" -version = "0.6.7" -description = "Easily serialize dataclasses to and from JSON." -optional = false -python-versions = "<4.0,>=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, - {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0,<4.0.0" -typing-inspect = ">=0.4.0,<1" - -[[package]] -name = "debugpy" -version = "1.8.13" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "debugpy-1.8.13-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90"}, - {file = "debugpy-1.8.13-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520"}, - {file = "debugpy-1.8.13-cp310-cp310-win32.whl", hash = "sha256:46abe0b821cad751fc1fb9f860fb2e68d75e2c5d360986d0136cd1db8cad4428"}, - {file = "debugpy-1.8.13-cp310-cp310-win_amd64.whl", hash = "sha256:dc7b77f5d32674686a5f06955e4b18c0e41fb5a605f5b33cf225790f114cfeec"}, - {file = "debugpy-1.8.13-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:eee02b2ed52a563126c97bf04194af48f2fe1f68bb522a312b05935798e922ff"}, - {file = "debugpy-1.8.13-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4caca674206e97c85c034c1efab4483f33971d4e02e73081265ecb612af65377"}, - {file = "debugpy-1.8.13-cp311-cp311-win32.whl", hash = "sha256:7d9a05efc6973b5aaf076d779cf3a6bbb1199e059a17738a2aa9d27a53bcc888"}, - {file = "debugpy-1.8.13-cp311-cp311-win_amd64.whl", hash = "sha256:62f9b4a861c256f37e163ada8cf5a81f4c8d5148fc17ee31fb46813bd658cdcc"}, - {file = "debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1"}, - {file = "debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522"}, - {file = "debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f"}, - {file = "debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea"}, - {file = "debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503"}, - {file = "debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb"}, - {file = "debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02"}, - {file = "debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8"}, - {file = "debugpy-1.8.13-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:acf39a6e98630959763f9669feddee540745dfc45ad28dbc9bd1f9cd60639391"}, - {file = "debugpy-1.8.13-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:924464d87e7d905eb0d79fb70846558910e906d9ee309b60c4fe597a2e802590"}, - {file = "debugpy-1.8.13-cp38-cp38-win32.whl", hash = "sha256:3dae443739c6b604802da9f3e09b0f45ddf1cf23c99161f3a1a8039f61a8bb89"}, - {file = "debugpy-1.8.13-cp38-cp38-win_amd64.whl", hash = "sha256:ed93c3155fc1f888ab2b43626182174e457fc31b7781cd1845629303790b8ad1"}, - {file = "debugpy-1.8.13-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:6fab771639332bd8ceb769aacf454a30d14d7a964f2012bf9c4e04c60f16e85b"}, - {file = "debugpy-1.8.13-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b6857f8263a969ce2ca098f228e5cc0604d277447ec05911a8c46cf3e7e307"}, - {file = "debugpy-1.8.13-cp39-cp39-win32.whl", hash = "sha256:f14d2c4efa1809da125ca62df41050d9c7cd9cb9e380a2685d1e453c4d450ccb"}, - {file = "debugpy-1.8.13-cp39-cp39-win_amd64.whl", hash = "sha256:ea869fe405880327497e6945c09365922c79d2a1eed4c3ae04d77ac7ae34b2b5"}, - {file = "debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f"}, - {file = "debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "decorator" -version = "5.2.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples", "export"] -files = [ - {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, - {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, -] -markers = {export = "python_version < \"3.11\""} - -[[package]] -name = "deepdiff" -version = "8.4.1" -description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "deepdiff-8.4.1-py3-none-any.whl", hash = "sha256:c853011336f3b6bc0f48f1ef564656f84a2cd78fbc8ee5da2033a3e017f52e79"}, - {file = "deepdiff-8.4.1.tar.gz", hash = "sha256:b863d2552909160eccfeae2c9882bf1f75c69888499a04ca1597c706d12fe87f"}, -] - -[package.dependencies] -orderly-set = ">=5.3.0,<6" - -[package.extras] -cli = ["click (==8.1.8)", "pyyaml (==6.0.2)"] -optimize = ["orjson"] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["examples"] -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "deprecated" -version = "1.2.18" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, - {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] - -[[package]] -name = "dill" -version = "0.3.9" -description = "serialize all of Python" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, - {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] -profile = ["gprof2dot (>=2022.7.29)"] - -[[package]] -name = "distlib" -version = "0.3.9" -description = "Distribution utilities" -optional = false -python-versions = "*" -groups = ["main", "dev"] -files = [ - {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, - {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, -] - -[[package]] -name = "docopt-ng" -version = "0.9.0" -description = "Jazzband-maintained fork of docopt, the humane command line arguments parser." -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9"}, - {file = "docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -groups = ["dev", "examples", "export"] -markers = "python_version < \"3.11\"" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "executing" -version = "2.2.0" -description = "Get the currently executing AST node of a frame, and other information" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples", "export"] -files = [ - {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, - {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] - -[[package]] -name = "fasteners" -version = "0.19" -description = "A python package that provides useful locks" -optional = false -python-versions = ">=3.6" -groups = ["export"] -markers = "python_version < \"3.10\" and sys_platform != \"emscripten\"" -files = [ - {file = "fasteners-0.19-py3-none-any.whl", hash = "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237"}, - {file = "fasteners-0.19.tar.gz", hash = "sha256:b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c"}, -] - -[[package]] -name = "fastjsonschema" -version = "2.21.1" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -groups = ["examples", "export"] -files = [ - {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, - {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - -[[package]] -name = "filelock" -version = "3.18.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.9" -groups = ["main", "dev", "export"] -files = [ - {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, - {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] - -[[package]] -name = "fonttools" -version = "4.56.0" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:331954d002dbf5e704c7f3756028e21db07097c19722569983ba4d74df014000"}, - {file = "fonttools-4.56.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d1613abd5af2f93c05867b3a3759a56e8bf97eb79b1da76b2bc10892f96ff16"}, - {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:705837eae384fe21cee5e5746fd4f4b2f06f87544fa60f60740007e0aa600311"}, - {file = "fonttools-4.56.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc871904a53a9d4d908673c6faa15689874af1c7c5ac403a8e12d967ebd0c0dc"}, - {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:38b947de71748bab150259ee05a775e8a0635891568e9fdb3cdd7d0e0004e62f"}, - {file = "fonttools-4.56.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:86b2a1013ef7a64d2e94606632683f07712045ed86d937c11ef4dde97319c086"}, - {file = "fonttools-4.56.0-cp310-cp310-win32.whl", hash = "sha256:133bedb9a5c6376ad43e6518b7e2cd2f866a05b1998f14842631d5feb36b5786"}, - {file = "fonttools-4.56.0-cp310-cp310-win_amd64.whl", hash = "sha256:17f39313b649037f6c800209984a11fc256a6137cbe5487091c6c7187cae4685"}, - {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ef04bc7827adb7532be3d14462390dd71287644516af3f1e67f1e6ff9c6d6df"}, - {file = "fonttools-4.56.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ffda9b8cd9cb8b301cae2602ec62375b59e2e2108a117746f12215145e3f786c"}, - {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e993e8db36306cc3f1734edc8ea67906c55f98683d6fd34c3fc5593fdbba4c"}, - {file = "fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003548eadd674175510773f73fb2060bb46adb77c94854af3e0cc5bc70260049"}, - {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd9825822e7bb243f285013e653f6741954d8147427aaa0324a862cdbf4cbf62"}, - {file = "fonttools-4.56.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b23d30a2c0b992fb1c4f8ac9bfde44b5586d23457759b6cf9a787f1a35179ee0"}, - {file = "fonttools-4.56.0-cp311-cp311-win32.whl", hash = "sha256:47b5e4680002ae1756d3ae3b6114e20aaee6cc5c69d1e5911f5ffffd3ee46c6b"}, - {file = "fonttools-4.56.0-cp311-cp311-win_amd64.whl", hash = "sha256:14a3e3e6b211660db54ca1ef7006401e4a694e53ffd4553ab9bc87ead01d0f05"}, - {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9"}, - {file = "fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f"}, - {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2"}, - {file = "fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563"}, - {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a"}, - {file = "fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28"}, - {file = "fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c"}, - {file = "fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba"}, - {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692"}, - {file = "fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0"}, - {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1"}, - {file = "fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea"}, - {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3"}, - {file = "fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278"}, - {file = "fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f"}, - {file = "fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6"}, - {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3fd3fccb7b9adaaecfa79ad51b759f2123e1aba97f857936ce044d4f029abd71"}, - {file = "fonttools-4.56.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:193b86e9f769320bc98ffdb42accafb5d0c8c49bd62884f1c0702bc598b3f0a2"}, - {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e81c1cc80c1d8bf071356cc3e0e25071fbba1c75afc48d41b26048980b3c771"}, - {file = "fonttools-4.56.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9270505a19361e81eecdbc2c251ad1e1a9a9c2ad75fa022ccdee533f55535dc"}, - {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53f5e9767978a4daf46f28e09dbeb7d010319924ae622f7b56174b777258e5ba"}, - {file = "fonttools-4.56.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:9da650cb29bc098b8cfd15ef09009c914b35c7986c8fa9f08b51108b7bc393b4"}, - {file = "fonttools-4.56.0-cp38-cp38-win32.whl", hash = "sha256:965d0209e6dbdb9416100123b6709cb13f5232e2d52d17ed37f9df0cc31e2b35"}, - {file = "fonttools-4.56.0-cp38-cp38-win_amd64.whl", hash = "sha256:654ac4583e2d7c62aebc6fc6a4c6736f078f50300e18aa105d87ce8925cfac31"}, - {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ca7962e8e5fc047cc4e59389959843aafbf7445b6c08c20d883e60ced46370a5"}, - {file = "fonttools-4.56.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1af375734018951c31c0737d04a9d5fd0a353a0253db5fbed2ccd44eac62d8c"}, - {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:442ad4122468d0e47d83bc59d0e91b474593a8c813839e1872e47c7a0cb53b10"}, - {file = "fonttools-4.56.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf4f8d2a30b454ac682e12c61831dcb174950c406011418e739de592bbf8f76"}, - {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96a4271f63a615bcb902b9f56de00ea225d6896052c49f20d0c91e9f43529a29"}, - {file = "fonttools-4.56.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c1d38642ca2dddc7ae992ef5d026e5061a84f10ff2b906be5680ab089f55bb8"}, - {file = "fonttools-4.56.0-cp39-cp39-win32.whl", hash = "sha256:2d351275f73ebdd81dd5b09a8b8dac7a30f29a279d41e1c1192aedf1b6dced40"}, - {file = "fonttools-4.56.0-cp39-cp39-win_amd64.whl", hash = "sha256:d6ca96d1b61a707ba01a43318c9c40aaf11a5a568d1e61146fafa6ab20890793"}, - {file = "fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14"}, - {file = "fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4"}, -] - -[package.extras] -all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] -lxml = ["lxml (>=4.0)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr ; sys_platform == \"darwin\""] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] -woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] - -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -groups = ["examples"] -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - -[[package]] -name = "fsspec" -version = "2025.3.0" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, - {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -dev = ["pre-commit", "ruff"] -doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] -test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] -test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] -tqdm = ["tqdm"] - -[[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -optional = false -python-versions = "*" -groups = ["docs"] -files = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] - -[package.dependencies] -python-dateutil = ">=2.8.1" - -[package.extras] -dev = ["flake8", "markdown", "twine", "wheel"] - -[[package]] -name = "griffe" -version = "1.6.0" -description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "griffe-1.6.0-py3-none-any.whl", hash = "sha256:9f1dfe035d4715a244ed2050dfbceb05b1f470809ed4f6bb10ece5a7302f8dd1"}, - {file = "griffe-1.6.0.tar.gz", hash = "sha256:eb5758088b9c73ad61c7ac014f3cdfb4c57b5c2fcbfca69996584b702aefa354"}, -] - -[package.dependencies] -colorama = ">=0.4" - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "h5netcdf" -version = "1.6.1" -description = "netCDF4 via h5py" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "h5netcdf-1.6.1-py3-none-any.whl", hash = "sha256:1ec75cabd6ab50c6e7109d0c6595eb2960ba0e79fef2257607ab80838d84e6f6"}, - {file = "h5netcdf-1.6.1.tar.gz", hash = "sha256:7ef4ecd811374d94d29ac5e7f7db71ff59b55ef8eeefbe4ccc2c316853d31894"}, -] - -[package.dependencies] -h5py = "*" -packaging = "*" - -[package.extras] -test = ["netCDF4", "pytest"] - -[[package]] -name = "h5py" -version = "3.13.0" -description = "Read and write HDF5 files from Python" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "h5py-3.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5540daee2b236d9569c950b417f13fd112d51d78b4c43012de05774908dff3f5"}, - {file = "h5py-3.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10894c55d46df502d82a7a4ed38f9c3fdbcb93efb42e25d275193e093071fade"}, - {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb267ce4b83f9c42560e9ff4d30f60f7ae492eacf9c7ede849edf8c1b860e16b"}, - {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2cf6a231a07c14acd504a945a6e9ec115e0007f675bde5e0de30a4dc8d86a31"}, - {file = "h5py-3.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:851ae3a8563d87a5a0dc49c2e2529c75b8842582ccaefbf84297d2cfceeacd61"}, - {file = "h5py-3.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a8e38ef4ceb969f832cc230c0cf808c613cc47e31e768fd7b1106c55afa1cb8"}, - {file = "h5py-3.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f35640e81b03c02a88b8bf99fb6a9d3023cc52f7c627694db2f379e0028f2868"}, - {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:337af114616f3656da0c83b68fcf53ecd9ce9989a700b0883a6e7c483c3235d4"}, - {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:782ff0ac39f455f21fd1c8ebc007328f65f43d56718a89327eec76677ebf238a"}, - {file = "h5py-3.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:22ffe2a25770a2d67213a1b94f58006c14dce06933a42d2aaa0318c5868d1508"}, - {file = "h5py-3.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:477c58307b6b9a2509c59c57811afb9f598aedede24a67da808262dfa0ee37b4"}, - {file = "h5py-3.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:57c4c74f627c616f02b7aec608a8c706fe08cb5b0ba7c08555a4eb1dde20805a"}, - {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:357e6dc20b101a805ccfd0024731fbaf6e8718c18c09baf3b5e4e9d198d13fca"}, - {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6f13f9b5ce549448c01e4dfe08ea8d1772e6078799af2c1c8d09e941230a90d"}, - {file = "h5py-3.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:21daf38171753899b5905f3d82c99b0b1ec2cbbe282a037cad431feb620e62ec"}, - {file = "h5py-3.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e520ec76de00943dd017c8ea3f354fa1d2f542eac994811943a8faedf2a7d5cb"}, - {file = "h5py-3.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e79d8368cd9295045956bfb436656bea3f915beaa11d342e9f79f129f5178763"}, - {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56dd172d862e850823c4af02dc4ddbc308f042b85472ffdaca67f1598dff4a57"}, - {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be949b46b7388074c5acae017fbbe3e5ba303fd9daaa52157fdfef30bbdacadd"}, - {file = "h5py-3.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:4f97ecde7ac6513b21cd95efdfc38dc6d19f96f6ca6f2a30550e94e551458e0a"}, - {file = "h5py-3.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82690e89c72b85addf4fc4d5058fb1e387b6c14eb063b0b879bf3f42c3b93c35"}, - {file = "h5py-3.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d571644958c5e19a61c793d8d23cd02479572da828e333498c9acc463f4a3997"}, - {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:560e71220dc92dfa254b10a4dcb12d56b574d2d87e095db20466b32a93fec3f9"}, - {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10f061764d8dce0a9592ce08bfd5f243a00703325c388f1086037e5d619c5f1"}, - {file = "h5py-3.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c82ece71ed1c2b807b6628e3933bc6eae57ea21dac207dca3470e3ceaaf437c"}, - {file = "h5py-3.13.0.tar.gz", hash = "sha256:1870e46518720023da85d0895a1960ff2ce398c5671eac3b1a41ec696b7105c3"}, -] - -[package.dependencies] -numpy = ">=1.19.3" - -[[package]] -name = "hickle" -version = "5.0.3" -description = "Hickle - an HDF5 based version of pickle" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad"}, - {file = "hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e"}, -] - -[package.dependencies] -h5py = ">=2.10.0" -numpy = ">=1.8,<1.20 || >1.20" - -[[package]] -name = "httpcore" -version = "1.0.7" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, - {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httpx" -version = "0.28.1" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" - -[package.extras] -brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -groups = ["docs", "examples", "export"] -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "ifaddr" -version = "0.2.0" -description = "Cross-platform network interface and IP address enumeration library" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"}, - {file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"}, -] - -[[package]] -name = "importlib-metadata" -version = "8.6.1" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.9" -groups = ["docs", "examples", "export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, - {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - -[[package]] -name = "importlib-resources" -version = "6.5.2" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, - {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "ipykernel" -version = "6.29.5" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, - {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -comm = ">=0.1.1" -debugpy = ">=1.6.5" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=24" -tornado = ">=6.1" -traitlets = ">=5.4.0" - -[package.extras] -cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] -pyqt5 = ["pyqt5"] -pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "8.18.1" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.9" -groups = ["dev", "examples", "export"] -files = [ - {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, - {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.41,<3.1.0" -pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} - -[package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] -black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] - -[[package]] -name = "ipywidgets" -version = "8.1.5" -description = "Jupyter interactive widgets" -optional = false -python-versions = ">=3.7" -groups = ["examples", "export"] -files = [ - {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, - {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -comm = ">=0.1.3" -ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0.12,<3.1.0" -traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.12,<4.1.0" - -[package.extras] -test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - -[[package]] -name = "jedi" -version = "0.19.2" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -groups = ["dev", "examples", "export"] -files = [ - {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, - {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.dependencies] -parso = ">=0.8.4,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] - -[[package]] -name = "jinja2" -version = "3.1.6" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -groups = ["docs", "examples", "export"] -files = [ - {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, - {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "joblib" -version = "1.4.2" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, - {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, -] - -[[package]] -name = "json5" -version = "0.10.0" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = ">=3.8.0" -groups = ["examples"] -files = [ - {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, - {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, -] - -[package.extras] -dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - -[[package]] -name = "jsonschema" -version = "4.23.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, - {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -attrs = ">=22.2.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -rpds-py = ">=0.7.1" -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] - -[[package]] -name = "jsonschema-specifications" -version = "2024.10.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.9" -groups = ["examples", "export"] -files = [ - {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, - {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -referencing = ">=0.31.0" - -[[package]] -name = "jupyter" -version = "1.1.1" -description = "Jupyter metapackage. Install all the Jupyter components in one go." -optional = false -python-versions = "*" -groups = ["examples"] -files = [ - {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, - {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, -] - -[package.dependencies] -ipykernel = "*" -ipywidgets = "*" -jupyter-console = "*" -jupyterlab = "*" -nbconvert = "*" -notebook = "*" - -[[package]] -name = "jupyter-client" -version = "8.6.3" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, - {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = ">=5.3" - -[package.extras] -docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] - -[[package]] -name = "jupyter-console" -version = "6.6.3" -description = "Jupyter terminal console" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, - {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, -] - -[package.dependencies] -ipykernel = ">=6.14" -ipython = "*" -jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -prompt-toolkit = ">=3.0.30" -pygments = "*" -pyzmq = ">=17" -traitlets = ">=5.4" - -[package.extras] -test = ["flaky", "pexpect", "pytest"] - -[[package]] -name = "jupyter-core" -version = "5.7.2" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, - {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.12.0" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, - {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, -] - -[package.dependencies] -jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} -packaging = "*" -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -referencing = "*" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] -test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] - -[[package]] -name = "jupyter-lsp" -version = "2.2.5" -description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, - {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-server = ">=1.1.2" - -[[package]] -name = "jupyter-server" -version = "2.15.0" -description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, - {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, -] - -[package.dependencies] -anyio = ">=3.1.0" -argon2-cffi = ">=21.1" -jinja2 = ">=3.0.3" -jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.11.0" -jupyter-server-terminals = ">=0.4.4" -nbconvert = ">=6.4.4" -nbformat = ">=5.3.0" -overrides = ">=5.0" -packaging = ">=22.0" -prometheus-client = ">=0.9" -pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} -pyzmq = ">=24" -send2trash = ">=1.8.2" -terminado = ">=0.8.3" -tornado = ">=6.2.0" -traitlets = ">=5.6.0" -websocket-client = ">=1.7" - -[package.extras] -docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.3" -description = "A Jupyter Server Extension Providing Terminals." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, - {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, -] - -[package.dependencies] -pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} -terminado = ">=0.8.3" - -[package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] - -[[package]] -name = "jupyterlab" -version = "4.3.6" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "jupyterlab-4.3.6-py3-none-any.whl", hash = "sha256:fc9eb0455562a56a9bd6d2977cf090842f321fa1a298fcee9bf8c19de353d5fd"}, - {file = "jupyterlab-4.3.6.tar.gz", hash = "sha256:2900ffdbfca9ed37c4ad7fdda3eb76582fd945d46962af3ac64741ae2d6b2ff4"}, -] - -[package.dependencies] -async-lru = ">=1.0.0" -httpx = ">=0.25.0" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -ipykernel = ">=6.5.0" -jinja2 = ">=3.0.3" -jupyter-core = "*" -jupyter-lsp = ">=2.0.0" -jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.27.1,<3" -notebook-shim = ">=0.2" -packaging = "*" -setuptools = ">=40.8.0" -tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} -tornado = ">=6.2.0" -traitlets = "*" - -[package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] -test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] -upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, - {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, -] - -[[package]] -name = "jupyterlab-server" -version = "2.27.3" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, - {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, -] - -[package.dependencies] -babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.18.0" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.31" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - -[[package]] -name = "jupyterlab-widgets" -version = "3.0.13" -description = "Jupyter interactive widgets for JupyterLab" -optional = false -python-versions = ">=3.7" -groups = ["examples", "export"] -files = [ - {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, - {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "kiwisolver" -version = "1.4.7" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, - {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, -] - -[[package]] -name = "lazy-loader" -version = "0.4" -description = "Makes it easy to load subpackages and functions on demand." -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"}, - {file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"}, -] - -[package.dependencies] -packaging = "*" - -[package.extras] -dev = ["changelist (==0.5)"] -lint = ["pre-commit (==3.7.0)"] -test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] - -[[package]] -name = "libqasm" -version = "1.2.0" -description = "libqasm Python Package" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "libqasm-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b54c706e929d33dbdbcfefb9473c5280f816a091293bbf62a6733e0ead3502f"}, - {file = "libqasm-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:11b30ebd51b2419257022d17e15185b6eadb5ba3917f145bd38cac374fc9f25a"}, - {file = "libqasm-1.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb641a6f02930ee3a82483e88684ab290e24f8125641c08a615fb4b2d744a3dd"}, - {file = "libqasm-1.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11771ea65f31114d8d8f9226839445a46436a0656f90e30fe2fddf979e0fa37f"}, - {file = "libqasm-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d7d1a412ad94c0121c6ee8d707cd1ff344f7bda72557a8038b500639655fe46"}, - {file = "libqasm-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:249358d98fca493651e4eec6dd594ead16a69ebfd08139b196cf1409cf0e03f3"}, - {file = "libqasm-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5891147046dac02ff3a2e057a3c6a66ea0138d6f6ce0e0d3680314181ec5cdfd"}, - {file = "libqasm-1.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:123b8aa085569f25bfd852a72067fc1ac2892593852c678f320c121f6a15be3a"}, - {file = "libqasm-1.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:110c01bcbd12e3b2ed6e8aa50dd73e95dae8a3383b38bd1351fb90392cc46c4b"}, - {file = "libqasm-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:3737086fbd0601433c56fab2f0cb50298aaed1ea9323e8f97d3c67656e763c1f"}, - {file = "libqasm-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bfe887d1f9bbbcd98428bc908d2336453247958eb750f7282e6fa7f0b9df45d"}, - {file = "libqasm-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c7c3bbb747219e3fc48f93b0d36cfea898268686767f5b683ecdd1d7701da20e"}, - {file = "libqasm-1.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72084cd13047c0f9fc6a87682eb8ee1e91dc7715594ce7ca74f8a062e575ebdd"}, - {file = "libqasm-1.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2da87aae9ba94f1d0e420ee24e3c68bef90bc51d53a96aa0b3ff3010d866ad2e"}, - {file = "libqasm-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:d587a9f50b96824b34033649d5c12f74f87e1059bc4ac18a643b54cdcf413929"}, - {file = "libqasm-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c61432086a243b8dea9515bb230d1ff7e7f22851da64f89b8448a842e3fa7a6b"}, - {file = "libqasm-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4d223d1790d6d640b6178e224cc0a3f0c4521a81aa3be9ed1aa8a9f0f28a4130"}, - {file = "libqasm-1.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bb360afe4376dc42289ee86e708bb369ec5923e57000d3fe577b45d3d47a4a88"}, - {file = "libqasm-1.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c67b5698c858f8a0fc460e36a2cebaa0d4760e033cd6b7a8f34626c9c97e91d7"}, - {file = "libqasm-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:8aced05bc75529c34c4be5afec824a04bcd30dfa00c498b9be696c41de0f1556"}, -] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "lmfit" -version = "1.3.3" -description = "Least-Squares Minimization with Bounds and Constraints" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "lmfit-1.3.3-py3-none-any.whl", hash = "sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2"}, - {file = "lmfit-1.3.3.tar.gz", hash = "sha256:73321e6b881f2f686235721a7dfc02af6bb0f030a25efeb66638f62b1c6053a1"}, -] - -[package.dependencies] -asteval = ">=1.0" -dill = ">=0.3.4" -numpy = ">=1.24" -scipy = ">=1.10.0" -uncertainties = ">=3.2.2" - -[package.extras] -all = ["lmfit[dev,doc,test]"] -dev = ["build", "check-wheel-contents", "flake8-pyproject", "pre-commit", "twine"] -doc = ["Pillow", "Sphinx", "cairosvg", "corner", "emcee (>=3.0.0)", "ipykernel", "jupyter_sphinx (>=0.2.4)", "matplotlib", "numdifftools", "pandas", "pycairo ; platform_system == \"Windows\"", "sphinx-gallery (>=0.10)", "sphinxcontrib-svg2pdfconverter", "sympy"] -test = ["coverage", "flaky", "pytest", "pytest-cov"] - -[[package]] -name = "locket" -version = "1.0.0" -description = "File-based locks for Python on Linux and Windows" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, - {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, -] - -[[package]] -name = "loky" -version = "3.5.0" -description = "A robust implementation of concurrent.futures.ProcessPoolExecutor" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "loky-3.5.0-py3-none-any.whl", hash = "sha256:9481712107902174df88e86b49793fcb2bd41053c1326b22480b8fd989bea587"}, - {file = "loky-3.5.0.tar.gz", hash = "sha256:0ac7648a2c02758c37dcf3587ee4832d245ec5a4b0fec5cc0c6a9cc8e5695b53"}, -] - -[package.dependencies] -cloudpickle = "*" - -[[package]] -name = "lxml" -version = "5.3.1" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.6" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4058f16cee694577f7e4dd410263cd0ef75644b43802a689c2b3c2a7e69453b"}, - {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:364de8f57d6eda0c16dcfb999af902da31396949efa0e583e12675d09709881b"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:528f3a0498a8edc69af0559bdcf8a9f5a8bf7c00051a6ef3141fdcf27017bbf5"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db4743e30d6f5f92b6d2b7c86b3ad250e0bad8dee4b7ad8a0c44bfb276af89a3"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b5d7f8acf809465086d498d62a981fa6a56d2718135bb0e4aa48c502055f5c"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:928e75a7200a4c09e6efc7482a1337919cc61fe1ba289f297827a5b76d8969c2"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a997b784a639e05b9d4053ef3b20c7e447ea80814a762f25b8ed5a89d261eac"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7b82e67c5feb682dbb559c3e6b78355f234943053af61606af126df2183b9ef9"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:f1de541a9893cf8a1b1db9bf0bf670a2decab42e3e82233d36a74eda7822b4c9"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:de1fc314c3ad6bc2f6bd5b5a5b9357b8c6896333d27fdbb7049aea8bd5af2d79"}, - {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7c0536bd9178f754b277a3e53f90f9c9454a3bd108b1531ffff720e082d824f2"}, - {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68018c4c67d7e89951a91fbd371e2e34cd8cfc71f0bb43b5332db38497025d51"}, - {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa826340a609d0c954ba52fd831f0fba2a4165659ab0ee1a15e4aac21f302406"}, - {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:796520afa499732191e39fc95b56a3b07f95256f2d22b1c26e217fb69a9db5b5"}, - {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3effe081b3135237da6e4c4530ff2a868d3f80be0bda027e118a5971285d42d0"}, - {file = "lxml-5.3.1-cp310-cp310-win32.whl", hash = "sha256:a22f66270bd6d0804b02cd49dae2b33d4341015545d17f8426f2c4e22f557a23"}, - {file = "lxml-5.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:0bcfadea3cdc68e678d2b20cb16a16716887dd00a881e16f7d806c2138b8ff0c"}, - {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e220f7b3e8656ab063d2eb0cd536fafef396829cafe04cb314e734f87649058f"}, - {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f2cfae0688fd01f7056a17367e3b84f37c545fb447d7282cf2c242b16262607"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67d2f8ad9dcc3a9e826bdc7802ed541a44e124c29b7d95a679eeb58c1c14ade8"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db0c742aad702fd5d0c6611a73f9602f20aec2007c102630c06d7633d9c8f09a"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:198bb4b4dd888e8390afa4f170d4fa28467a7eaf857f1952589f16cfbb67af27"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2a3e412ce1849be34b45922bfef03df32d1410a06d1cdeb793a343c2f1fd666"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8969dbc8d09d9cd2ae06362c3bad27d03f433252601ef658a49bd9f2b22d79"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5be8f5e4044146a69c96077c7e08f0709c13a314aa5315981185c1f00235fe65"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:133f3493253a00db2c870d3740bc458ebb7d937bd0a6a4f9328373e0db305709"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:52d82b0d436edd6a1d22d94a344b9a58abd6c68c357ed44f22d4ba8179b37629"}, - {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b6f92e35e2658a5ed51c6634ceb5ddae32053182851d8cad2a5bc102a359b33"}, - {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:203b1d3eaebd34277be06a3eb880050f18a4e4d60861efba4fb946e31071a295"}, - {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:155e1a5693cf4b55af652f5c0f78ef36596c7f680ff3ec6eb4d7d85367259b2c"}, - {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22ec2b3c191f43ed21f9545e9df94c37c6b49a5af0a874008ddc9132d49a2d9c"}, - {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7eda194dd46e40ec745bf76795a7cccb02a6a41f445ad49d3cf66518b0bd9cff"}, - {file = "lxml-5.3.1-cp311-cp311-win32.whl", hash = "sha256:fb7c61d4be18e930f75948705e9718618862e6fc2ed0d7159b2262be73f167a2"}, - {file = "lxml-5.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c809eef167bf4a57af4b03007004896f5c60bd38dc3852fcd97a26eae3d4c9e6"}, - {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e69add9b6b7b08c60d7ff0152c7c9a6c45b4a71a919be5abde6f98f1ea16421c"}, - {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4e52e1b148867b01c05e21837586ee307a01e793b94072d7c7b91d2c2da02ffe"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b382e0e636ed54cd278791d93fe2c4f370772743f02bcbe431a160089025c9"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2e49dc23a10a1296b04ca9db200c44d3eb32c8d8ec532e8c1fd24792276522a"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4399b4226c4785575fb20998dc571bc48125dc92c367ce2602d0d70e0c455eb0"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5412500e0dc5481b1ee9cf6b38bb3b473f6e411eb62b83dc9b62699c3b7b79f7"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c93ed3c998ea8472be98fb55aed65b5198740bfceaec07b2eba551e55b7b9ae"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:63d57fc94eb0bbb4735e45517afc21ef262991d8758a8f2f05dd6e4174944519"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:b450d7cabcd49aa7ab46a3c6aa3ac7e1593600a1a0605ba536ec0f1b99a04322"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:4df0ec814b50275ad6a99bc82a38b59f90e10e47714ac9871e1b223895825468"}, - {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d184f85ad2bb1f261eac55cddfcf62a70dee89982c978e92b9a74a1bfef2e367"}, - {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b725e70d15906d24615201e650d5b0388b08a5187a55f119f25874d0103f90dd"}, - {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a31fa7536ec1fb7155a0cd3a4e3d956c835ad0a43e3610ca32384d01f079ea1c"}, - {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c3c8b55c7fc7b7e8877b9366568cc73d68b82da7fe33d8b98527b73857a225f"}, - {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d61ec60945d694df806a9aec88e8f29a27293c6e424f8ff91c80416e3c617645"}, - {file = "lxml-5.3.1-cp312-cp312-win32.whl", hash = "sha256:f4eac0584cdc3285ef2e74eee1513a6001681fd9753b259e8159421ed28a72e5"}, - {file = "lxml-5.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:29bfc8d3d88e56ea0a27e7c4897b642706840247f59f4377d81be8f32aa0cfbf"}, - {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c093c7088b40d8266f57ed71d93112bd64c6724d31f0794c1e52cc4857c28e0e"}, - {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0884e3f22d87c30694e625b1e62e6f30d39782c806287450d9dc2fdf07692fd"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1637fa31ec682cd5760092adfabe86d9b718a75d43e65e211d5931809bc111e7"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a364e8e944d92dcbf33b6b494d4e0fb3499dcc3bd9485beb701aa4b4201fa414"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:779e851fd0e19795ccc8a9bb4d705d6baa0ef475329fe44a13cf1e962f18ff1e"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4393600915c308e546dc7003d74371744234e8444a28622d76fe19b98fa59d1"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:673b9d8e780f455091200bba8534d5f4f465944cbdd61f31dc832d70e29064a5"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2e4a570f6a99e96c457f7bec5ad459c9c420ee80b99eb04cbfcfe3fc18ec6423"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:71f31eda4e370f46af42fc9f264fafa1b09f46ba07bdbee98f25689a04b81c20"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:42978a68d3825eaac55399eb37a4d52012a205c0c6262199b8b44fcc6fd686e8"}, - {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8b1942b3e4ed9ed551ed3083a2e6e0772de1e5e3aca872d955e2e86385fb7ff9"}, - {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85c4f11be9cf08917ac2a5a8b6e1ef63b2f8e3799cec194417e76826e5f1de9c"}, - {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:231cf4d140b22a923b1d0a0a4e0b4f972e5893efcdec188934cc65888fd0227b"}, - {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5865b270b420eda7b68928d70bb517ccbe045e53b1a428129bb44372bf3d7dd5"}, - {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7bebc2275016cddf3c997bf8a0f7044160714c64a9b83975670a04e6d2252"}, - {file = "lxml-5.3.1-cp313-cp313-win32.whl", hash = "sha256:d0751528b97d2b19a388b302be2a0ee05817097bab46ff0ed76feeec24951f78"}, - {file = "lxml-5.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:91fb6a43d72b4f8863d21f347a9163eecbf36e76e2f51068d59cd004c506f332"}, - {file = "lxml-5.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:016b96c58e9a4528219bb563acf1aaaa8bc5452e7651004894a973f03b84ba81"}, - {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82a4bb10b0beef1434fb23a09f001ab5ca87895596b4581fd53f1e5145a8934a"}, - {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d68eeef7b4d08a25e51897dac29bcb62aba830e9ac6c4e3297ee7c6a0cf6439"}, - {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:f12582b8d3b4c6be1d298c49cb7ae64a3a73efaf4c2ab4e37db182e3545815ac"}, - {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2df7ed5edeb6bd5590914cd61df76eb6cce9d590ed04ec7c183cf5509f73530d"}, - {file = "lxml-5.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:585c4dc429deebc4307187d2b71ebe914843185ae16a4d582ee030e6cfbb4d8a"}, - {file = "lxml-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:06a20d607a86fccab2fc15a77aa445f2bdef7b49ec0520a842c5c5afd8381576"}, - {file = "lxml-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:057e30d0012439bc54ca427a83d458752ccda725c1c161cc283db07bcad43cf9"}, - {file = "lxml-5.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4867361c049761a56bd21de507cab2c2a608c55102311d142ade7dab67b34f32"}, - {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dddf0fb832486cc1ea71d189cb92eb887826e8deebe128884e15020bb6e3f61"}, - {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bcc211542f7af6f2dfb705f5f8b74e865592778e6cafdfd19c792c244ccce19"}, - {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaca5a812f050ab55426c32177091130b1e49329b3f002a32934cd0245571307"}, - {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:236610b77589faf462337b3305a1be91756c8abc5a45ff7ca8f245a71c5dab70"}, - {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:aed57b541b589fa05ac248f4cb1c46cbb432ab82cbd467d1c4f6a2bdc18aecf9"}, - {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:75fa3d6946d317ffc7016a6fcc44f42db6d514b7fdb8b4b28cbe058303cb6e53"}, - {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:96eef5b9f336f623ffc555ab47a775495e7e8846dde88de5f941e2906453a1ce"}, - {file = "lxml-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:ef45f31aec9be01379fc6c10f1d9c677f032f2bac9383c827d44f620e8a88407"}, - {file = "lxml-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0611da6b07dd3720f492db1b463a4d1175b096b49438761cc9f35f0d9eaaef5"}, - {file = "lxml-5.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2aca14c235c7a08558fe0a4786a1a05873a01e86b474dfa8f6df49101853a4e"}, - {file = "lxml-5.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82fce1d964f065c32c9517309f0c7be588772352d2f40b1574a214bd6e6098"}, - {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7aae7a3d63b935babfdc6864b31196afd5145878ddd22f5200729006366bc4d5"}, - {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8e0d177b1fe251c3b1b914ab64135475c5273c8cfd2857964b2e3bb0fe196a7"}, - {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:6c4dd3bfd0c82400060896717dd261137398edb7e524527438c54a8c34f736bf"}, - {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f1208c1c67ec9e151d78aa3435aa9b08a488b53d9cfac9b699f15255a3461ef2"}, - {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c6aacf00d05b38a5069826e50ae72751cb5bc27bdc4d5746203988e429b385bb"}, - {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5881aaa4bf3a2d086c5f20371d3a5856199a0d8ac72dd8d0dbd7a2ecfc26ab73"}, - {file = "lxml-5.3.1-cp38-cp38-win32.whl", hash = "sha256:45fbb70ccbc8683f2fb58bea89498a7274af1d9ec7995e9f4af5604e028233fc"}, - {file = "lxml-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:7512b4d0fc5339d5abbb14d1843f70499cab90d0b864f790e73f780f041615d7"}, - {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5885bc586f1edb48e5d68e7a4b4757b5feb2a496b64f462b4d65950f5af3364f"}, - {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1b92fe86e04f680b848fff594a908edfa72b31bfc3499ef7433790c11d4c8cd8"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a091026c3bf7519ab1e64655a3f52a59ad4a4e019a6f830c24d6430695b1cf6a"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ffb141361108e864ab5f1813f66e4e1164181227f9b1f105b042729b6c15125"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3715cdf0dd31b836433af9ee9197af10e3df41d273c19bb249230043667a5dfd"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88b72eb7222d918c967202024812c2bfb4048deeb69ca328363fb8e15254c549"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa59974880ab5ad8ef3afaa26f9bda148c5f39e06b11a8ada4660ecc9fb2feb3"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3bb8149840daf2c3f97cebf00e4ed4a65a0baff888bf2605a8d0135ff5cf764e"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:0d6b2fa86becfa81f0a0271ccb9eb127ad45fb597733a77b92e8a35e53414914"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:136bf638d92848a939fd8f0e06fcf92d9f2e4b57969d94faae27c55f3d85c05b"}, - {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:89934f9f791566e54c1d92cdc8f8fd0009447a5ecdb1ec6b810d5f8c4955f6be"}, - {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8ade0363f776f87f982572c2860cc43c65ace208db49c76df0a21dde4ddd16e"}, - {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfbbab9316330cf81656fed435311386610f78b6c93cc5db4bebbce8dd146675"}, - {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:172d65f7c72a35a6879217bcdb4bb11bc88d55fb4879e7569f55616062d387c2"}, - {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e3c623923967f3e5961d272718655946e5322b8d058e094764180cdee7bab1af"}, - {file = "lxml-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ce0930a963ff593e8bb6fda49a503911accc67dee7e5445eec972668e672a0f0"}, - {file = "lxml-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7b64fcd670bca8800bc10ced36620c6bbb321e7bc1214b9c0c0df269c1dddc2"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:afa578b6524ff85fb365f454cf61683771d0170470c48ad9d170c48075f86725"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f5e80adf0aafc7b5454f2c1cb0cde920c9b1f2cbd0485f07cc1d0497c35c5d"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd0b80ac2d8f13ffc906123a6f20b459cb50a99222d0da492360512f3e50f84"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:422c179022ecdedbe58b0e242607198580804253da220e9454ffe848daa1cfd2"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:524ccfded8989a6595dbdda80d779fb977dbc9a7bc458864fc9a0c2fc15dc877"}, - {file = "lxml-5.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:48fd46bf7155def2e15287c6f2b133a2f78e2d22cdf55647269977b873c65499"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:05123fad495a429f123307ac6d8fd6f977b71e9a0b6d9aeeb8f80c017cb17131"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a243132767150a44e6a93cd1dde41010036e1cbc63cc3e9fe1712b277d926ce3"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c92ea6d9dd84a750b2bae72ff5e8cf5fdd13e58dda79c33e057862c29a8d5b50"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2f1be45d4c15f237209bbf123a0e05b5d630c8717c42f59f31ea9eae2ad89394"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a83d3adea1e0ee36dac34627f78ddd7f093bb9cfc0a8e97f1572a949b695cb98"}, - {file = "lxml-5.3.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3edbb9c9130bac05d8c3fe150c51c337a471cc7fdb6d2a0a7d3a88e88a829314"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f23cf50eccb3255b6e913188291af0150d89dab44137a69e14e4dcb7be981f1"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7e5edac4778127f2bf452e0721a58a1cfa4d1d9eac63bdd650535eb8543615"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:094b28ed8a8a072b9e9e2113a81fda668d2053f2ca9f2d202c2c8c7c2d6516b1"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:514fe78fc4b87e7a7601c92492210b20a1b0c6ab20e71e81307d9c2e377c64de"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8fffc08de02071c37865a155e5ea5fce0282e1546fd5bde7f6149fcaa32558ac"}, - {file = "lxml-5.3.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4b0d5cdba1b655d5b18042ac9c9ff50bda33568eb80feaaca4fc237b9c4fbfde"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3031e4c16b59424e8d78522c69b062d301d951dc55ad8685736c3335a97fc270"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb659702a45136c743bc130760c6f137870d4df3a9e14386478b8a0511abcfca"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a11b16a33656ffc43c92a5343a28dc71eefe460bcc2a4923a96f292692709f6"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5ae125276f254b01daa73e2c103363d3e99e3e10505686ac7d9d2442dd4627a"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76722b5ed4a31ba103e0dc77ab869222ec36efe1a614e42e9bcea88a36186fe"}, - {file = "lxml-5.3.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:33e06717c00c788ab4e79bc4726ecc50c54b9bfb55355eae21473c145d83c2d2"}, - {file = "lxml-5.3.1.tar.gz", hash = "sha256:106b7b5d2977b339f1e97efe2778e2ab20e99994cbb0ec5e55771ed0795920c8"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml_html_clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11,<3.1.0)"] - -[[package]] -name = "markdown" -version = "3.7" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, - {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "3.0.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -groups = ["docs", "examples", "export"] -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "marshmallow" -version = "3.26.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, - {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] -tests = ["pytest", "simplejson"] - -[[package]] -name = "matplotlib" -version = "3.9.4" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, - {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, - {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, - {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, - {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, - {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, - {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, - {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, - {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, - {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, - {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, - {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, - {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, - {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, - {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.3.1" -numpy = ">=1.23" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[package.extras] -dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples", "export"] -files = [ - {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, - {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -optional = false -python-versions = ">=3.6" -groups = ["docs"] -files = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] - -[[package]] -name = "methodtools" -version = "0.4.7" -description = "Expand standard functools to methods" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11"}, - {file = "methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba"}, -] - -[package.dependencies] -wirerope = ">=0.4.7" - -[package.extras] -doc = ["sphinx"] -test = ["functools32 (>=3.2.3-2) ; python_version < \"3\"", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] - -[[package]] -name = "mistune" -version = "3.1.2" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "mistune-3.1.2-py3-none-any.whl", hash = "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319"}, - {file = "mistune-3.1.2.tar.gz", hash = "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff"}, -] - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.11\""} - -[[package]] -name = "mkdocs" -version = "1.6.1" -description = "Project documentation with Markdown." -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, - {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} -ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -jinja2 = ">=2.11.1" -markdown = ">=3.3.6" -markupsafe = ">=2.0.1" -mergedeep = ">=1.3.4" -mkdocs-get-deps = ">=0.2.0" -packaging = ">=20.5" -pathspec = ">=0.11.1" -pyyaml = ">=5.1" -pyyaml-env-tag = ">=0.1" -watchdog = ">=2.0" - -[package.extras] -i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-autorefs" -version = "1.4.1" -description = "Automatically link across pages in MkDocs." -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "mkdocs_autorefs-1.4.1-py3-none-any.whl", hash = "sha256:9793c5ac06a6ebbe52ec0f8439256e66187badf4b5334b5fde0b128ec134df4f"}, - {file = "mkdocs_autorefs-1.4.1.tar.gz", hash = "sha256:4b5b6235a4becb2b10425c2fa191737e415b37aa3418919db33e5d774c9db079"}, -] - -[package.dependencies] -Markdown = ">=3.3" -markupsafe = ">=2.0.1" -mkdocs = ">=1.1" - -[[package]] -name = "mkdocs-gen-files" -version = "0.5.0" -description = "MkDocs plugin to programmatically generate documentation pages during the build" -optional = false -python-versions = ">=3.7" -groups = ["docs"] -files = [ - {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, - {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, -] - -[package.dependencies] -mkdocs = ">=1.0.3" - -[[package]] -name = "mkdocs-get-deps" -version = "0.2.0" -description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, - {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -mergedeep = ">=1.3.4" -platformdirs = ">=2.2.0" -pyyaml = ">=5.1" - -[[package]] -name = "mkdocs-literate-nav" -version = "0.6.2" -description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630"}, - {file = "mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75"}, -] - -[package.dependencies] -mkdocs = ">=1.4.1" - -[[package]] -name = "mkdocs-material" -version = "9.6.14" -description = "Documentation that simply works" -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "mkdocs_material-9.6.14-py3-none-any.whl", hash = "sha256:3b9cee6d3688551bf7a8e8f41afda97a3c39a12f0325436d76c86706114b721b"}, - {file = "mkdocs_material-9.6.14.tar.gz", hash = "sha256:39d795e90dce6b531387c255bd07e866e027828b7346d3eba5ac3de265053754"}, -] - -[package.dependencies] -babel = ">=2.10,<3.0" -backrefs = ">=5.7.post1,<6.0" -colorama = ">=0.4,<1.0" -jinja2 = ">=3.1,<4.0" -markdown = ">=3.2,<4.0" -mkdocs = ">=1.6,<2.0" -mkdocs-material-extensions = ">=1.3,<2.0" -paginate = ">=0.5,<1.0" -pygments = ">=2.16,<3.0" -pymdown-extensions = ">=10.2,<11.0" -requests = ">=2.26,<3.0" - -[package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] -recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -description = "Extension pack for Python Markdown and MkDocs Material." -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, - {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, -] - -[[package]] -name = "mkdocstrings" -version = "0.29.1" -description = "Automatic documentation from sources, for MkDocs." -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6"}, - {file = "mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.11.1" -Markdown = ">=3.6" -MarkupSafe = ">=1.1" -mkdocs = ">=1.6" -mkdocs-autorefs = ">=1.4" -mkdocstrings-python = {version = ">=1.16.2", optional = true, markers = "extra == \"python\""} -pymdown-extensions = ">=6.3" - -[package.extras] -crystal = ["mkdocstrings-crystal (>=0.3.4)"] -python = ["mkdocstrings-python (>=1.16.2)"] -python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] - -[[package]] -name = "mkdocstrings-python" -version = "1.16.5" -description = "A Python handler for mkdocstrings." -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "mkdocstrings_python-1.16.5-py3-none-any.whl", hash = "sha256:0899a12e356eab8e83720c63e15d0ff51cd96603216c837618de346e086b39ba"}, - {file = "mkdocstrings_python-1.16.5.tar.gz", hash = "sha256:706b28dd0f59249a7c22cc5d517c9521e06c030b57e2a5478e1928a58f900abb"}, -] - -[package.dependencies] -griffe = ">=0.49" -mkdocs-autorefs = ">=1.4" -mkdocstrings = ">=0.28.3" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -groups = ["dev", "examples"] -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "mypy" -version = "1.15.0" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, - {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, - {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, - {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, - {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, - {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, - {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, - {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, - {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, - {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, - {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, - {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, - {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, - {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, -] - -[package.dependencies] -mypy_extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing_extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -faster-cache = ["orjson"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -groups = ["dev", "export"] -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "narwhals" -version = "1.30.0" -description = "Extremely lightweight compatibility layer between dataframe libraries" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "narwhals-1.30.0-py3-none-any.whl", hash = "sha256:443aa0a1abfae89bc65a6b888a7e310a03d1818bfb2ccd61c150199a5f954c17"}, - {file = "narwhals-1.30.0.tar.gz", hash = "sha256:0c50cc67a5404da501302882838ec17dce51703d22cd8ad89162d6f60ea0bb19"}, -] - -[package.extras] -core = ["duckdb", "pandas", "polars", "pyarrow", "pyarrow-stubs"] -cudf = ["cudf (>=24.10.0)"] -dask = ["dask[dataframe] (>=2024.8)"] -dev = ["covdefaults", "hypothesis", "mypy (>=1.15.0,<1.16.0)", "pandas-stubs", "pre-commit", "pyright", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] -docs = ["black", "duckdb", "jinja2", "markdown-exec[ansi]", "mkdocs", "mkdocs-autorefs", "mkdocs-material", "mkdocstrings-python (>=1.16)", "mkdocstrings[python]", "pandas", "polars (>=1.0.0)", "pyarrow"] -duckdb = ["duckdb (>=1.0)"] -extra = ["scikit-learn"] -ibis = ["ibis-framework (>=6.0.0)", "packaging", "pyarrow-hotfix", "rich"] -modin = ["modin"] -pandas = ["pandas (>=0.25.3)"] -polars = ["polars (>=0.20.3)"] -pyarrow = ["pyarrow (>=11.0.0)"] -pyspark = ["pyspark (>=3.5.0)"] -sqlframe = ["sqlframe (>=3.22.0)"] -tests = ["covdefaults", "hypothesis", "pytest", "pytest-cov", "pytest-env", "pytest-randomly", "typing-extensions"] -typing = ["mypy (>=1.15.0,<1.16.0)", "pandas-stubs", "pyright", "typing-extensions"] - -[[package]] -name = "nbclient" -version = "0.10.2" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.9.0" -groups = ["examples"] -files = [ - {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, - {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.4" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.16.6" -description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, - {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = {version = "!=5.0.0", extras = ["css"]} -defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -traitlets = ">=5.1" - -[package.extras] -all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["pyqtwebengine (>=5.15)"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] -webpdf = ["playwright"] - -[[package]] -name = "nbformat" -version = "5.10.4" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, - {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, -] - -[package.dependencies] -fastjsonschema = ">=2.15" -jsonschema = ">=2.6" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -description = "Patch asyncio to allow nested event loops" -optional = false -python-versions = ">=3.5" -groups = ["examples", "export"] -files = [ - {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, - {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "netcdf4" -version = "1.7.2" -description = "Provides an object-oriented python interface to the netCDF version 4 library" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "netCDF4-1.7.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5e9b485e3bd9294d25ff7dc9addefce42b3d23c1ee7e3627605277d159819392"}, - {file = "netCDF4-1.7.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:118b476fd00d7e3ab9aa7771186d547da645ae3b49c0c7bdab866793ebf22f07"}, - {file = "netCDF4-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe5b1837ff209185ecfe50bd71884c866b3ee69691051833e410e57f177e059"}, - {file = "netCDF4-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28021c7e886e5bccf9a8ce504c032d1d7f98d86f67495fb7cf2c9564eba04510"}, - {file = "netCDF4-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:7460b638e41c8ce4179d082a81cb6456f0ce083d4d959f4d9e87a95cd86f64cb"}, - {file = "netCDF4-1.7.2-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:09d61c2ddb6011afb51e77ea0f25cd0bdc28887fb426ffbbc661d920f20c9749"}, - {file = "netCDF4-1.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:fd2a16dbddeb8fa7cf48c37bfc1967290332f2862bb82f984eec2007bb120aeb"}, - {file = "netCDF4-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f54f5d39ffbcf1726a1e6fd90cb5fa74277ecea739a5fa0f424636d71beafe24"}, - {file = "netCDF4-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902aa50d70f49d002d896212a171d344c38f7b8ca520837c56c922ac1535c4a3"}, - {file = "netCDF4-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:3291f9ad0c98c49a4dd16aefad1a9abd3a1b884171db6c81bdcee94671cfabe3"}, - {file = "netCDF4-1.7.2-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:e73e3baa0b74afc414e53ff5095748fdbec7fb346eda351e567c23f2f0d247f1"}, - {file = "netCDF4-1.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a51da09258b31776f474c1d47e484fc7214914cdc59edf4cee789ba632184591"}, - {file = "netCDF4-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb95b11804fe051897d1f2044b05d82a1847bc2549631cdd2f655dde7de77a9c"}, - {file = "netCDF4-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d8a848373723f41ef662590b4f5e1832227501c9fd4513e8ad8da58c269977"}, - {file = "netCDF4-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:568ea369e00b581302d77fc5fd0b8f78e520c7e08d0b5af5219ba51f3f1cd694"}, - {file = "netCDF4-1.7.2-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:205a5f1de3ddb993c7c97fb204a923a22408cc2e5facf08d75a8eb89b3e7e1a8"}, - {file = "netCDF4-1.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:96653fc75057df196010818367c63ba6d7e9af603df0a7fe43fcdad3fe0e9e56"}, - {file = "netCDF4-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30d20e56b9ba2c48884eb89c91b63e6c0612b4927881707e34402719153ef17f"}, - {file = "netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6bfd38ba0bde04d56f06c1554714a2ea9dab75811c89450dc3ec57a9d36b80"}, - {file = "netCDF4-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:5c5fbee6134ee1246c397e1508e5297d825aa19221fdf3fa8dc9727ad824d7a5"}, - {file = "netCDF4-1.7.2-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:6bf402c2c7c063474576e5cf89af877d0b0cd097d9316d5bc4fcb22b62f12567"}, - {file = "netCDF4-1.7.2-cp38-cp38-macosx_14_0_arm64.whl", hash = "sha256:5bdf3b34e6fd4210e34fdc5d1a669a22c4863d96f8a20a3928366acae7b3cbbb"}, - {file = "netCDF4-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657774404b9f78a5e4d26506ac9bfe106e4a37238282a70803cc7ce679c5a6cc"}, - {file = "netCDF4-1.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e896d92f01fbf365e33e2513d5a8c4cfe16ff406aae9b6034e5ba1538c8c7a8"}, - {file = "netCDF4-1.7.2-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:eb87c08d1700fe67c301898cf5ba3a3e1f8f2fbb417fcd0e2ac784846b60b058"}, - {file = "netCDF4-1.7.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:59b403032774c723ee749d7f2135be311bad7d00d1db284bebfab58b9d5cdb92"}, - {file = "netCDF4-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572f71459ef4b30e8554dcc4e1e6f55de515acc82a50968b48fe622244a64548"}, - {file = "netCDF4-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f77e72281acc5f331f82271e5f7f014d46f5ca9bcaa5aafe3e46d66cee21320"}, - {file = "netCDF4-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:d0fa7a9674fae8ae4877e813173c3ff7a6beee166b8730bdc847f517b282ed31"}, - {file = "netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce"}, -] - -[package.dependencies] -certifi = "*" -cftime = "*" -numpy = "*" - -[package.extras] -tests = ["Cython", "packaging", "pytest"] - -[[package]] -name = "networkx" -version = "3.2.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.9" -groups = ["main", "export"] -files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "notebook" -version = "7.3.3" -description = "Jupyter Notebook - A web-based notebook environment for interactive computing" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "notebook-7.3.3-py3-none-any.whl", hash = "sha256:b193df0878956562d5171c8e25c9252b8e86c9fcc16163b8ee3fe6c5e3f422f7"}, - {file = "notebook-7.3.3.tar.gz", hash = "sha256:707a313fb882d35f921989eb3d204de942ed5132a44e4aa1fe0e8f24bb9dc25d"}, -] - -[package.dependencies] -jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.3.6,<4.4" -jupyterlab-server = ">=2.27.1,<3" -notebook-shim = ">=0.2,<0.3" -tornado = ">=6.2.0" - -[package.extras] -dev = ["hatch", "pre-commit"] -docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] - -[[package]] -name = "notebook-shim" -version = "0.2.4" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, - {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - -[[package]] -name = "numcodecs" -version = "0.12.1" -description = "A Python package providing buffer compression and transformation codecs for use in data storage and communication applications." -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "numcodecs-0.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d37f628fe92b3699e65831d5733feca74d2e33b50ef29118ffd41c13c677210e"}, - {file = "numcodecs-0.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:941b7446b68cf79f089bcfe92edaa3b154533dcbcd82474f994b28f2eedb1c60"}, - {file = "numcodecs-0.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e79bf9d1d37199ac00a60ff3adb64757523291d19d03116832e600cac391c51"}, - {file = "numcodecs-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82d7107f80f9307235cb7e74719292d101c7ea1e393fe628817f0d635b7384f5"}, - {file = "numcodecs-0.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eeaf42768910f1c6eebf6c1bb00160728e62c9343df9e2e315dc9fe12e3f6071"}, - {file = "numcodecs-0.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:135b2d47563f7b9dc5ee6ce3d1b81b0f1397f69309e909f1a35bb0f7c553d45e"}, - {file = "numcodecs-0.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a191a8e347ecd016e5c357f2bf41fbcb026f6ffe78fff50c77ab12e96701d155"}, - {file = "numcodecs-0.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:21d8267bd4313f4d16f5b6287731d4c8ebdab236038f29ad1b0e93c9b2ca64ee"}, - {file = "numcodecs-0.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2f84df6b8693206365a5b37c005bfa9d1be486122bde683a7b6446af4b75d862"}, - {file = "numcodecs-0.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:760627780a8b6afdb7f942f2a0ddaf4e31d3d7eea1d8498cf0fd3204a33c4618"}, - {file = "numcodecs-0.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c258bd1d3dfa75a9b708540d23b2da43d63607f9df76dfa0309a7597d1de3b73"}, - {file = "numcodecs-0.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e04649ea504aff858dbe294631f098fbfd671baf58bfc04fc48d746554c05d67"}, - {file = "numcodecs-0.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:caf1a1e6678aab9c1e29d2109b299f7a467bd4d4c34235b1f0e082167846b88f"}, - {file = "numcodecs-0.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c17687b1fd1fef68af616bc83f896035d24e40e04e91e7e6dae56379eb59fe33"}, - {file = "numcodecs-0.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29dfb195f835a55c4d490fb097aac8c1bcb96c54cf1b037d9218492c95e9d8c5"}, - {file = "numcodecs-0.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:2f1ba2f4af3fd3ba65b1bcffb717fe65efe101a50a91c368f79f3101dbb1e243"}, - {file = "numcodecs-0.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2fbb12a6a1abe95926f25c65e283762d63a9bf9e43c0de2c6a1a798347dfcb40"}, - {file = "numcodecs-0.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f2207871868b2464dc11c513965fd99b958a9d7cde2629be7b2dc84fdaab013b"}, - {file = "numcodecs-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f"}, - {file = "numcodecs-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136"}, - {file = "numcodecs-0.12.1.tar.gz", hash = "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e"}, -] - -[package.dependencies] -numpy = ">=1.7" - -[package.extras] -docs = ["mock", "numpydoc", "sphinx (<7.0.0)", "sphinx-issues"] -msgpack = ["msgpack"] -test = ["coverage", "flake8", "pytest", "pytest-cov"] -test-extras = ["importlib-metadata"] -zfpy = ["zfpy (>=1.0.0)"] - -[[package]] -name = "numpy" -version = "2.0.2" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -groups = ["main", "export"] -files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, -] -markers = {export = "python_version < \"3.11\""} - -[[package]] -name = "opentelemetry-api" -version = "1.31.0" -description = "OpenTelemetry Python API" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "opentelemetry_api-1.31.0-py3-none-any.whl", hash = "sha256:145b72c6c16977c005c568ec32f4946054ab793d8474a17fd884b0397582c5f2"}, - {file = "opentelemetry_api-1.31.0.tar.gz", hash = "sha256:d8da59e83e8e3993b4726e4c1023cd46f57c4d5a73142e239247e7d814309de1"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<8.7.0" - -[[package]] -name = "orderly-set" -version = "5.3.0" -description = "Orderly set" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "orderly_set-5.3.0-py3-none-any.whl", hash = "sha256:c2c0bfe604f5d3d9b24e8262a06feb612594f37aa3845650548befd7772945d1"}, - {file = "orderly_set-5.3.0.tar.gz", hash = "sha256:80b3d8fdd3d39004d9aad389eaa0eab02c71f0a0511ba3a6d54a935a6c6a0acc"}, -] - -[[package]] -name = "overrides" -version = "7.7.0" -description = "A decorator to automatically detect mismatch when overriding a method." -optional = false -python-versions = ">=3.6" -groups = ["examples"] -files = [ - {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, - {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, -] - -[[package]] -name = "packaging" -version = "24.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev", "docs", "examples", "export"] -files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "paginate" -version = "0.5.7" -description = "Divides large result sets into pages for easier browsing" -optional = false -python-versions = "*" -groups = ["docs"] -files = [ - {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, - {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, -] - -[package.extras] -dev = ["pytest", "tox"] -lint = ["black"] - -[[package]] -name = "pandas" -version = "2.2.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, - {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, - {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, - {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, - {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, - {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, - {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, - {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, -] - -[package.dependencies] -jinja2 = {version = ">=3.1.2", optional = true, markers = "extra == \"output-formatting\""} -numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""} -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tabulate = {version = ">=0.9.0", optional = true, markers = "extra == \"output-formatting\""} -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - -[[package]] -name = "pandocfilters" -version = "1.5.1" -description = "Utilities for writing pandoc filters in python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["examples"] -files = [ - {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, - {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, -] - -[[package]] -name = "parso" -version = "0.8.4" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -groups = ["dev", "examples", "export"] -files = [ - {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, - {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["docopt", "pytest"] - -[[package]] -name = "partd" -version = "1.4.2" -description = "Appendable key-value storage" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, - {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, -] - -[package.dependencies] -locket = "*" -toolz = "*" - -[package.extras] -complete = ["blosc", "numpy (>=1.20.0)", "pandas (>=1.3)", "pyzmq"] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "pathvalidate" -version = "3.2.3" -description = "pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc." -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pathvalidate-3.2.3-py3-none-any.whl", hash = "sha256:5eaf0562e345d4b6d0c0239d0f690c3bd84d2a9a3c4c73b99ea667401b27bee1"}, - {file = "pathvalidate-3.2.3.tar.gz", hash = "sha256:59b5b9278e30382d6d213497623043ebe63f10e29055be4419a9c04c721739cb"}, -] - -[package.extras] -docs = ["Sphinx (>=2.4)", "sphinx_rtd_theme (>=1.2.2)", "urllib3 (<2)"] -readme = ["path (>=13,<18)", "readmemaker (>=1.2.0)"] -test = ["Faker (>=1.0.8)", "allpairspy (>=2)", "click (>=6.2)", "pytest (>=6.0.1)", "pytest-md-report (>=0.6.2)"] - -[[package]] -name = "pexpect" -version = "4.9.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -groups = ["dev", "examples", "export"] -files = [ - {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, - {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, -] -markers = {dev = "sys_platform != \"win32\"", examples = "sys_platform != \"win32\"", export = "python_version < \"3.11\" and sys_platform != \"win32\""} - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pillow" -version = "11.1.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, - {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, - {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, - {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, - {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, - {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, - {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, - {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, - {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, - {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, - {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, - {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, - {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, - {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, - {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, - {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, - {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, - {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, - {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, - {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, - {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, - {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions ; python_version < \"3.10\""] -xmp = ["defusedxml"] - -[[package]] -name = "platformdirs" -version = "4.3.6" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -groups = ["main", "dev", "docs", "examples", "export"] -files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] - -[[package]] -name = "plotly" -version = "6.0.0" -description = "An open-source, interactive data visualization library for Python" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "plotly-6.0.0-py3-none-any.whl", hash = "sha256:f708871c3a9349a68791ff943a5781b1ec04de7769ea69068adcd9202e57653a"}, - {file = "plotly-6.0.0.tar.gz", hash = "sha256:c4aad38b8c3d65e4a5e7dd308b084143b9025c2cc9d5317fc1f1d30958db87d3"}, -] - -[package.dependencies] -narwhals = ">=1.15.1" -packaging = "*" - -[package.extras] -express = ["numpy"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pooch" -version = "1.8.2" -description = "A friend to fetch your data files" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"}, - {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"}, -] - -[package.dependencies] -packaging = ">=20.0" -platformdirs = ">=2.5.0" -requests = ">=2.19.0" - -[package.extras] -progress = ["tqdm (>=4.41.0,<5.0.0)"] -sftp = ["paramiko (>=2.7.0)"] -xxhash = ["xxhash (>=1.4.3)"] - -[[package]] -name = "prometheus-client" -version = "0.21.1" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, - {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.50" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.8.0" -groups = ["dev", "examples", "export"] -files = [ - {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, - {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "7.0.0" -description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." -optional = false -python-versions = ">=3.6" -groups = ["examples", "export"] -files = [ - {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, - {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, - {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, - {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, - {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, - {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, - {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] -test = ["pytest", "pytest-xdist", "setuptools"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -groups = ["dev", "examples", "export"] -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] -markers = {dev = "sys_platform != \"win32\"", examples = "sys_platform != \"win32\" or os_name != \"nt\"", export = "python_version < \"3.11\" and sys_platform != \"win32\""} - -[[package]] -name = "pure-eval" -version = "0.2.3" -description = "Safely evaluate AST nodes without side effects" -optional = false -python-versions = "*" -groups = ["dev", "examples", "export"] -files = [ - {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, - {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "pyarrow" -version = "19.0.1" -description = "Python library for Apache Arrow" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69"}, - {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76aef7f5f7e4a757fddcdcf010a8290958f09e3470ea458c80d26f4316ae89"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d03c9d6f2a3dffbd62671ca070f13fc527bb1867b4ec2b98c7eeed381d4f389a"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:65cf9feebab489b19cdfcfe4aa82f62147218558d8d3f0fc1e9dea0ab8e7905a"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:41f9706fbe505e0abc10e84bf3a906a1338905cbbcf1177b71486b03e6ea6608"}, - {file = "pyarrow-19.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb2335a411b713fdf1e82a752162f72d4a7b5dbc588e32aa18383318b05866"}, - {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90"}, - {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6"}, - {file = "pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466"}, - {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b"}, - {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832"}, - {file = "pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960"}, - {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e45274b20e524ae5c39d7fc1ca2aa923aab494776d2d4b316b49ec7572ca324c"}, - {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d9dedeaf19097a143ed6da37f04f4051aba353c95ef507764d344229b2b740ae"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebfb5171bb5f4a52319344ebbbecc731af3f021e49318c74f33d520d31ae0c4"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a21d39fbdb948857f67eacb5bbaaf36802de044ec36fbef7a1c8f0dd3a4ab2"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:99bc1bec6d234359743b01e70d4310d0ab240c3d6b0da7e2a93663b0158616f6"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1b93ef2c93e77c442c979b0d596af45e4665d8b96da598db145b0fec014b9136"}, - {file = "pyarrow-19.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9d46e06846a41ba906ab25302cf0fd522f81aa2a85a71021826f34639ad31ef"}, - {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c0fe3dbbf054a00d1f162fda94ce236a899ca01123a798c561ba307ca38af5f0"}, - {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:96606c3ba57944d128e8a8399da4812f56c7f61de8c647e3470b417f795d0ef9"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f04d49a6b64cf24719c080b3c2029a3a5b16417fd5fd7c4041f94233af732f3"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9137cf7e1640dce4c190551ee69d478f7121b5c6f323553b319cac936395f6"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7c1bca1897c28013db5e4c83944a2ab53231f541b9e0c3f4791206d0c0de389a"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:58d9397b2e273ef76264b45531e9d552d8ec8a6688b7390b5be44c02a37aade8"}, - {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b9766a47a9cb56fefe95cb27f535038b5a195707a08bf61b180e642324963b46"}, - {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:6c5941c1aac89a6c2f2b16cd64fe76bcdb94b2b1e99ca6459de4e6f07638d755"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd44d66093a239358d07c42a91eebf5015aa54fccba959db899f932218ac9cc8"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:335d170e050bcc7da867a1ed8ffb8b44c57aaa6e0843b156a501298657b1e972"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:1c7556165bd38cf0cd992df2636f8bcdd2d4b26916c6b7e646101aff3c16f76f"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:699799f9c80bebcf1da0983ba86d7f289c5a2a5c04b945e2f2bcf7e874a91911"}, - {file = "pyarrow-19.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8464c9fbe6d94a7fe1599e7e8965f350fd233532868232ab2596a71586c5a429"}, - {file = "pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e"}, -] - -[package.extras] -test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] -markers = {export = "python_version < \"3.10\" and implementation_name == \"pypy\""} - -[[package]] -name = "pydantic" -version = "2.10.6" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, - {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, -] - -[package.dependencies] -annotated-types = ">=0.6.0" -pydantic-core = "2.27.2" -typing-extensions = ">=4.12.2" - -[package.extras] -email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] - -[[package]] -name = "pydantic-core" -version = "2.27.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, - {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pydap" -version = "3.5" -description = "A pure python implementation of the Data Access Protocol." -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pydap-3.5-py3-none-any.whl", hash = "sha256:e157aefdbc26657ef531ecea73907bbf09a503499bfefada2f0ad5f3aaff4021"}, - {file = "pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -docopt-ng = "*" -importlib-metadata = "*" -importlib-resources = "*" -Jinja2 = "*" -lxml = "*" -numpy = "*" -requests = "*" -Webob = "*" - -[package.extras] -cas = ["lxml"] -docs = ["Pygments", "Sphinx", "nbsphinx", "numpydoc", "pandoc", "sphinx-rtd-theme"] -functions = ["coards", "gsw (==3.0.6)"] -handlers-netcdf = ["netCDF4"] -netcdf = ["netCDF4"] -server = ["PasteDeploy", "gunicorn"] -tests = ["WebTest", "coards", "cryptography", "flake8", "gsw", "gunicorn", "pytest (>=3.6)", "pytest-attrib", "pytest-cov", "requests-mock", "werkzeug (>=2.2.2)"] - -[[package]] -name = "pygments" -version = "2.19.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -groups = ["dev", "docs", "examples", "export"] -files = [ - {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, - {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pymdown-extensions" -version = "10.15" -description = "Extension pack for Python Markdown." -optional = false -python-versions = ">=3.8" -groups = ["docs"] -files = [ - {file = "pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f"}, - {file = "pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7"}, -] - -[package.dependencies] -markdown = ">=3.6" -pyyaml = "*" - -[package.extras] -extra = ["pygments (>=2.19.1)"] - -[[package]] -name = "pyparsing" -version = "3.2.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, - {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyproject-api" -version = "1.9.0" -description = "API to interact with the python pyproject.toml based projects" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "pyproject_api-1.9.0-py3-none-any.whl", hash = "sha256:326df9d68dea22d9d98b5243c46e3ca3161b07a1b9b18e213d1e24fd0e605766"}, - {file = "pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e"}, -] - -[package.dependencies] -packaging = ">=24.2" -tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} - -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "setuptools (>=75.8)"] - -[[package]] -name = "pyqt5" -version = "5.15.11" -description = "Python bindings for the Qt cross platform application toolkit" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2"}, - {file = "PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6"}, - {file = "PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1"}, - {file = "PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd"}, - {file = "PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517"}, - {file = "PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52"}, -] - -[package.dependencies] -PyQt5-Qt5 = ">=5.15.2,<5.16.0" -PyQt5-sip = ">=12.15,<13" - -[[package]] -name = "pyqt5-qt5" -version = "5.15.2" -description = "The subset of a Qt installation needed by PyQt5." -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"}, -] - -[[package]] -name = "pyqt5-sip" -version = "12.17.0" -description = "The sip module support for PyQt5" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "PyQt5_sip-12.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec47914cc751608e587c1c2fdabeaf4af7fdc28b9f62796c583bea01c1a1aa3e"}, - {file = "PyQt5_sip-12.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2f2a8dcc7626fe0da73a0918e05ce2460c7a14ddc946049310e6e35052105434"}, - {file = "PyQt5_sip-12.17.0-cp310-cp310-win32.whl", hash = "sha256:0c75d28b8282be3c1d7dbc76950d6e6eba1e334783224e9b9835ce1a9c64f482"}, - {file = "PyQt5_sip-12.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c4bc535bae0dfa764e8534e893619fe843ce5a2e25f901c439bcb960114f686"}, - {file = "PyQt5_sip-12.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2c912807dd638644168ea8c7a447bfd9d85a19471b98c2c588c4d2e911c09b0a"}, - {file = "PyQt5_sip-12.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:71514a7d43b44faa1d65a74ad2c5da92c03a251bdc749f009c313f06cceacc9a"}, - {file = "PyQt5_sip-12.17.0-cp311-cp311-win32.whl", hash = "sha256:023466ae96f72fbb8419b44c3f97475de6642fa5632520d0f50fc1a52a3e8200"}, - {file = "PyQt5_sip-12.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb565469d08dcb0a427def0c45e722323beb62db79454260482b6948bfd52d47"}, - {file = "PyQt5_sip-12.17.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ea08341c8a5da00c81df0d689ecd4ee47a95e1ecad9e362581c92513f2068005"}, - {file = "PyQt5_sip-12.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a92478d6808040fbe614bb61500fbb3f19f72714b99369ec28d26a7e3494115"}, - {file = "PyQt5_sip-12.17.0-cp312-cp312-win32.whl", hash = "sha256:b0ff280b28813e9bfd3a4de99490739fc29b776dc48f1c849caca7239a10fc8b"}, - {file = "PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c"}, - {file = "PyQt5_sip-12.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c7a7ff355e369616b6bcb41d45b742327c104b2bf1674ec79b8d67f8f2fa9543"}, - {file = "PyQt5_sip-12.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:419b9027e92b0b707632c370cfc6dc1f3b43c6313242fc4db57a537029bd179c"}, - {file = "PyQt5_sip-12.17.0-cp313-cp313-win32.whl", hash = "sha256:351beab964a19f5671b2a3e816ecf4d3543a99a7e0650f88a947fea251a7589f"}, - {file = "PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca"}, - {file = "PyQt5_sip-12.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d65a9c1b4cbbd8e856254609f56e897d2cb5c903f77b75fb720cb3a32c76b92b"}, - {file = "PyQt5_sip-12.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:32b03e7e77ecd7b4119eba486b0706fa59b490bcceb585f9b6ddec8a582082db"}, - {file = "PyQt5_sip-12.17.0-cp39-cp39-win32.whl", hash = "sha256:5b6c734f4ad28f3defac4890ed747d391d246af279200935d49953bc7d915b8c"}, - {file = "PyQt5_sip-12.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:855e8f5787d57e26a48d8c3de1220a8e92ab83be8d73966deac62fdae03ea2f9"}, - {file = "pyqt5_sip-12.17.0.tar.gz", hash = "sha256:682dadcdbd2239af9fdc0c0628e2776b820e128bec88b49b8d692fe682f90b4f"}, -] - -[[package]] -name = "pyqtgraph" -version = "0.13.7" -description = "Scientific Graphics and GUI Library for Python" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a"}, - {file = "pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3"}, -] - -[package.dependencies] -numpy = ">=1.22.0" - -[[package]] -name = "pyserial" -version = "3.5" -description = "Python Serial Port Extension" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, - {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, -] - -[package.extras] -cp2110 = ["hidapi"] - -[[package]] -name = "pytest" -version = "8.3.5" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, - {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "6.1.1" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, - {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, -] - -[package.dependencies] -coverage = {version = ">=7.5", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["docs", "examples", "export"] -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-json-logger" -version = "3.3.0" -description = "JSON Log Formatter for the Python Logging Package" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, - {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, -] - -[package.dependencies] -typing_extensions = {version = "*", markers = "python_version < \"3.10\""} - -[package.extras] -dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] - -[[package]] -name = "pytz" -version = "2025.1" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, - {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, -] - -[[package]] -name = "pyvisa" -version = "1.14.1" -description = "Python VISA bindings for GPIB, RS232, TCPIP and USB instruments" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "PyVISA-1.14.1-py3-none-any.whl", hash = "sha256:6e4dfc9b6029b4f00d0d4960348c4889c2747aa7f83276950d48a349eab36a45"}, - {file = "PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79"}, -] - -[package.dependencies] -typing-extensions = "*" - -[[package]] -name = "pywin32" -version = "310" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -groups = ["examples", "export"] -files = [ - {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, - {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, - {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, - {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, - {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, - {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, - {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, - {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, - {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, - {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, - {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, - {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, - {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, - {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, - {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, - {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, -] -markers = {examples = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"", export = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" and python_version < \"3.10\""} - -[[package]] -name = "pywinpty" -version = "2.0.15" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.9" -groups = ["examples"] -markers = "os_name == \"nt\"" -files = [ - {file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"}, - {file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"}, - {file = "pywinpty-2.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc"}, - {file = "pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408"}, - {file = "pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901"}, - {file = "pywinpty-2.0.15-cp39-cp39-win_amd64.whl", hash = "sha256:d261cd88fcd358cfb48a7ca0700db3e1c088c9c10403c9ebc0d8a8b57aa6a117"}, - {file = "pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -groups = ["docs", "examples", "export"] -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " -optional = false -python-versions = ">=3.6" -groups = ["docs"] -files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] - -[package.dependencies] -pyyaml = "*" - -[[package]] -name = "pyzmq" -version = "26.3.0" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "pyzmq-26.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1586944f4736515af5c6d3a5b150c7e8ca2a2d6e46b23057320584d6f2438f4a"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7efc695d1fc9f72d91bf9b6c6fe2d7e1b4193836ec530a98faf7d7a7577a58"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd84441e4021cec6e4dd040550386cd9c9ea1d9418ea1a8002dbb7b576026b2b"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9176856f36c34a8aa5c0b35ddf52a5d5cd8abeece57c2cd904cfddae3fd9acd3"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:49334faa749d55b77f084389a80654bf2e68ab5191c0235066f0140c1b670d64"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd30fc80fe96efb06bea21667c5793bbd65c0dc793187feb39b8f96990680b00"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b2eddfbbfb473a62c3a251bb737a6d58d91907f6e1d95791431ebe556f47d916"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:70b3acb9ad729a53d4e751dace35404a024f188aad406013454216aba5485b4e"}, - {file = "pyzmq-26.3.0-cp310-cp310-win32.whl", hash = "sha256:c1bd75d692cd7c6d862a98013bfdf06702783b75cffbf5dae06d718fecefe8f2"}, - {file = "pyzmq-26.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d7165bcda0dbf203e5ad04d79955d223d84b2263df4db92f525ba370b03a12ab"}, - {file = "pyzmq-26.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:e34a63f71d2ecffb3c643909ad2d488251afeb5ef3635602b3448e609611a7ed"}, - {file = "pyzmq-26.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:2833602d9d42c94b9d0d2a44d2b382d3d3a4485be018ba19dddc401a464c617a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8270d104ec7caa0bdac246d31d48d94472033ceab5ba142881704350b28159c"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c208a977843d18d3bd185f323e4eaa912eb4869cb230947dc6edd8a27a4e558a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eddc2be28a379c218e0d92e4a432805dcb0ca5870156a90b54c03cd9799f9f8a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c0b519fa2159c42272f8a244354a0e110d65175647e5185b04008ec00df9f079"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1595533de3a80bf8363372c20bafa963ec4bf9f2b8f539b1d9a5017f430b84c9"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bbef99eb8d18ba9a40f00e8836b8040cdcf0f2fa649684cf7a66339599919d21"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:979486d444ca3c469cd1c7f6a619ce48ff08b3b595d451937db543754bfacb65"}, - {file = "pyzmq-26.3.0-cp311-cp311-win32.whl", hash = "sha256:4b127cfe10b4c56e4285b69fd4b38ea1d368099ea4273d8fb349163fce3cd598"}, - {file = "pyzmq-26.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cf736cc1298ef15280d9fcf7a25c09b05af016656856dc6fe5626fd8912658dd"}, - {file = "pyzmq-26.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2dc46ec09f5d36f606ac8393303149e69d17121beee13c8dac25e2a2078e31c4"}, - {file = "pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66"}, - {file = "pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37"}, - {file = "pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495"}, - {file = "pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d"}, - {file = "pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36"}, - {file = "pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14"}, - {file = "pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca"}, - {file = "pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce"}, - {file = "pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f"}, - {file = "pyzmq-26.3.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18183cc3851b995fdc7e5f03d03b8a4e1b12b0f79dff1ec1da75069af6357a05"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da87e977f92d930a3683e10ba2b38bcc59adfc25896827e0b9d78b208b7757a6"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf6db401f4957afbf372a4730c6d5b2a234393af723983cbf4bcd13d54c71e1a"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03caa2ffd64252122139d50ec92987f89616b9b92c9ba72920b40e92709d5e26"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fbf206e5329e20937fa19bd41cf3af06d5967f8f7e86b59d783b26b40ced755c"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6fb539a6382a048308b409d8c66d79bf636eda1b24f70c78f2a1fd16e92b037b"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7897b8c8bbbb2bd8cad887bffcb07aede71ef1e45383bd4d6ac049bf0af312a4"}, - {file = "pyzmq-26.3.0-cp38-cp38-win32.whl", hash = "sha256:91dead2daca698ae52ce70ee2adbb94ddd9b5f96877565fd40aa4efd18ecc6a3"}, - {file = "pyzmq-26.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:8c088e009a6d6b9f563336adb906e3a8d3fd64db129acc8d8fd0e9fe22b2dac8"}, - {file = "pyzmq-26.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2eaed0d911fb3280981d5495978152fab6afd9fe217fd16f411523665089cef1"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7998b60ef1c105846fb3bfca494769fde3bba6160902e7cd27a8df8257890ee9"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:96c0006a8d1d00e46cb44c8e8d7316d4a232f3d8f2ed43179d4578dbcb0829b6"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e17cc198dc50a25a0f245e6b1e56f692df2acec3ccae82d1f60c34bfb72bbec"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:92a30840f4f2a31f7049d0a7de5fc69dd03b19bd5d8e7fed8d0bde49ce49b589"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f52eba83272a26b444f4b8fc79f2e2c83f91d706d693836c9f7ccb16e6713c31"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:952085a09ff32115794629ba47f8940896d7842afdef1283332109d38222479d"}, - {file = "pyzmq-26.3.0-cp39-cp39-win32.whl", hash = "sha256:0240289e33e3fbae44a5db73e54e955399179332a6b1d47c764a4983ec1524c3"}, - {file = "pyzmq-26.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b2db7c82f08b8ce44c0b9d1153ce63907491972a7581e8b6adea71817f119df8"}, - {file = "pyzmq-26.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:2d3459b6311463c96abcb97808ee0a1abb0d932833edb6aa81c30d622fd4a12d"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad03f4252d9041b0635c37528dfa3f44b39f46024ae28c8567f7423676ee409b"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f3dfb68cf7bf4cfdf34283a75848e077c5defa4907506327282afe92780084d"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:356ec0e39c5a9cda872b65aca1fd8a5d296ffdadf8e2442b70ff32e73ef597b1"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:749d671b0eec8e738bbf0b361168369d8c682b94fcd458c20741dc4d69ef5278"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f950f17ae608e0786298340163cac25a4c5543ef25362dd5ddb6dcb10b547be9"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4fc9903a73c25be9d5fe45c87faababcf3879445efa16140146b08fccfac017"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c15b69af22030960ac63567e98ad8221cddf5d720d9cf03d85021dfd452324ef"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cf9ab0dff4dbaa2e893eb608373c97eb908e53b7d9793ad00ccbd082c0ee12f"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ec332675f6a138db57aad93ae6387953763f85419bdbd18e914cb279ee1c451"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:eb96568a22fe070590942cd4780950e2172e00fb033a8b76e47692583b1bd97c"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:009a38241c76184cb004c869e82a99f0aee32eda412c1eb44df5820324a01d25"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c22a12713707467abedc6d75529dd365180c4c2a1511268972c6e1d472bd63e"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1614fcd116275d24f2346ffca4047a741c546ad9d561cbf7813f11226ca4ed2c"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e2cafe7e9c7fed690e8ecf65af119f9c482923b5075a78f6f7629c63e1b4b1d"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:14e0b81753424bd374075df6cc30b87f2c99e5f022501d97eff66544ca578941"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:21c6ddb98557a77cfe3366af0c5600fb222a1b2de5f90d9cd052b324e0c295e8"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fc81d5d60c9d40e692de14b8d884d43cf67562402b931681f0ccb3ce6b19875"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52b064fafef772d0f5dbf52d4c39f092be7bc62d9a602fe6e82082e001326de3"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b72206eb041f780451c61e1e89dbc3705f3d66aaaa14ee320d4f55864b13358a"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab78dc21c7b1e13053086bcf0b4246440b43b5409904b73bfd1156654ece8a1"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0b42403ad7d1194dca9574cd3c56691c345f4601fa2d0a33434f35142baec7ac"}, - {file = "pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "qblox-instruments" -version = "0.11.2" -description = "Instrument drivers for Qblox devices." -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504"}, -] - -[package.dependencies] -fastjsonschema = "*" -ifaddr = "*" -numpy = "*" -qcodes = ">=0.20.0" -spirack = "*" - -[package.extras] -dev = ["anybadge", "pylint (==2.17.5)", "pylint-exit", "pytest", "pytest-cov", "pytest-runner", "scipy", "twine"] - -[[package]] -name = "qcodes" -version = "0.46.0" -description = "Python-based data acquisition framework developed by the Copenhagen / Delft / Sydney / Microsoft quantum computing consortium" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "qcodes-0.46.0-py3-none-any.whl", hash = "sha256:6c7de543ef6048d82fad755a8ef5c4e63f866085314e2fb69f1a839bb39d0eff"}, - {file = "qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99"}, -] - -[package.dependencies] -broadbean = ">=0.9.1" -cf-xarray = ">=0.8.4" -dask = ">=2022.1.0" -h5netcdf = ">=0.10.0,<0.14.0 || >0.14.0" -h5py = ">=3.0.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -ipykernel = ">=6.6.0" -ipython = ">=8.10.0" -ipywidgets = ">=8.0.0,<9.0.0" -jsonschema = ">=4.9.0" -matplotlib = ">=3.3.3" -numpy = ">=1.21.0" -opentelemetry-api = ">=1.15.0" -packaging = ">=20.0" -pandas = ">=1.2.0" -pillow = ">=9.0.0" -pyarrow = ">=11.0.0" -pyvisa = ">=1.11.0,<1.15.0" -"ruamel.yaml" = ">=0.16.0,<0.16.6 || >0.16.6" -tabulate = ">=0.8.0" -tornado = ">=6.3.3" -tqdm = ">=4.59.0" -typing-extensions = ">=4.5.0" -uncertainties = ">=3.1.4" -versioningit = ">=2.2.1" -websockets = ">=9.1" -wrapt = {version = ">=1.13.2", markers = "python_version < \"3.12\""} -xarray = ">=2022.06.0" - -[package.extras] -docs = ["PyVisa-sim (>=0.6.0)", "autodocsumm (>=0.2.9)", "jinja2 (>=3.1.3)", "nbsphinx (>=0.8.9)", "qcodes-loop (>=0.1.1)", "scipy (>=1.7.0)", "sphinx (>=7.3.5)", "sphinx-favicon (>=1.0)", "sphinx-issues (>=3.0.1)", "sphinx-jsonschema (>=1.19.1)", "sphinx-rtd-theme (>=1.0.0)", "sphinxcontrib-towncrier (>=0.3.0a0)", "towncrier (>=22.8.0)"] -loop = ["qcodes-loop (>=0.1.2)"] -opencensus = ["opencensus (>=0.7.10)", "opencensus-ext-azure (>=1.0.4,<2.0.0)"] -refactor = ["libcst (>=1.2.0)"] -test = ["PyVisa-sim (>=0.6.0)", "coverage[toml] (>=6.0.0)", "deepdiff (>=5.0.2)", "hypothesis (>=6.85.0)", "jinja2 (>=3.1.3)", "libcst (>=1.2.0)", "lxml (>=4.6.0)", "lxml-stubs (>=0.4.0)", "mypy (>=0.971)", "pandas-stubs (>=1.2.0.1)", "pytest (>=7.2.0)", "pytest-asyncio (>=0.19.0)", "pytest-cov (>=3.0.0)", "pytest-mock (>=3.0.0)", "pytest-rerunfailures (>=10.0)", "pytest-xdist (>=2.0.0)", "qcodes-loop (>=0.1.1)", "sphinx (>=4.5.0)", "types-jsonschema (>=4.16.0)", "types-pywin32 (>=305.0.0.7)", "types-requests (>=0.1.8)", "types-setuptools (>=57.0.0)", "types-tabulate (>=0.1.0)", "types-tqdm (>=4.64.6)", "zhinst.qcodes (>=0.5)"] -zurichinstruments = ["zhinst-qcodes (>=0.3)"] - -[[package]] -name = "qcodes-loop" -version = "0.1.3" -description = "Features previously in QCoDeS" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a"}, - {file = "qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c"}, -] - -[package.dependencies] -h5py = ">=3.0.0" -hickle = "*" -ipython = ">=7.31.1,<8.0.0 || >8.0.0" -lazy-loader = ">=0.1" -matplotlib = ">=3.3.0" -numpy = ">=1.21.0" -pandas = ">=1.0.0" -qcodes = ">=0.42.0" -versioningit = ">=2.2.1" -xarray = ">=0.18.0" - -[package.extras] -docs = ["PyQt5 (>=5.15.0)", "nbsphinx (>=0.8.9)", "pyqtgraph (>=0.11.0)", "requests", "slack-sdk (>=3.4.2)", "sphinx (>=4.5.0,<9.0.0)", "urllib3"] -qtplot = ["pyqtgraph (>=0.11.0)"] -slack = ["requests", "slack-sdk (>=3.4.2)", "urllib3"] -test = ["PyQt5 (>=5.15.0)", "coverage[toml] (>=6.0.0)", "hypothesis (>=5.49.0)", "pyqtgraph (>=0.11.0)", "pytest (>=6.1.0)", "pytest-mock (>=3.0.0)", "pytest-xdist (>=2.0.0)", "requests", "slack-sdk (>=3.4.2)", "urllib3"] - -[[package]] -name = "quantify-core" -version = "0.7.9" -description = "Quantify-core is a unified quantum computing, solid-state and pulse sequencing physical experimentation framework." -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "quantify_core-0.7.9-py3-none-any.whl", hash = "sha256:9aa4277371058a114d422e0c398efea6fc21024ce89573589d386ef2848d4291"}, - {file = "quantify_core-0.7.9.tar.gz", hash = "sha256:bc0aabe3317577a9bf0d499fc4ac9ae1fcf63e18d0637fe18940e2fe18250f49"}, -] - -[package.dependencies] -adaptive = "*" -appnope = "*" -dataclasses-json = "*" -deepdiff = "*" -dill = "*" -filelock = "*" -h5netcdf = "*" -jsonschema = "*" -lmfit = ">=1.0.3" -matplotlib = "!=3.5.0" -methodtools = "*" -numpy = "!=1.19.4" -pyqt5 = ">5.15.2" -pyqtgraph = "*" -qcodes = ">=0.37.0" -qcodes-loop = "*" -scikit-learn = "*" -scipy = ">=1.5.0,<1.6.0 || >1.6.0" -typing-extensions = "*" -uncertainties = "*" -xarray = {version = ">=0.19.0", extras = ["io"]} - -[package.extras] -dev = ["black", "nbstripout", "pre-commit", "pre-commit-hooks", "pylint", "pyright", "pytest-cov", "pytest-xdist", "quantify-core[docs,test]", "ruff", "scikit-optimize", "sphinx-autobuild"] -docs = ["jupyter-sphinx (>=0.4.0)", "myst-nb", "pydata-sphinx-theme", "rich[jupyter]", "scanpydoc", "sphinx", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema (>=1.15)", "sphinx-togglebutton", "sphinxcontrib-bibtex"] -test = ["diff-cover", "pytest", "pytest-mock", "pytest-mpl"] - -[[package]] -name = "quantify-scheduler" -version = "0.18.2" -description = "Quantify-scheduler is a Python package for writing quantum programs featuring a hybrid gate-pulse control model with explicit timing control." -optional = false -python-versions = "<3.10,>=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910"}, - {file = "quantify_scheduler-0.18.2-py3-none-any.whl", hash = "sha256:761d1e85f53e3744a28a3e56382d162ada2face3b127e83ea0e40a050566a812"}, -] - -[package.dependencies] -columnar = "*" -dataclasses-json = "*" -fastjsonschema = "*" -jinja2 = ">=3.1.2" -matplotlib = "*" -networkx = "*" -numpy = "*" -pandas = {version = "*", extras = ["output-formatting"]} -pathvalidate = "*" -plotly = "*" -pydantic = ">=2.0" -qblox-instruments = ">=0.11.0,<0.12.0" -qcodes = ">=0.32.0" -quantify-core = ">=0.7.1" -rich = {version = "*", extras = ["jupyter"]} -scipy = "*" -xxhash = "*" -zhinst = "21.8.20515" -zhinst-qcodes = "0.1.4" -zhinst-toolkit = "0.1.5" - -[package.extras] -dev = ["black", "coverage", "eval-type-backport ; python_version < \"3.9\"", "pre-commit", "pre-commit-hooks", "prospector", "pyright (!=1.1.309)", "pytest-cov", "pytest-xdist", "quantify-scheduler[docs,test]", "ruff", "sphinx-autobuild"] -docs = ["astroid (<3.0)", "hvplot", "jupyter-sphinx (>=0.4.0)", "jupytext", "myst-nb", "pydata-sphinx-theme", "pylint", "rich[jupyter]", "scanpydoc (<0.12)", "sphinx", "sphinx-autoapi", "sphinx-autodoc-typehints", "sphinx-design", "sphinx-jsonschema", "sphinx-togglebutton", "sphinxcontrib-bibtex", "sphinxcontrib-mermaid"] -test = ["pytest", "pytest-mock"] - -[[package]] -name = "referencing" -version = "0.36.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.9" -groups = ["examples", "export"] -files = [ - {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, - {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" -typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -groups = ["docs", "examples", "export"] -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["examples"] -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["examples"] -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "rich" -version = "13.9.4" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, - {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, -] - -[package.dependencies] -ipywidgets = {version = ">=7.5.1,<9", optional = true, markers = "extra == \"jupyter\""} -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rpds-py" -version = "0.23.1" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.9" -groups = ["examples", "export"] -files = [ - {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, - {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a"}, - {file = "rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12"}, - {file = "rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda"}, - {file = "rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590"}, - {file = "rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522"}, - {file = "rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6"}, - {file = "rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf"}, - {file = "rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c"}, - {file = "rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad"}, - {file = "rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057"}, - {file = "rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165"}, - {file = "rpds_py-0.23.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935"}, - {file = "rpds_py-0.23.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93"}, - {file = "rpds_py-0.23.1-cp313-cp313-win32.whl", hash = "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd"}, - {file = "rpds_py-0.23.1-cp313-cp313-win_amd64.whl", hash = "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70"}, - {file = "rpds_py-0.23.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731"}, - {file = "rpds_py-0.23.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5"}, - {file = "rpds_py-0.23.1-cp313-cp313t-win32.whl", hash = "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7"}, - {file = "rpds_py-0.23.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d"}, - {file = "rpds_py-0.23.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19"}, - {file = "rpds_py-0.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f"}, - {file = "rpds_py-0.23.1-cp39-cp39-win32.whl", hash = "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495"}, - {file = "rpds_py-0.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00"}, - {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "ruamel-yaml" -version = "0.18.10" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, - {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.12" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "platform_python_implementation == \"CPython\" and python_version < \"3.10\"" -files = [ - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, - {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, - {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, - {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, - {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, - {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, - {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, -] - -[[package]] -name = "ruff" -version = "0.11.11" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "ruff-0.11.11-py3-none-linux_armv6l.whl", hash = "sha256:9924e5ae54125ed8958a4f7de320dab7380f6e9fa3195e3dc3b137c6842a0092"}, - {file = "ruff-0.11.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8a93276393d91e952f790148eb226658dd275cddfde96c6ca304873f11d2ae4"}, - {file = "ruff-0.11.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d6e333dbe2e6ae84cdedefa943dfd6434753ad321764fd937eef9d6b62022bcd"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7885d9a5e4c77b24e8c88aba8c80be9255fa22ab326019dac2356cff42089fc6"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b5ab797fcc09121ed82e9b12b6f27e34859e4227080a42d090881be888755d4"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e231ff3132c1119ece836487a02785f099a43992b95c2f62847d29bace3c75ac"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a97c9babe1d4081037a90289986925726b802d180cca784ac8da2bbbc335f709"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8c4ddcbe8a19f59f57fd814b8b117d4fcea9bee7c0492e6cf5fdc22cfa563c8"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6224076c344a7694c6fbbb70d4f2a7b730f6d47d2a9dc1e7f9d9bb583faf390b"}, - {file = "ruff-0.11.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:882821fcdf7ae8db7a951df1903d9cb032bbe838852e5fc3c2b6c3ab54e39875"}, - {file = "ruff-0.11.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:dcec2d50756463d9df075a26a85a6affbc1b0148873da3997286caf1ce03cae1"}, - {file = "ruff-0.11.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99c28505ecbaeb6594701a74e395b187ee083ee26478c1a795d35084d53ebd81"}, - {file = "ruff-0.11.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9263f9e5aa4ff1dec765e99810f1cc53f0c868c5329b69f13845f699fe74f639"}, - {file = "ruff-0.11.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:64ac6f885e3ecb2fdbb71de2701d4e34526651f1e8503af8fb30d4915a3fe345"}, - {file = "ruff-0.11.11-py3-none-win32.whl", hash = "sha256:1adcb9a18802268aaa891ffb67b1c94cd70578f126637118e8099b8e4adcf112"}, - {file = "ruff-0.11.11-py3-none-win_amd64.whl", hash = "sha256:748b4bb245f11e91a04a4ff0f96e386711df0a30412b9fe0c74d5bdc0e4a531f"}, - {file = "ruff-0.11.11-py3-none-win_arm64.whl", hash = "sha256:6c51f136c0364ab1b774767aa8b86331bd8e9d414e2d107db7a2189f35ea1f7b"}, - {file = "ruff-0.11.11.tar.gz", hash = "sha256:7774173cc7c1980e6bf67569ebb7085989a78a103922fb83ef3dfe230cd0687d"}, -] - -[[package]] -name = "schema" -version = "0.7.7" -description = "Simple data validation library" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde"}, - {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, -] - -[[package]] -name = "scikit-learn" -version = "1.6.1" -description = "A set of python modules for machine learning and data mining" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"}, - {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"}, - {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5"}, - {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b"}, - {file = "scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002"}, - {file = "scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33"}, - {file = "scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d"}, - {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2"}, - {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8"}, - {file = "scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415"}, - {file = "scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b"}, - {file = "scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2"}, - {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f"}, - {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86"}, - {file = "scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52"}, - {file = "scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322"}, - {file = "scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1"}, - {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348"}, - {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97"}, - {file = "scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f"}, - {file = "scikit_learn-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6849dd3234e87f55dce1db34c89a810b489ead832aaf4d4550b7ea85628be6c1"}, - {file = "scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e7be3fa5d2eb9be7d77c3734ff1d599151bb523674be9b834e8da6abe132f44e"}, - {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107"}, - {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422"}, - {file = "scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b"}, - {file = "scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e"}, -] - -[package.dependencies] -joblib = ">=1.2.0" -numpy = ">=1.19.5" -scipy = ">=1.6.0" -threadpoolctl = ">=3.1.0" - -[package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] -examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] -maintenance = ["conda-lock (==2.5.6)"] -tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.5.1)", "scikit-image (>=0.17.2)"] - -[[package]] -name = "scipy" -version = "1.13.1" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<2.3" - -[package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "send2trash" -version = "1.8.3" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["examples"] -files = [ - {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, - {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] -objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] -win32 = ["pywin32 ; sys_platform == \"win32\""] - -[[package]] -name = "setuptools" -version = "76.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.9" -groups = ["examples", "export"] -files = [ - {file = "setuptools-76.0.0-py3-none-any.whl", hash = "sha256:199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6"}, - {file = "setuptools-76.0.0.tar.gz", hash = "sha256:43b4ee60e10b0d0ee98ad11918e114c70701bc6051662a9a675a0496c1a158f4"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["docs", "examples", "export"] -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "sortedcollections" -version = "2.1.0" -description = "Python Sorted Collections" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c"}, - {file = "sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd"}, -] - -[package.dependencies] -sortedcontainers = "*" - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "soupsieve" -version = "2.6" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, - {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "spirack" -version = "0.2.5" -description = "Drivers for the QuTech SPI-rack" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "spirack-0.2.5-py3-none-any.whl", hash = "sha256:ac144f0e43c7770281b08836f83c6f68369354397fd1394bb18a87af02d17b85"}, - {file = "spirack-0.2.5.tar.gz", hash = "sha256:c1755286a3d851dd84e0d3e3021383a516748edd4b90a56ddbe7e446b0e1ec30"}, -] - -[package.dependencies] -numpy = "*" -pyserial = "*" - -[[package]] -name = "stack-data" -version = "0.6.3" -description = "Extract data from python stack frames and tracebacks for informative displays" -optional = false -python-versions = "*" -groups = ["dev", "examples", "export"] -files = [ - {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, - {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.dependencies] -asttokens = ">=2.1.0" -executing = ">=1.2.0" -pure-eval = "*" - -[package.extras] -tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] - -[[package]] -name = "sympy" -version = "1.13.3" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples"] -files = [ - {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, - {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, -] - -[package.dependencies] -mpmath = ">=1.1.0,<1.4" - -[package.extras] -dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] - -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - -[[package]] -name = "terminado" -version = "0.18.1" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, - {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] -typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] - -[[package]] -name = "threadpoolctl" -version = "3.6.0" -description = "threadpoolctl" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, - {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, -] - -[[package]] -name = "tinycss2" -version = "1.4.0" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, - {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["pytest", "ruff"] - -[[package]] -name = "tomli" -version = "2.2.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev", "examples", "export"] -files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, -] -markers = {main = "python_version < \"3.11\"", dev = "python_version < \"3.11\"", examples = "python_version < \"3.11\"", export = "python_version < \"3.10\""} - -[[package]] -name = "toolz" -version = "1.0.0" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, - {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, -] - -[[package]] -name = "tornado" -version = "6.4.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">=3.8" -groups = ["examples", "export"] -files = [ - {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, - {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, - {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, - {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, - {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "tox" -version = "4.26.0" -description = "tox is a generic virtualenv management and test command line tool" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "tox-4.26.0-py3-none-any.whl", hash = "sha256:75f17aaf09face9b97bd41645028d9f722301e912be8b4c65a3f938024560224"}, - {file = "tox-4.26.0.tar.gz", hash = "sha256:a83b3b67b0159fa58e44e646505079e35a43317a62d2ae94725e0586266faeca"}, -] - -[package.dependencies] -cachetools = ">=5.5.1" -chardet = ">=5.2" -colorama = ">=0.4.6" -filelock = ">=3.16.1" -packaging = ">=24.2" -platformdirs = ">=4.3.6" -pluggy = ">=1.5" -pyproject-api = ">=1.8" -tomli = {version = ">=2.2.1", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.12.2", markers = "python_version < \"3.11\""} -virtualenv = ">=20.31" - -[package.extras] -test = ["devpi-process (>=1.0.2)", "pytest (>=8.3.4)", "pytest-mock (>=3.14)"] - -[[package]] -name = "tqdm" -version = "4.67.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, - {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] -discord = ["requests"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.14.3" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.8" -groups = ["dev", "examples", "export"] -files = [ - {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, - {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, -] -markers = {export = "python_version < \"3.11\""} - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20241206" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, - {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev", "docs", "examples", "export"] -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] -markers = {main = "python_version < \"3.11\"", docs = "python_version < \"3.11\"", export = "python_version < \"3.10\""} - -[[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, -] - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "tzdata" -version = "2025.1" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, - {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, -] - -[[package]] -name = "uncertainties" -version = "3.2.2" -description = "calculations with values with uncertainties, error propagation" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7"}, - {file = "uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b"}, -] - -[package.extras] -all = ["uncertainties[arrays,doc,test]"] -arrays = ["numpy"] -doc = ["python-docs-theme", "sphinx", "sphinx-copybutton"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -groups = ["examples"] -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - -[[package]] -name = "urllib3" -version = "2.3.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -groups = ["docs", "examples", "export"] -files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, -] -markers = {export = "python_version < \"3.10\""} - -[package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "versioningit" -version = "3.1.2" -description = "Versioning It with your Version In Git" -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "versioningit-3.1.2-py3-none-any.whl", hash = "sha256:33c0905aeac7877b562171387c2c98af87b391aa9195f095455f21ddc47d4636"}, - {file = "versioningit-3.1.2.tar.gz", hash = "sha256:4db83ed99f56b07d83940bee3445ca46ca120d13b6b304cdb5fb44e5aa4edec0"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -packaging = ">=17.1" -tomli = {version = ">=1.2,<3.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "virtualenv" -version = "20.31.2" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -files = [ - {file = "virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, - {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] - -[[package]] -name = "watchdog" -version = "6.0.0" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.9" -groups = ["docs"] -files = [ - {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, - {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, - {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, - {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, - {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, - {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, - {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, - {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, - {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, - {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, - {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "wcwidth" -version = "0.2.13" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -groups = ["dev", "examples", "export"] -files = [ - {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, - {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, -] -markers = {export = "python_version < \"3.11\""} - -[[package]] -name = "webcolors" -version = "24.11.1" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.9" -groups = ["examples"] -files = [ - {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, - {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -groups = ["examples"] -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "webob" -version = "1.8.9" -description = "WSGI request and response object" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9"}, - {file = "webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589"}, -] - -[package.extras] -docs = ["Sphinx (>=1.7.5)", "pylons-sphinx-themes"] -testing = ["coverage", "pytest (>=3.1.0)", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "websocket-client" -version = "1.8.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.8" -groups = ["examples"] -files = [ - {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, - {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, -] - -[package.extras] -docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - -[[package]] -name = "websockets" -version = "15.0.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c"}, - {file = "websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256"}, - {file = "websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf"}, - {file = "websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85"}, - {file = "websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597"}, - {file = "websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9"}, - {file = "websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4"}, - {file = "websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa"}, - {file = "websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880"}, - {file = "websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411"}, - {file = "websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123"}, - {file = "websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f"}, - {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, -] - -[[package]] -name = "widgetsnbextension" -version = "4.0.13" -description = "Jupyter interactive widgets for Jupyter Notebook" -optional = false -python-versions = ">=3.7" -groups = ["examples", "export"] -files = [ - {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, - {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, -] -markers = {export = "python_version < \"3.10\""} - -[[package]] -name = "wirerope" -version = "1.0.0" -description = "'Turn functions and methods into fully controllable objects'" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6"}, - {file = "wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0"}, -] - -[package.dependencies] -six = ">=1.11.0" - -[package.extras] -doc = ["sphinx"] -test = ["pytest (>=4.6.7)", "pytest-checkdocs (>=1.2.5) ; python_version < \"3\"", "pytest-checkdocs (>=2.9.0) ; python_version >= \"3\"", "pytest-cov (>=2.6.1)"] - -[[package]] -name = "wrapt" -version = "1.17.2" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.8" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, - {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, - {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, - {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, - {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, - {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, - {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, - {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, - {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, - {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, - {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, - {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, - {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, - {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, - {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, - {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, - {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, - {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, - {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, -] - -[[package]] -name = "xarray" -version = "2024.7.0" -description = "N-D labeled arrays and datasets in Python" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64"}, - {file = "xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638"}, -] - -[package.dependencies] -cftime = {version = "*", optional = true, markers = "extra == \"io\""} -fsspec = {version = "*", optional = true, markers = "extra == \"io\""} -h5netcdf = {version = "*", optional = true, markers = "extra == \"io\""} -netCDF4 = {version = "*", optional = true, markers = "extra == \"io\""} -numpy = ">=1.23" -packaging = ">=23.1" -pandas = ">=2.0" -pooch = {version = "*", optional = true, markers = "extra == \"io\""} -pydap = {version = "*", optional = true, markers = "python_version < \"3.10\" and extra == \"io\""} -scipy = {version = "*", optional = true, markers = "extra == \"io\""} -zarr = {version = "*", optional = true, markers = "extra == \"io\""} - -[package.extras] -accel = ["bottleneck", "flox", "numbagg", "opt-einsum", "scipy"] -complete = ["xarray[accel,dev,io,parallel,viz]"] -dev = ["hypothesis", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-env", "pytest-timeout", "pytest-xdist", "ruff", "xarray[complete]"] -io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] -parallel = ["dask[complete]"] -viz = ["matplotlib", "nc-time-axis", "seaborn"] - -[[package]] -name = "xxhash" -version = "3.5.0" -description = "Python binding for xxHash" -optional = false -python-versions = ">=3.7" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, - {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, - {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, - {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, - {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, - {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, - {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, - {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, - {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, - {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, - {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, - {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, - {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, - {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, - {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, - {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, - {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, - {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, - {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, - {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, - {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, - {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, - {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, - {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, - {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, - {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, - {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, - {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, - {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, - {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, - {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, - {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, - {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, - {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, - {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, - {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, - {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, - {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, - {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, - {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, - {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, - {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, - {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, - {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, - {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, - {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, - {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, - {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, - {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, - {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, - {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, -] - -[[package]] -name = "zarr" -version = "2.18.2" -description = "An implementation of chunked, compressed, N-dimensional arrays for Python" -optional = false -python-versions = ">=3.9" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38"}, - {file = "zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47"}, -] - -[package.dependencies] -asciitree = "*" -fasteners = {version = "*", markers = "sys_platform != \"emscripten\""} -numcodecs = ">=0.10.0" -numpy = ">=1.23" - -[package.extras] -docs = ["numcodecs[msgpack]", "numpydoc", "pydata-sphinx-theme", "sphinx", "sphinx-automodapi", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] -jupyter = ["ipytree (>=0.2.2)", "ipywidgets (>=8.0.0)", "notebook"] - -[[package]] -name = "zhinst" -version = "21.8.20515" -description = "Python API for Zurich Instruments Devices" -optional = false -python-versions = "*" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "zhinst-21.8.20515-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:97f404b0f81209a8271f34dc56b95db5ba62f77c51c03fef39958fa39c1902c3"}, - {file = "zhinst-21.8.20515-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2abc92ea573233c7402314cf2f952ed909e074ea8f2b0ac87ded84aa9ba39ad3"}, - {file = "zhinst-21.8.20515-cp35-cp35m-win_amd64.whl", hash = "sha256:c6267d2f57ee28bb82455e7aea055a3e40b182f0752bc62a830768c8993216db"}, - {file = "zhinst-21.8.20515-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:85eb950c6ffa487785cc554ed56632f8a2d5c3f9e51b1cb06763cef53230a68d"}, - {file = "zhinst-21.8.20515-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:562866bf7a8f8e29f372cdf52b0dd31a9d50779e4b6e56269df21108225bf5ce"}, - {file = "zhinst-21.8.20515-cp36-cp36m-win_amd64.whl", hash = "sha256:9a07bd0eb29c4d03d02199ace0200f5b722246afd81a8a814d3631f11f2b343b"}, - {file = "zhinst-21.8.20515-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:6c253637075dad0a68add95780eca98eedab1a38fd8e2a23cc119f862368530c"}, - {file = "zhinst-21.8.20515-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b6ed4b6f81dc39a08e9ba901afda141be926359a4e33eda9c1f4b03b362c3703"}, - {file = "zhinst-21.8.20515-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:eb8dced7a41d177f2215693771170b8d1ff39afcbc883f81f9ed02e3c7881884"}, - {file = "zhinst-21.8.20515-cp37-cp37m-win_amd64.whl", hash = "sha256:9df0094eecadf7c5926a4d716b47a204c9d7417f1bd71ddb746de5109161830e"}, - {file = "zhinst-21.8.20515-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:dc9d1f7e48a00cb6f34272ded469e7806de62728874ee2139323f92ad2ed0eaa"}, - {file = "zhinst-21.8.20515-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d1c933219e6b9a3eaa9f0bb5554472c13e8b627fb67f7629b963cd2d97b213d2"}, - {file = "zhinst-21.8.20515-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ce11c44c7deea1a8659227cfbc3dd9080daa8b360250bf5cd9b2aa6d2a293a21"}, - {file = "zhinst-21.8.20515-cp38-cp38-win_amd64.whl", hash = "sha256:fcdb7863267630160bb46bf51790277760027f7c51af95bbbc852f833c56508e"}, - {file = "zhinst-21.8.20515-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:f7d7317d76b208cad0b537b230b864784a9911a7847becc991eccd2359c6cc63"}, - {file = "zhinst-21.8.20515-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c32c15604dc8d70dbcc51f6fea2f25413d6f82fe515b71c9ff815c1b2e472494"}, - {file = "zhinst-21.8.20515-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df5e562f4e928e168be8816e20b5c138e7c70306eb402ad7fc9e8a5eec893613"}, - {file = "zhinst-21.8.20515-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:db35ebcc5bb5b195de20bbfb71487159adbfc89e35b71412e06dc30c089a59b9"}, - {file = "zhinst-21.8.20515-cp39-cp39-win_amd64.whl", hash = "sha256:423966ca97d78dfdb13c4e6bd9eaba6521f84bd7fb812b973dfdb50aeb51c5aa"}, -] - -[package.dependencies] -numpy = ">=1.14" - -[[package]] -name = "zhinst-qcodes" -version = "0.1.4" -description = "Zurich Instruents drivers for QCoDeS" -optional = false -python-versions = ">=3.6" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae"}, -] - -[package.dependencies] -attrs = "*" -numpy = ">=1.13" -qcodes = ">=0.14.0" -setuptools = ">=40.1.0" -zhinst = ">=20.01" -zhinst-toolkit = ">=0.1.5" - -[[package]] -name = "zhinst-toolkit" -version = "0.1.5" -description = "Zurich Instruments tools for high level device control" -optional = false -python-versions = ">=3.6" -groups = ["export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9"}, -] - -[package.dependencies] -attrs = "*" -numpy = ">=1.13" -setuptools = ">=40.1.0" -zhinst = ">=20.01" - -[[package]] -name = "zipp" -version = "3.21.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.9" -groups = ["docs", "examples", "export"] -markers = "python_version < \"3.10\"" -files = [ - {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, - {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - -[metadata] -lock-version = "2.1" -python-versions = "^3.9" -content-hash = "78f96c4af3a720770ce1fb6649d81443764cc5447f5f9ebb264c2b39a98ed3d5" diff --git a/pyproject.toml b/pyproject.toml index 5d3b79eb..17aa411c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,83 +1,81 @@ -[tool.poetry] +[project] name = "opensquirrel" -version = "0.5.0" +version = "0.6.0" description = "A quantum circuit transformation and manipulation tool" authors = [ - "Quantum Inspire " + { name = "Quantum Inspire", email = "support@quantum-inspire.com" }, ] -license = "Apache-2.0" +requires-python = ">=3.9.0" readme = "README.md" -homepage = "https://github.com/QuTech-Delft/OpenSquirrel" -repository = "https://github.com/QuTech-Delft/OpenSquirrel" +license = "Apache-2.0" keywords = [ "quantum", "circuits", "compilation", ] -classifiers = [ - 'Development Status :: 3 - Alpha', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: Python :: 3.12', - 'License :: OSI Approved :: Apache Software License' +dependencies = [ + "numpy>=1.26", + "libqasm==1.2.1", + "networkx>=3.0.0,<4", + "scipy>=1.11.4 ; python_version < '3.10'", + "scipy>=1.14,<2.0 ; python_version >= '3.10'", ] -packages = [ - { include = "opensquirrel" }, +classifiers = [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "License :: OSI Approved :: Apache Software License", ] -[tool.poetry.dependencies] -python = "^3.9" -numpy = ">=1.26" -libqasm = "1.2.0" -networkx = "^3.0.0" -tox = "^4.24.1" - -[tool.poetry.group.dev.dependencies] -coverage = {extras = ["toml"], version = "^7.3.2"} -pytest = {extras = ["toml"], version = ">=7.4.3,<9.0.0"} -pytest-cov = ">=4.1,<7.0" -mypy = "^1.7.0" -ruff = ">=0.5,<0.12" -tox = "^4.16.0" -sympy = "^1.13.1" -IPython = ">=7.12,<9.0" - -[tool.poetry.group.docs] -optional = true - -[tool.poetry.group.docs.dependencies] -mkdocs = {extras = ["python"], version = "^1.5.3"} -mkdocstrings = {extras = ["python"], version = ">=0.24,<0.30"} -mkdocs_gen_files = {extras = ["python"], version = "^0.5.0"} -mkdocs-material = "^9.4.12" -mkdocs-literate-nav = "^0.6.1" -pymdown-extensions = "^10.7.1" - -[tool.poetry.group.examples] -optional = true +[project.urls] +Homepage = "https://qutech-delft.github.io/OpenSquirrel/" +Repository = "https://github.com/QuTech-Delft/OpenSquirrel" + +[dependency-groups] +dev = [ + "coverage>=7.3.2,<8", + "pytest>=7.4.3,<9.0.0", + "pytest-cov>=4.1,<7.0", + "mypy>=1.7.0,<2", + "ruff>=0.5,<0.13", + "tox>=4.24.1,<5", + "sympy>=1.13.1,<2", + "IPython>=7.12,<9.0", +] +export = [ + "pyqt5-qt5==5.15.2; sys_platform != 'darwin' and python_version < '3.10'", + "quantify-scheduler>=0.18.0,<0.19; sys_platform != 'darwin' and python_version < '3.10'", +] +docs = [ + "mike>=2.1.3", + "mkdocs>=1.5.3,<2", + "mkdocstrings[python]>=0.24,<0.31", + "mkdocs-exclude==1.0.2", + "mkdocs-glightbox==0.4.0", + "mkdocs_gen_files>=0.5.0,<0.6", + "mkdocs-material>=9.4.12,<10", + "mkdocs-material-extensions==1.3.1", + "mkdocs-build-plantuml-plugin==1.9.0", + "mkdocs-render-swagger-plugin==0.1.2", + "mkdocs-literate-nav>=0.6.1,<0.7", + "pymdown-extensions>=10.7.1,<11", +] +examples = [ + "jupyter>=1.0.0,<2", +] -[tool.poetry.group.examples.dependencies] -jupyter = "^1.0.0" -sympy = "^1.13.1" +[tool.hatch.build.targets.sdist] +include = ["opensquirrel"] -[tool.poetry.group.export] -optional = true +[tool.hatch.build.targets.wheel] +include = ["opensquirrel"] -[tool.poetry.group.export.dependencies] -pyqt5-qt5=[ - # This package is a transitive dependency of quantify-scheduler. - # The latest version is not portable, therefore it is necessary to pin an older version - # otherwise Poetry will try to install the latest version and fail on e.g. Windows. - { version = "5.15.2", python = "<3.10" }, -] -quantify-scheduler=[ - # quantify-scheduler is not released for newer Python versions, i.e. > 3.9. - # Its is only required for exporting OpenSquirrel circuits to the - # Schedule format and testing this functionality. - { version = "^0.18.0", python = "<3.10" }, -] +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" [tool.pytest.ini_options] addopts = "-v --cov --cov-report term-missing:skip-covered --cov-report xml" @@ -159,6 +157,8 @@ ignore = [ "COM812", # Conflicts with ruff format "ISC001", # Possible conflicts with ruff format "W605", # deprecated in Python 3.6 + "PT012", # pytest.raises() block should contain only a single simple statement + "SIM105", # Use `contextlib.suppress(ModuleNotFoundError)` instead of `try`-`except`-`pass` ] isort.combine-as-imports = true pydocstyle.convention = "google" @@ -168,7 +168,7 @@ flake8-type-checking.exempt-modules = ["typing", "typing_extensions", "numpy", " "*.py" = [ "S101", # asserts allowed everywhere ] -"test/**/*.py" = [ +"tests/**/*.py" = [ "FBT", # Don't care about booleans as positional arguments in tests, e.g. via @pytest.mark.parametrize() "D", # No doc requirements in tests "SLF001", # Testing private functions is OK @@ -180,7 +180,3 @@ flake8-type-checking.exempt-modules = ["typing", "typing_extensions", "numpy", " [tool.mypy] ignore_missing_imports = true strict = true - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/test/__init__.py b/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/decomposer/__init__.py b/test/decomposer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/docs/__init__.py b/test/docs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/docs/test_tutorial.py b/test/docs/test_tutorial.py deleted file mode 100644 index fb4e7214..00000000 --- a/test/docs/test_tutorial.py +++ /dev/null @@ -1,267 +0,0 @@ -import math - -import numpy as np -import pytest - -from opensquirrel import CNOT, CZ, Circuit, CircuitBuilder, H, Ry, Rz -from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate, QubitLike -from opensquirrel.passes.decomposer import ZYZDecomposer -from opensquirrel.passes.merger.single_qubit_gates_merger import SingleQubitGatesMerger - - -def test_circuit_from_string() -> None: - qc = Circuit.from_string( - """ - version 3.0 - - // Initialise a circuit with two qubits and a bit - qubit[2] q - bit[2] b - - // Create a Bell pair - H q[0] - CNOT q[0], q[1] - - // Measure qubits - b = measure q - """ - ) - - assert ( - str(qc) - == """version 3.0 - -qubit[2] q -bit[2] b - -H q[0] -CNOT q[0], q[1] -b[0] = measure q[0] -b[1] = measure q[1] -""" - ) - - -def test_circuit_builder() -> None: - builder = CircuitBuilder(qubit_register_size=2) - builder.Ry(0, 0.23).CNOT(0, 1) - qc = builder.to_circuit() - - assert ( - str(qc) - == """version 3.0 - -qubit[2] q - -Ry(0.23) q[0] -CNOT q[0], q[1] -""" - ) - - -def test_circuit_builder_loop() -> None: - builder = CircuitBuilder(qubit_register_size=10) - for i in range(0, 10, 2): - builder.H(i) - qc = builder.to_circuit() - - assert ( - str(qc) - == """version 3.0 - -qubit[10] q - -H q[0] -H q[2] -H q[4] -H q[6] -H q[8] -""" - ) - - -def test_circuit_builder_qft() -> None: - qubit_register_size = 5 - builder = CircuitBuilder(qubit_register_size) - for i in range(qubit_register_size): - builder.H(i) - for c in range(i + 1, qubit_register_size): - builder.CRk(c, i, c - i + 1) - qft = builder.to_circuit() - assert ( - str(qft) - == """version 3.0 - -qubit[5] q - -H q[0] -CRk(2) q[1], q[0] -CRk(3) q[2], q[0] -CRk(4) q[3], q[0] -CRk(5) q[4], q[0] -H q[1] -CRk(2) q[2], q[1] -CRk(3) q[3], q[1] -CRk(4) q[4], q[1] -H q[2] -CRk(2) q[3], q[2] -CRk(3) q[4], q[2] -H q[3] -CRk(2) q[4], q[3] -H q[4] -""" - ) - - -def test_CNOT_strong_type_error_string() -> None: # noqa: N802 - with pytest.raises(OSError, match=r".* with argument pack .*") as e_info: - Circuit.from_string( - """ - version 3.0 - qubit[2] q - - CNOT q[0], 3 // The CNOT expects a qubit as second argument. - """ - ) - - assert "failed to resolve instruction 'CNOT' with argument pack (qubit, int)" in str(e_info.value) - - -def test_anonymous_gate() -> None: - builder = CircuitBuilder(1) - builder.Rx(0, math.pi / 4) - builder.Rz(0, math.pi / 4) - qc = builder.to_circuit() - - qc.merge(merger=SingleQubitGatesMerger()) - - assert ( - str(qc) - == """version 3.0 - -qubit[1] q - -Rn(0.67859835, 0.28108462, 0.67859835, 1.0960568, 0.0) q[0] -""" - ) - - -def test_create_custom_gates() -> None: - class x(BlochSphereRotation): # noqa: N801 - def __init__(self, qubit: QubitLike) -> None: - BlochSphereRotation.__init__(self, qubit=qubit, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="x") - - class cnot(ControlledGate): # noqa: N801 - def __init__(self, control: QubitLike, target: QubitLike) -> None: - ControlledGate.__init__(self, control_qubit=control, target_gate=x(target), name="cnot") - - class swap(MatrixGate): # noqa: N801 - def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike) -> None: - MatrixGate.__init__( - self, - matrix=np.array( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ] - ), - operands=[qubit_0, qubit_1], - name="swap", - ) - - assert x(0) == BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2, name="x") - assert cnot(0, 1) == ControlledGate(0, x(1), name="cnot") - assert swap(0, 1) == MatrixGate( - matrix=np.array( - [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ] - ), - operands=[0, 1], - name="swap", - ) - - -def test_predefined_decomposition() -> None: - qc = Circuit.from_string( - """ - version 3.0 - qubit[3] q - - X q[0:2] // Note that this notation is expanded in OpenSquirrel. - CNOT q[0], q[1] - Ry(6.78) q[2] - """ - ) - qc.replace( - CNOT, - lambda control, target: [ - H(target), - CZ(control, target), - H(target), - ], - ) - - assert ( - str(qc) - == """version 3.0 - -qubit[3] q - -X q[0] -X q[1] -X q[2] -H q[1] -CZ q[0], q[1] -H q[1] -Ry(6.78) q[2] -""" - ) - - -def test_error_predefined_decomposition() -> None: - qc = Circuit.from_string( - """ - version 3.0 - qubit[3] q - - X q[0:2] - CNOT q[0], q[1] - Ry(6.78) q[2] - """ - ) - with pytest.raises(ValueError, match=r"replacement for gate .*") as e_info: - qc.replace(CNOT, lambda control_qubit, target_qubit: [H(target_qubit), CZ(control_qubit, target_qubit)]) - - assert str(e_info.value) == "replacement for gate CNOT does not preserve the quantum state" - - -def test_zyz_decomposer() -> None: - builder = CircuitBuilder(qubit_register_size=1) - builder.H(0).Z(0).Y(0).Rx(0, math.pi / 3) - qc = builder.to_circuit() - - qc.decompose(decomposer=ZYZDecomposer()) - - assert ( - str(qc) - == """version 3.0 - -qubit[1] q - -Rz(3.1415927) q[0] -Ry(1.5707963) q[0] -Rz(3.1415927) q[0] -Ry(3.1415927) q[0] -Rz(1.5707963) q[0] -Ry(1.0471976) q[0] -Rz(-1.5707963) q[0] -""" - ) - - assert ZYZDecomposer().decompose(H(0)) == [Rz(0, math.pi), Ry(0, math.pi / 2)] diff --git a/test/exporter/__init__.py b/test/exporter/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/exporter/test_quantify_scheduler_exporter.py b/test/exporter/test_quantify_scheduler_exporter.py deleted file mode 100644 index f6916bed..00000000 --- a/test/exporter/test_quantify_scheduler_exporter.py +++ /dev/null @@ -1,111 +0,0 @@ -from __future__ import annotations - -import contextlib -import importlib.util -import math -import unittest.mock -from math import isclose -from typing import Any - -import pytest - -from opensquirrel import CircuitBuilder, H -from opensquirrel.common import ATOL -from opensquirrel.exceptions import ExporterError -from opensquirrel.ir import BlochSphereRotation, Gate -from opensquirrel.passes.exporter import quantify_scheduler_exporter -from opensquirrel.passes.exporter.quantify_scheduler_exporter import FIXED_POINT_DEG_PRECISION - - -class FloatEq(float): - def __eq__(self, other: Any) -> bool: - return isclose(self, other, abs_tol=ATOL) - - -class MockedQuantifyScheduler: - def __enter__(self) -> tuple[Any, Any]: - self.patch_qs = unittest.mock.patch( - "opensquirrel.passes.exporter.quantify_scheduler_exporter.quantify_scheduler", - create=True, - ) - - self.patch_qs_gates = unittest.mock.patch( - "opensquirrel.passes.exporter.quantify_scheduler_exporter.quantify_scheduler_gates", - create=True, - ) - - with contextlib.ExitStack() as stack: - self.mock_quantify_scheduler = stack.enter_context(self.patch_qs) - self.mock_quantify_scheduler_gates = stack.enter_context(self.patch_qs_gates) - self._stack = stack.pop_all() - - return self.mock_quantify_scheduler, self.mock_quantify_scheduler_gates - - def __exit__(self, exc_type: Any, exc_value: Any, exc_traceback: Any) -> None: - self._stack.__exit__(exc_type, exc_value, exc_traceback) - - -class TestQuantifySchedulerExporter: - def test_export(self) -> None: - builder = CircuitBuilder(3, 3) - builder.X(0) - builder.CZ(0, 1) - builder.reset(0) - builder.Rz(1, 2.34) - builder.Ry(2, 1.23) - builder.measure(0, 0) - builder.measure(1, 1) - builder.measure(2, 2) - circuit = builder.to_circuit() - - with MockedQuantifyScheduler() as (mock_quantify_scheduler, mock_quantify_scheduler_gates): - mock_schedule = unittest.mock.MagicMock() - mock_quantify_scheduler.Schedule.return_value = mock_schedule - - quantify_scheduler_exporter.export(circuit) - - mock_quantify_scheduler.Schedule.assert_called_with("Exported OpenSquirrel circuit") - - mock_quantify_scheduler_gates.Rxy.assert_has_calls( - [ - unittest.mock.call(theta=FloatEq(math.degrees(math.pi)), phi=FloatEq(0), qubit="q[0]"), - unittest.mock.call( - theta=FloatEq(round(math.degrees(1.23), FIXED_POINT_DEG_PRECISION)), - phi=FloatEq(math.degrees(math.pi / 2)), - qubit="q[2]", - ), - ], - ) - mock_quantify_scheduler_gates.Reset.assert_called_once_with("q[0]") - mock_quantify_scheduler_gates.CZ.assert_called_once_with(qC="q[0]", qT="q[1]") - mock_quantify_scheduler_gates.Rz.assert_called_once_with( - theta=FloatEq(round(math.degrees(2.34), FIXED_POINT_DEG_PRECISION)), - qubit="q[1]", - ) - assert mock_schedule.add.call_count == 8 - - @pytest.mark.parametrize( - "gate", - [H(0), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34)], - ids=["H", "BSR"], - ) - def test_gates_not_supported(self, gate: Gate) -> None: - builder = CircuitBuilder(3) - builder.ir.add_gate(gate) - circuit = builder.to_circuit() - - with MockedQuantifyScheduler(), pytest.raises(ExporterError, match="cannot export circuit: "): - quantify_scheduler_exporter.export(circuit) - - -@pytest.mark.skipif( - importlib.util.find_spec("quantify_scheduler") is not None, - reason="quantify_scheduler is installed", -) -def test_quantify_scheduler_not_installed() -> None: - empty_circuit = CircuitBuilder(1).to_circuit() - with pytest.raises( - ModuleNotFoundError, - match="quantify-scheduler is not installed, or cannot be installed on your system", - ): - quantify_scheduler_exporter.export(empty_circuit) diff --git a/test/mapper/__init__.py b/test/mapper/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/mapper/test_general_mapper.py b/test/mapper/test_general_mapper.py deleted file mode 100644 index b0b5d815..00000000 --- a/test/mapper/test_general_mapper.py +++ /dev/null @@ -1,51 +0,0 @@ -from __future__ import annotations - -import pytest - -from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.passes.mapper import HardcodedMapper, Mapper -from opensquirrel.passes.mapper.mapping import Mapping - - -class TestMapper: - def test_init(self) -> None: - with pytest.raises(TypeError): - Mapper() # type: ignore[call-arg] - - def test_implementation(self) -> None: - class Mapper2(Mapper): - pass - - with pytest.raises(TypeError): - Mapper2() # type: ignore[call-arg] - - class Mapper3(Mapper2): - def __init__(self, qubit_register_size: int) -> None: - super().__init__(qubit_register_size, Mapping([0])) - - Mapper3(qubit_register_size=1) - - -class TestMapQubits: - @pytest.fixture(name="circuit") - def circuit_fixture(self) -> Circuit: - builder = CircuitBuilder(3, 1) - builder.H(0) - builder.CNOT(0, 1) - builder.CNOT(1, 2) - builder.measure(0, 0) - return builder.to_circuit() - - @pytest.fixture(name="remapped_circuit") - def remapped_circuit_fixture(self) -> Circuit: - builder = CircuitBuilder(3, 1) - builder.H(1) - builder.CNOT(1, 0) - builder.CNOT(0, 2) - builder.measure(1, 0) - return builder.to_circuit() - - def test_circuit_map(self, circuit: Circuit, remapped_circuit: Circuit) -> None: - mapper = HardcodedMapper(circuit.qubit_register_size, Mapping([1, 0, 2])) - circuit.map(mapper) - assert circuit == remapped_circuit diff --git a/test/mapper/test_simple_mappers.py b/test/mapper/test_simple_mappers.py deleted file mode 100644 index 2fbb6e87..00000000 --- a/test/mapper/test_simple_mappers.py +++ /dev/null @@ -1,56 +0,0 @@ -# Tests for the simple mapper passes -from __future__ import annotations - -import random - -import pytest - -from opensquirrel.passes.mapper import HardcodedMapper, IdentityMapper, RandomMapper -from opensquirrel.passes.mapper.mapping import Mapping -from opensquirrel.utils import check_mapper - - -class TestIdentityMapper: - @pytest.fixture(name="mapper") - def mapper_fixture(self) -> IdentityMapper: - return IdentityMapper(qubit_register_size=3) - - def test_compliance(self, mapper: IdentityMapper) -> None: - check_mapper(mapper) - - def test_get_mapping(self, mapper: IdentityMapper) -> None: - assert mapper.get_mapping() == Mapping([0, 1, 2]) - - -class TestHardcodedMapper: - @pytest.fixture(name="mapper") - def mapper_fixture(self) -> HardcodedMapper: - qubit_register_size = 10 - mapping = Mapping([(i + 1) % qubit_register_size for i in range(qubit_register_size)]) - return HardcodedMapper(qubit_register_size, mapping) - - def test_compliance(self, mapper: HardcodedMapper) -> None: - check_mapper(mapper) - - def test_get_mapping(self, mapper: HardcodedMapper) -> None: - assert mapper.get_mapping() == Mapping([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) - - -class TestRandomMapper: - @pytest.fixture(name="mapper") - def mapper_fixture(self) -> RandomMapper: - return RandomMapper(qubit_register_size=5) - - def test_compliance(self, mapper: RandomMapper) -> None: - check_mapper(mapper) - - def test_get_mapping(self, mapper: RandomMapper) -> None: - assert len(mapper.get_mapping()) == 5 - - @pytest.mark.parametrize("seed, qubit_register_size", [(42, 5), (123, 10), (456, 20)]) # noqa PT006 - def test_mapping_uniqueness(self, seed: int, qubit_register_size: int) -> None: - random.seed(seed) - mapper = RandomMapper(qubit_register_size=qubit_register_size) - original_mapping = Mapping(list(range(qubit_register_size))) - new_mapping = mapper.get_mapping() - assert new_mapping != original_mapping diff --git a/test/merger/__init__.py b/test/merger/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/parser/__init__.py b/test/parser/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/parser/libqasm/__init__.py b/test/parser/libqasm/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test_integration.py b/test/test_integration.py deleted file mode 100644 index 2a95c6f0..00000000 --- a/test/test_integration.py +++ /dev/null @@ -1,782 +0,0 @@ -# This integration test also serves as example and code documentation. -from __future__ import annotations - -import importlib.util - -import pytest - -from opensquirrel.circuit import Circuit -from opensquirrel.ir import Measure -from opensquirrel.passes.decomposer import ( - CNOT2CZDecomposer, - CNOTDecomposer, - McKayDecomposer, - SWAP2CNOTDecomposer, - XYXDecomposer, -) -from opensquirrel.passes.exporter import ExportFormat -from opensquirrel.passes.merger import SingleQubitGatesMerger -from opensquirrel.passes.validator import PrimitiveGateValidator, RoutingValidator - - -def test_spin2plus_backend() -> None: - qc = Circuit.from_string( - """ - // Version statement - version 3.0 - - // This is a single line comment which ends on the newline. - // The cQASM string must begin with the version instruction (apart from any preceding comments). - - /* This is a multi- - line comment block */ - - // (Qu)bit declaration - qubit[2] q // Sping-2+ has a 2-qubit register - bit[4] b - - // Initialization - init q - - // Single-qubit gates - I q[0] - H q[1] - X q[0] - X90 q[1] - mX90 q[0] - Y q[1] - Y90 q[0] - mY90 q[1] - Z q[0] - S q[1] - Sdag q[0] - T q[1] - Tdag q[0] - Rx(pi/2) q[1] - Ry(pi/2) q[0] - Rz(tau) q[1] - - // Mid-circuit measurement - b[0,2] = measure q - - // Two-qubit gates - CNOT q[0], q[1] - CZ q[1], q[0] - CR(pi) q[0], q[1] - CRk(2) q[1], q[0] - SWAP q[0], q[1] - - // Control instructions - barrier q - wait(3) q - - // Final measurement - b[1,3] = measure q - """, - ) - - """ - Spin-2+ chip topology: - 0 <--> 1 - """ - connectivity = {"0": [1], "1": [0]} - primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ", "measure", "wait", "init", "barrier"] - - data = { - "connectivity": connectivity, - "primitive_gate_set": primitive_gate_set, - } - - # Validate that the interactions in the circuit are possible given the chip topology - qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] - - # Decompose SWAP gate into 3 CNOT gates - qc.decompose(decomposer=SWAP2CNOTDecomposer(**data)) - # - # # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer(**data)) - # - # # Replace CNOT gates with CZ gates - qc.decompose(decomposer=CNOT2CZDecomposer(**data)) - # - # # Merge single-qubit gates - qc.merge(merger=SingleQubitGatesMerger(**data)) - # - # # Decompose single-qubit gates to primitive gates with McKay decomposer - qc.decompose(decomposer=McKayDecomposer(**data)) - - # Validate that the compiled circuit is composed of gates that are in the primitive gate set - qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] - - assert ( - str(qc) - == """version 3.0 - -qubit[2] q -bit[4] b - -init q[0] -init q[1] -Rz(1.5707963) q[0] -X90 q[0] -Rz(0.78539813) q[0] -X90 q[0] -Rz(-1.5707964) q[0] -b[0] = measure q[0] -Rz(2.3561946) q[1] -X90 q[1] -Rz(-3.1415927) q[1] -b[2] = measure q[1] -Rz(1.5707963) q[1] -X90 q[1] -Rz(-1.5707963) q[1] -CZ q[0], q[1] -Rz(-1.5707963) q[1] -X90 q[1] -Rz(1.5707963) q[1] -Rz(3.1415927) q[0] -CZ q[1], q[0] -Rz(3.1415927) q[0] -Rz(3.1415927) q[1] -CZ q[0], q[1] -Rz(3.1415927) q[1] -Rz(2.3561944) q[0] -X90 q[0] -Rz(-1.5707963) q[0] -CZ q[1], q[0] -Rz(-1.5707963) q[0] -X90 q[0] -Rz(2.3561946) q[0] -X90 q[0] -Rz(-1.5707963) q[0] -CZ q[1], q[0] -Rz(-1.5707963) q[0] -X90 q[0] -Rz(1.5707963) q[0] -Rz(2.3561944) q[1] -X90 q[1] -Rz(-1.5707963) q[1] -CZ q[0], q[1] -Rz(-1.5707963) q[1] -X90 q[1] -Rz(1.5707963) q[1] -Rz(1.5707963) q[0] -X90 q[0] -Rz(-1.5707963) q[0] -CZ q[1], q[0] -Rz(-1.5707963) q[0] -X90 q[0] -Rz(1.5707963) q[0] -Rz(1.5707963) q[1] -X90 q[1] -Rz(-1.5707963) q[1] -CZ q[0], q[1] -Rz(-1.5707963) q[1] -X90 q[1] -Rz(1.5707963) q[1] -barrier q[0] -barrier q[1] -wait(3) q[0] -wait(3) q[1] -b[1] = measure q[0] -b[3] = measure q[1] -""" - ) - - -def test_hectoqubit_backend() -> None: - qc = Circuit.from_string( - """ - // Version statement - version 3.0 - - // This is a single line comment which ends on the newline. - // The cQASM string must begin with the version instruction (apart from any preceding comments). - - /* This is a multi- - line comment block */ - - // (Qu)bit declaration - qubit[5] q // Tuna-5 has a 5-qubit register - bit[7] b - - // Initialization - init q - - // Single-qubit gates - I q[0] - H q[1] - X q[2] - X90 q[3] - mX90 q[4] - Y q[0] - Y90 q[1] - mY90 q[2] - Z q[3] - S q[4] - Sdag q[0] - T q[1] - Tdag q[2] - Rx(pi/2) q[3] - Ry(pi/2) q[4] - Rz(tau) q[0] - - barrier q // to ensure all measurements occur simultaneously - // Mid-circuit measurement - b[0:4] = measure q - - // Two-qubit gates - CNOT q[0], q[1] - CZ q[2], q[3] - CR(pi) q[4], q[0] - CRk(2) q[1], q[2] - SWAP q[3], q[4] - - // Control instructions - barrier q - // wait(3) q // not supported by HectoQubit/2 atm - - // Final measurement - b[2:6] = measure q - """ - ) - - # HectoQubit/2 chip is Tuna-5 (full-connectivity assumed for now) - connectivity = { - "0": [1, 2, 3, 4], - "1": [0, 2, 3, 4], - "2": [0, 1, 3, 4], - "3": [0, 1, 2, 4], - "4": [0, 1, 2, 3], - } - primitive_gate_set = [ - "I", - "X", - "X90", - "mX90", - "Y", - "Y90", - "mY90", - "Z", - "S", - "Sdag", - "T", - "Tdag", - "Rx", - "Ry", - "Rz", - "CNOT", - "CZ", - "measure", - "wait", - "init", - "barrier", - ] - - data = { - "connectivity": connectivity, - "primitive_gate_set": primitive_gate_set, - } - - # Validate that the interactions in the circuit are possible given the chip topology - qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] - - # Decompose SWAP gate into 3 CNOT gates - qc.decompose(decomposer=SWAP2CNOTDecomposer(**data)) - - # Decompose 2-qubit gates to a decomposition where the 2-qubit interactions are captured by CNOT gates - qc.decompose(decomposer=CNOTDecomposer(**data)) - - # Replace CNOT gates with CZ gates - qc.decompose(decomposer=CNOT2CZDecomposer(**data)) - - # Merge single-qubit gates - qc.merge(merger=SingleQubitGatesMerger(**data)) - - # Decompose single-qubit gates to primitive gates with the XYX decomposer - qc.decompose(decomposer=XYXDecomposer(**data)) - - # Validate that the compiled circuit is composed of gates that are in the primitive gate set - qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] - - if importlib.util.find_spec("quantify_scheduler") is None: - with pytest.raises( - Exception, - match="quantify-scheduler is not installed, or cannot be installed on your system", - ): - qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) - else: - exported_schedule, bit_string_mapping = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) - - assert exported_schedule.name == "Exported OpenSquirrel circuit" - - operations = [ - exported_schedule.operations[schedulable["operation_id"]].name - for schedulable in exported_schedule.schedulables.values() - ] - - assert operations == [ - "Rxy(90, 0, 'q[0]')", - "Rxy(90, 90, 'q[0]')", - "Rxy(90, 0, 'q[0]')", - "Rxy(90, 0, 'q[1]')", - "Rxy(45, 90, 'q[1]')", - "Rxy(90, 0, 'q[1]')", - "Rxy(-45, 0, 'q[2]')", - "Rxy(90, 90, 'q[2]')", - "Rxy(180, 0, 'q[2]')", - "Rxy(-90, 0, 'q[3]')", - "Rxy(180, 90, 'q[3]')", - "Rxy(90, 0, 'q[3]')", - "Rxy(-90, 0, 'q[4]')", - "Rxy(90, 90, 'q[4]')", - "Rxy(90, 0, 'q[4]')", - "Measure q[0]", - "Measure q[1]", - "Measure q[2]", - "Measure q[3]", - "Measure q[4]", - "Rxy(180, 0, 'q[1]')", - "Rxy(90, 90, 'q[1]')", - "Rxy(180, 0, 'q[1]')", - "CZ (q[0], q[1])", - "Rxy(-90, 0, 'q[3]')", - "Rxy(180, 90, 'q[3]')", - "Rxy(90, 0, 'q[3]')", - "CZ (q[2], q[3])", - "Rxy(-90, 0, 'q[0]')", - "Rxy(180, 90, 'q[0]')", - "Rxy(90, 0, 'q[0]')", - "CZ (q[4], q[0])", - "Rxy(90, 90, 'q[1]')", - "Rxy(180, 0, 'q[2]')", - "Rxy(90, 90, 'q[2]')", - "Rxy(135, 0, 'q[2]')", - "CZ (q[1], q[2])", - "Rxy(45, 0, 'q[2]')", - "CZ (q[1], q[2])", - "Rxy(-90, 0, 'q[3]')", - "Rxy(180, 90, 'q[3]')", - "Rxy(90, 0, 'q[3]')", - "Rxy(180, 0, 'q[4]')", - "Rxy(90, 90, 'q[4]')", - "Rxy(180, 0, 'q[4]')", - "CZ (q[3], q[4])", - "Rxy(90, 90, 'q[4]')", - "Rxy(180, 0, 'q[3]')", - "Rxy(90, 90, 'q[3]')", - "Rxy(180, 0, 'q[3]')", - "CZ (q[4], q[3])", - "Rxy(90, 90, 'q[3]')", - "Rxy(180, 0, 'q[4]')", - "Rxy(90, 90, 'q[4]')", - "Rxy(180, 0, 'q[4]')", - "CZ (q[3], q[4])", - "Rxy(-90, 0, 'q[0]')", - "Rxy(180, 90, 'q[0]')", - "Rxy(90, 0, 'q[0]')", - "Rxy(-90, 0, 'q[1]')", - "Rxy(45, 90, 'q[1]')", - "Rxy(90, 0, 'q[1]')", - "Rxy(90, 90, 'q[2]')", - "Rxy(90, 90, 'q[4]')", - "Measure q[0]", - "Measure q[1]", - "Measure q[2]", - "Measure q[3]", - "Measure q[4]", - ] - - ir_measures = [instruction for instruction in qc.ir.statements if isinstance(instruction, Measure)] - qs_measures = [ - operation.data["gate_info"] - for operation in exported_schedule.operations.values() - if operation.data["gate_info"]["operation_type"] == "measure" - ] - - ir_acq_index_record = [0] * qc.qubit_register_size - ir_bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * qc.bit_register_size - for i, ir_measure in enumerate(ir_measures): - qubit_index = ir_measure.qubit.index - ir_acq_index = ir_acq_index_record[qubit_index] - ir_bit_string_mapping[ir_measure.bit.index] = (ir_acq_index, qubit_index) - assert qs_measures[i]["acq_channel_override"] == qubit_index - assert qs_measures[i]["acq_index"] == ir_acq_index - assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" - ir_acq_index_record[qubit_index] += 1 - - assert len(bit_string_mapping) == qc.bit_register_size - assert bit_string_mapping == ir_bit_string_mapping - - -def test_hectoqubit_backend_allxy() -> None: - qc = Circuit.from_string( - """ - version 3.0 - - qubit[3] q - bit[10] b - - reset q - - Rx(0.0) q[0] - Rx(0.0) q[0] - b[0] = measure q[0] - - Rx(3.141592653589793) q[1] - Rx(3.141592653589793) q[1] - b[1] = measure q[1] - - Ry(3.141592653589793) q[0] - Ry(3.141592653589793) q[0] - b[2] = measure q[0] - - Rx(3.141592653589793) q[2] - Ry(3.141592653589793) q[2] - b[3] = measure q[2] - - Ry(3.141592653589793) q[0] - Rx(3.141592653589793) q[0] - b[4] = measure q[0] - - Rx(3.141592653589793) q[0] - Rx(0.0) q[0] - Ry(3.141592653589793) q[2] - Rx(0.0) q[2] - Rx(1.5707963267948966) q[1] - Rx(1.5707963267948966) q[1] - - b[6] = measure q[2] - b[5] = measure q[0] - b[8] = measure q[0] - b[7] = measure q[1] - - b[9] = measure q[0] - """ - ) - - # No compilation passes are performed - - if importlib.util.find_spec("quantify_scheduler") is None: - with pytest.raises( - Exception, - match="quantify-scheduler is not installed, or cannot be installed on your system", - ): - qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) - else: - exported_schedule, bit_string_mapping = qc.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) - - assert exported_schedule.name == "Exported OpenSquirrel circuit" - - operations = [ - exported_schedule.operations[schedulable["operation_id"]].name - for schedulable in exported_schedule.schedulables.values() - ] - - assert operations == [ - "Reset q[0]", - "Reset q[1]", - "Reset q[2]", - "Rxy(0, 0, 'q[0]')", - "Rxy(0, 0, 'q[0]')", - "Measure q[0]", - "Rxy(180, 0, 'q[1]')", - "Rxy(180, 0, 'q[1]')", - "Measure q[1]", - "Rxy(180, 90, 'q[0]')", - "Rxy(180, 90, 'q[0]')", - "Measure q[0]", - "Rxy(180, 0, 'q[2]')", - "Rxy(180, 90, 'q[2]')", - "Measure q[2]", - "Rxy(180, 90, 'q[0]')", - "Rxy(180, 0, 'q[0]')", - "Measure q[0]", - "Rxy(180, 0, 'q[0]')", - "Rxy(0, 0, 'q[0]')", - "Rxy(180, 90, 'q[2]')", - "Rxy(0, 0, 'q[2]')", - "Rxy(90, 0, 'q[1]')", - "Rxy(90, 0, 'q[1]')", - "Measure q[2]", - "Measure q[0]", - "Measure q[0]", - "Measure q[1]", - "Measure q[0]", - ] - - qs_measures = [ - operation.data["gate_info"] - for operation in exported_schedule.operations.values() - if operation.data["gate_info"]["operation_type"] == "measure" - ] - - ir_measures = [instruction for instruction in qc.ir.statements if isinstance(instruction, Measure)] - - ir_acq_index_record = [0] * qc.qubit_register_size - ir_bit_string_mapping: list[tuple[None, None] | tuple[int, int]] = [(None, None)] * qc.bit_register_size - for i, ir_measurement in enumerate(ir_measures): - qubit_index = ir_measurement.qubit.index - ir_acq_index = ir_acq_index_record[qubit_index] - ir_bit_string_mapping[ir_measurement.bit.index] = ( - ir_acq_index, - qubit_index, - ) - assert qs_measures[i]["acq_channel_override"] == qubit_index - assert qs_measures[i]["acq_index"] == ir_acq_index - assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" - ir_acq_index_record[qubit_index] += 1 - - assert len(bit_string_mapping) == qc.bit_register_size - assert bit_string_mapping == ir_bit_string_mapping - - -def test_starmon7_backend() -> None: - qc = Circuit.from_string( - """ - // Version statement - version 3.0 - - // This is a single line comment which ends on the newline. - // The cQASM string must begin with the version instruction (apart from any preceding comments). - - /* This is a multi- - line comment block */ - - // (Qu)bit declaration - qubit[7] q // Starmon-7 has a 7-qubit register - bit[14] b - - // Initialization - init q - - // Single-qubit gates - I q[0] - H q[1] - X q[2] - X90 q[3] - mX90 q[4] - Y q[5] - Y90 q[6] - mY90 q[0] - Z q[1] - S q[2] - Sdag q[3] - T q[4] - Tdag q[5] - Rx(pi/2) q[6] - Ry(pi/2) q[0] - Rz(tau) q[1] - - barrier q // to ensure all measurements occur simultaneously - // Mid-circuit measurement - b[0:6] = measure q - - // Two-qubit gates - CNOT q[0], q[2] - CZ q[1], q[4] - CR(pi) q[5], q[3] - CRk(2) q[3], q[6] - SWAP q[5], q[2] - - // Control instructions - barrier q - wait(3) q - - // Final measurement - b[7:13] = measure q - """, - ) - - """ - Starmon-7 chip topology: - 1 = 4 = 6 - \\ // - 3 - // \\ - 0 = 2 = 5 - """ - - connectivity = { - "0": [2, 3], - "1": [3, 4], - "2": [0, 5], - "3": [0, 1, 5, 6], - "4": [1, 6], - "5": [2, 3], - "6": [3, 4], - } - primitive_gate_set = [ - "I", - "H", - "X", - "X90", - "mX90", - "Y", - "Y90", - "mY90", - "Z", - "S", - "Sdag", - "T", - "Tdag", - "Rx", - "Ry", - "Rz", - "CNOT", - "CZ", - "CR", - "CRk", - "SWAP", - "measure", - "wait", - "init", - "barrier", - ] - - data = { - "connectivity": connectivity, - "primitive_gate_set": primitive_gate_set, - } - - # Validate that the interactions in the circuit are possible given the chip topology - qc.validate(validator=RoutingValidator(**data)) # type: ignore[arg-type] - - # Validate that the compiled circuit is composed of gates that are in the primitive gate set - qc.validate(validator=PrimitiveGateValidator(**data)) # type: ignore[arg-type] - - exported_circuit = qc.export(fmt=ExportFormat.CQASM_V1) - - assert ( - exported_circuit - == """version 1.0 - -qubits 7 - -prep_z q[0] -prep_z q[1] -prep_z q[2] -prep_z q[3] -prep_z q[4] -prep_z q[5] -prep_z q[6] -i q[0] -h q[1] -x q[2] -x90 q[3] -mx90 q[4] -y q[5] -y90 q[6] -my90 q[0] -z q[1] -s q[2] -sdag q[3] -t q[4] -tdag q[5] -rx q[6], 1.5707963 -ry q[0], 1.5707963 -rz q[1], 6.2831853 -barrier q[0, 1, 2, 3, 4, 5, 6] -measure_z q[0] -measure_z q[1] -measure_z q[2] -measure_z q[3] -measure_z q[4] -measure_z q[5] -measure_z q[6] -cnot q[0], q[2] -cz q[1], q[4] -cr(3.1415927) q[5], q[3] -crk(2) q[3], q[6] -swap q[5], q[2] -barrier q[0, 1, 2, 3, 4, 5, 6] -wait q[0], 3 -wait q[1], 3 -wait q[2], 3 -wait q[3], 3 -wait q[4], 3 -wait q[5], 3 -wait q[6], 3 -measure_z q[0] -measure_z q[1] -measure_z q[2] -measure_z q[3] -measure_z q[4] -measure_z q[5] -measure_z q[6] -""" - ) - - -def test_rydberg_backend() -> None: - qc = Circuit.from_string( - """version 3.0 - -qubit[9] q - -asm(Rydberg) ''' -INIT(p(0,1)) q[0] -INIT(p(1,1)) q[1] -INIT(p(1,2)) q[2] -INIT(p(2,0)) q[3] -INIT(p(2,1)) q[4] -INIT(p(2,2)) q[5] -INIT(p(3,3)) q[6] -INIT(p(3,1)) q[7] -INIT(p(4,0)) q[8] -''' - -X q - -asm(Rydberg) ''' -RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] -RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] -RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] -''' - -X q -""", - ) - # Compiler configuration is yet to be defined for the Rydberg backend. - assert ( - str(qc) - == """version 3.0 - -qubit[9] q - -asm(Rydberg) ''' -INIT(p(0,1)) q[0] -INIT(p(1,1)) q[1] -INIT(p(1,2)) q[2] -INIT(p(2,0)) q[3] -INIT(p(2,1)) q[4] -INIT(p(2,2)) q[5] -INIT(p(3,3)) q[6] -INIT(p(3,1)) q[7] -INIT(p(4,0)) q[8] -''' -X q[0] -X q[1] -X q[2] -X q[3] -X q[4] -X q[5] -X q[6] -X q[7] -X q[8] -asm(Rydberg) ''' -RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] -RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] -RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] -''' -X q[0] -X q[1] -X q[2] -X q[3] -X q[4] -X q[5] -X q[6] -X q[7] -X q[8] -""" - ) diff --git a/test/test_ir.py b/test/test_ir.py deleted file mode 100644 index 99cf5ee2..00000000 --- a/test/test_ir.py +++ /dev/null @@ -1,421 +0,0 @@ -from __future__ import annotations - -import math -from collections.abc import Sequence -from typing import Any, SupportsInt - -import numpy as np -import pytest -from numpy.typing import NDArray - -from opensquirrel.common import ATOL -from opensquirrel.ir import ( - X90, - Axis, - AxisLike, - Bit, - BlochSphereRotation, - ControlledGate, - Expression, - Float, - H, - I, - Int, - MatrixGate, - Measure, - MinusX90, - Qubit, - Rn, - Rx, - Ry, - Rz, - TDagger, - X, -) - - -class TestAxis: - @pytest.fixture(name="axis") - def axis_fixture(self) -> Axis: - return Axis(1, 0, 0) - - @pytest.mark.parametrize("expected_class", [Sequence, Expression]) - def test_inheritance(self, axis: Axis, expected_class: type[Any]) -> None: - assert isinstance(axis, expected_class) - - def test_axis_getter(self, axis: Axis) -> None: - np.testing.assert_array_equal(axis.value, [1, 0, 0]) - - @pytest.mark.parametrize( - ("new_axis", "expected_axis"), - [ - ([0, 0, 1], [0, 0, 1]), - ([0, 3, 4], [0, 3 / 5, 4 / 5]), - (Axis(0, 1, 0), [0, 1, 0]), - ], - ) - def test_axis_setter_no_error(self, axis: Axis, new_axis: AxisLike, expected_axis: list[float]) -> None: - axis.value = new_axis # type: ignore[assignment] - np.testing.assert_array_equal(axis, expected_axis) - - @pytest.mark.parametrize( - ("erroneous_axis", "expected_error", "expected_error_message"), - [ - (Qubit(1), TypeError, "axis requires an ArrayLike"), - ([0, [3], [2]], TypeError, "axis requires an ArrayLike"), - (0, ValueError, "axis requires an ArrayLike of length 3, but received an ArrayLike of length 1"), - ( - [1, 2, 3, 4], - ValueError, - "axis requires an ArrayLike of length 3, but received an ArrayLike of length 4", - ), - ([0, 0, 0], ValueError, "axis requires at least one element to be non-zero"), - ], - ) - def test_axis_setter_with_error( - self, - axis: Axis, - erroneous_axis: Any, - expected_error: type[Exception], - expected_error_message: str, - ) -> None: - with pytest.raises(expected_error, match=expected_error_message): - axis.value = erroneous_axis - - def test_get_item(self, axis: Axis) -> None: - assert axis[0] == 1 - assert axis[1] == 0 - assert axis[2] == 0 - - def test_len(self, axis: Axis) -> None: - assert len(axis) == 3 - - def test_repr(self, axis: Axis) -> None: - assert repr(axis) == "Axis[1. 0. 0.]" - - def test_array(self, axis: Axis) -> None: - np.testing.assert_array_equal(axis, [1, 0, 0]) - - @pytest.mark.parametrize("other", [Axis(1, 0, 0), Axis([1, 0, 0]), Axis([[1], [0], [0]])]) - def test_eq_true(self, axis: Axis, other: Any) -> None: - assert axis == other - - @pytest.mark.parametrize("other", ["test", Axis(0, 1, 0)]) - def test_eq_false(self, axis: Axis, other: Any) -> None: - assert axis != other - - @pytest.mark.parametrize( - ("axis", "expected"), - [ - ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), - ([0, 0, 0], ValueError), - ([1, 2], ValueError), - ([1, 2, 3, 4], ValueError), - ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), - (["a", "b", "c"], TypeError), - ], - ) - def test_constructor(self, axis: AxisLike, expected: Any) -> None: - if isinstance(expected, type) and issubclass(expected, Exception): - with pytest.raises(expected): - Axis(axis) - else: - assert isinstance(expected, np.ndarray) - obj = Axis(axis) - np.testing.assert_array_equal(obj.value, expected) - - @pytest.mark.parametrize( - ("axis", "expected"), - [ - ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), - ([0, 0, 0], ValueError), - ([1, 2], ValueError), - ([1, 2, 3, 4], ValueError), - ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), - (["a", "b", "c"], TypeError), - ], - ) - def test_parse(self, axis: AxisLike, expected: Any) -> None: - if isinstance(expected, type) and issubclass(expected, Exception): - with pytest.raises(expected): - Axis.parse(axis) - else: - assert isinstance(expected, np.ndarray) - obj = Axis.parse(axis) - np.testing.assert_array_equal(obj, expected) - - @pytest.mark.parametrize( - ("axis", "expected"), - [ - (np.array([1, 0, 0], dtype=np.float64), np.array([1, 0, 0], dtype=np.float64)), - (np.array([0, 1, 0], dtype=np.float64), np.array([0, 1, 0], dtype=np.float64)), - (np.array([0, 0, 1], dtype=np.float64), np.array([0, 0, 1], dtype=np.float64)), - ( - np.array([1, 1, 1], dtype=np.float64), - np.array([1 / np.sqrt(3), 1 / np.sqrt(3), 1 / np.sqrt(3)], dtype=np.float64), - ), - ], - ) - def test_normalize(self, axis: AxisLike, expected: NDArray[np.float64]) -> None: - obj = Axis.normalize(np.array(axis, dtype=np.float64)) - assert isinstance(expected, np.ndarray) - np.testing.assert_array_almost_equal(obj, expected) - - -class TestIR: - def test_cnot_equality(self) -> None: - matrix = np.array( - [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - ], - ) - cnot_matrix_gate = MatrixGate(matrix, operands=[4, 100]) - - cnot_controlled_gate = ControlledGate( - 4, - BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), - ) - - assert cnot_controlled_gate == cnot_matrix_gate - - def test_different_qubits_gate(self) -> None: - matrix = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - ] - large_identity_matrix_gate = MatrixGate(matrix, operands=[0, 2]) - small_identity_control_gate = ControlledGate(4, BlochSphereRotation(qubit=2, axis=(1, 0, 0), angle=0, phase=0)) - - assert large_identity_matrix_gate == small_identity_control_gate - - def test_inverse_gate(self) -> None: - matrix = [ - [1, 0, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - [0, 1, 0, 0], - ] - inverted_matrix_gate = MatrixGate(matrix, operands=[0, 1]) - - inverted_cnot_gate = ControlledGate( - 1, - BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), - ) - - assert inverted_matrix_gate == inverted_cnot_gate - - def test_global_phase(self) -> None: - matrix = [ - [1j, 0, 0, 0], - [0, 0, 0, 1j], - [0, 0, 1j, 0], - [0, 1j, 0, 0], - ] - inverted_matrix_with_phase = MatrixGate(matrix, operands=[0, 1]) - - inverted_cnot_gate = ControlledGate( - 1, - BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), - ) - - assert inverted_matrix_with_phase == inverted_cnot_gate - - def test_cnot_inequality(self) -> None: - matrix = [ - [1, 0, 0, 0], - [0, 0, 1, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - ] - swap_matrix_gate = MatrixGate(matrix, operands=[4, 100]) - - cnot_controlled_gate = ControlledGate( - 4, - BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), - ) - - assert cnot_controlled_gate != swap_matrix_gate - - def test_hash_difference_bit_qubit(self) -> None: - assert hash(Qubit(1)) != hash(Bit(1)) - - -class TestMeasure: - @pytest.fixture(name="measure") - def measure_fixture(self) -> Measure: - return Measure(42, 42, axis=(0, 0, 1)) - - def test_repr(self, measure: Measure) -> None: - expected_repr = "Measure(qubit=Qubit[42], bit=Bit[42], axis=Axis[0. 0. 1.])" - assert repr(measure) == expected_repr - - def test_equality(self, measure: Measure) -> None: - measure_eq = Measure(42, 42, axis=(0, 0, 1)) - assert measure == measure_eq - - @pytest.mark.parametrize( - "other_measure", - [Measure(43, 43, axis=(0, 0, 1)), Measure(42, 42, axis=(1, 0, 0)), "test"], - ids=["qubit", "axis", "type"], - ) - def test_inequality(self, measure: Measure, other_measure: Measure | str) -> None: - assert measure != other_measure - - def test_get_bit_operands(self, measure: Measure) -> None: - assert measure.get_bit_operands() == [Bit(42)] - - def test_get_qubit_operands(self, measure: Measure) -> None: - assert measure.get_qubit_operands() == [Qubit(42)] - - -class TestBlochSphereRotation: - @pytest.fixture(name="gate") - def gate_fixture(self) -> BlochSphereRotation: - return BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau) - - @pytest.mark.parametrize( - "other_gate", - [ - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(1 + ATOL / 2, 0, 0), angle=math.pi, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi + ATOL / 2, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=math.tau + ATOL / 2), - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi + math.tau, phase=math.tau), - ], - ids=["all_equal", "close_axis", "close_angle", "close_phase", "angle+tau"], - ) - def test_equality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation) -> None: - assert gate == other_gate - - @pytest.mark.parametrize( - "other_gate", - [ - BlochSphereRotation(qubit=43, axis=(1, 0, 0), angle=math.pi, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(0, 1, 0), angle=math.pi, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=0, phase=math.tau), - BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=math.pi, phase=1), - "test", - ], - ids=["qubit", "axis", "angle", "phase", "type"], - ) - def test_inequality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation | str) -> None: - assert gate != other_gate - - def test_get_qubit_operands(self, gate: BlochSphereRotation) -> None: - assert gate.get_qubit_operands() == [Qubit(42)] - - def test_is_identity(self, gate: BlochSphereRotation) -> None: - assert I(42).is_identity() - assert not gate.is_identity() - - @pytest.mark.parametrize( - ("bsr", "default_gate"), - [ - (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=math.pi, phase=math.pi / 2), H(0)), - (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2), X(0)), - (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi / 2, phase=math.pi / 4), X90(0)), - (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4), X90(0)), - (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=-math.pi / 2, phase=-math.pi / 4), MinusX90(0)), - (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=math.pi / 2, phase=math.pi / 4), MinusX90(0)), - (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=-math.pi / 4, phase=-math.pi / 8), TDagger(0)), - (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi / 4, phase=0), Rx(0, math.pi / 4)), - (BlochSphereRotation(qubit=0, axis=(0, 1, 0), angle=math.pi / 3, phase=0), Ry(0, math.pi / 3)), - (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=3 * math.pi / 4, phase=0), Rz(0, 3 * math.pi / 4)), - (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=math.pi, phase=0), Rn(0, 1, 0, 1, math.pi, 0)), - ], - ids=["H", "X", "X90-1", "X90-2", "mX90-1", "mX90-2", "Tdag", "Rx", "Ry", "Rz", "Rn"], - ) - def test_default_gate_matching(self, bsr: BlochSphereRotation, default_gate: BlochSphereRotation) -> None: - matched_bsr = BlochSphereRotation.try_match_replace_with_default(bsr) - assert matched_bsr == default_gate - assert matched_bsr.name == default_gate.name - - -class TestMatrixGate: - @pytest.fixture(name="gate") - def gate_fixture(self) -> MatrixGate: - cnot_matrix = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - ] - return MatrixGate(cnot_matrix, operands=[42, 100]) - - def test_array_like(self) -> None: - gate = MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]) - assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" - ) - - def test_incorrect_array(self) -> None: - with pytest.raises(ValueError, match=r".* inhomogeneous shape after .*") as e_info: - MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0]], [0, 1]) - assert "setting an array element with a sequence." in str(e_info.value) - - def test_repr(self, gate: MatrixGate) -> None: - assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" - ) - - def test_get_qubit_operands(self, gate: MatrixGate) -> None: - assert gate.get_qubit_operands() == [Qubit(42), Qubit(100)] - - def test_is_identity(self, gate: MatrixGate) -> None: - assert MatrixGate(np.eye(4, dtype=np.complex128), operands=[42, 100]).is_identity() - assert not gate.is_identity() - - def test_matrix_gate_same_control_and_target_qubit(self) -> None: - with pytest.raises(ValueError, match="operands cannot be the same"): - MatrixGate(np.eye(4, dtype=np.complex128), [0, 0]) - - -class TestControlledGate: - def test_control_gate_same_control_and_target_qubit(self) -> None: - with pytest.raises(ValueError, match="control and target qubit cannot be the same"): - ControlledGate(0, BlochSphereRotation(0, [0, 0, 1], angle=np.pi)) - - -class TestFloat: - def test_type_error(self) -> None: - with pytest.raises(TypeError, match="value must be a float"): - Float("f") # type: ignore - - def test_init(self) -> None: - assert Float(1).value == 1.0 - - -class TestInt: - @pytest.mark.parametrize("value", ["f", None, {1}]) - def test_type_error(self, value: Any) -> None: - with pytest.raises(TypeError, match="value must be an int"): - Int(value) - - @pytest.mark.parametrize("value", [1, 1.0, 1.1, Int(1)]) - def test_init(self, value: SupportsInt) -> None: - assert Int(value).value == 1 - - -class TestBit: - def test_type_error(self) -> None: - with pytest.raises(TypeError, match="index must be a BitLike"): - Bit("f") # type: ignore - - def test_init(self) -> None: - assert str(Bit(1)) == "Bit[1]" - - -class TestQubit: - def test_type_error(self) -> None: - with pytest.raises(TypeError, match="index must be a QubitLike"): - Qubit("f") # type: ignore - - def test_init(self) -> None: - assert str(Qubit(1)) == "Qubit[1]" diff --git a/test/utils/__init__.py b/test/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/writer/__init__.py b/test/writer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/opensquirrel/parser/__init__.py b/tests/__init__.py similarity index 100% rename from opensquirrel/parser/__init__.py rename to tests/__init__.py diff --git a/tests/docs/compilation-passes/test_exporter.py b/tests/docs/compilation-passes/test_exporter.py new file mode 100644 index 00000000..28debda3 --- /dev/null +++ b/tests/docs/compilation-passes/test_exporter.py @@ -0,0 +1,324 @@ +import importlib + +import pytest + +from opensquirrel import Circuit +from opensquirrel.passes.exporter import ExportFormat + + +class TestCqasmV1Exporter: + def test_simple_circuit(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + H q[0] + CNOT q[0], q[1] + b = measure q + """, + ) + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + assert ( + str(exported_circuit) + == """version 1.0 + +qubits 2 + +h q[0] +cnot q[0], q[1] +measure_z q[0] +measure_z q[1] +""" + ) + + def test_registers(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] qA + bit[3] bA + + H qA[0] + CNOT qA[0], qA[1] + + bA[1,2] = measure qA + + qubit[3] qB + bit[2] bB + + H qB[1] + CNOT qB[1], qA[1] + + bB[0] = measure qB[1] + bB[1] = measure qA[1] + """, + ) + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + assert ( + str(exported_circuit) + == """version 1.0 + +qubits 5 + +h q[0] +cnot q[0], q[1] +measure_z q[0] +measure_z q[1] +h q[3] +cnot q[3], q[1] +measure_z q[3] +measure_z q[1] +""" + ) + + def test_init_and_reset(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + init q + + H q[0] + CNOT q[0], q[1] + b = measure q + + reset q + + H q[0] + Z q[0] + CNOT q[0], q[1] + b = measure q + """, + ) + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + assert ( + str(exported_circuit) + == """version 1.0 + +qubits 2 + +prep_z q[0] +prep_z q[1] +h q[0] +cnot q[0], q[1] +measure_z q[0] +measure_z q[1] +prep_z q[0] +prep_z q[1] +h q[0] +z q[0] +cnot q[0], q[1] +measure_z q[0] +measure_z q[1] +""" + ) + + def test_sgmq_notation_and_uniform_barriers(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[4] q + bit[4] b + + init q[0,1] + + barrier q[0] + + H q[0] + CNOT q[0], q[1] + + init q[2] + + barrier q[0] + barrier q[1] + barrier q[2] + + H q[2] + b[0,1] = measure q[0,1] + + init q[3] + + barrier q[2, 3] + Z q[2] + CNOT q[2], q[3] + + b[2,3] = measure q[2,3] + """, + ) + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + assert ( + str(exported_circuit) + == """version 1.0 + +qubits 4 + +prep_z q[0] +prep_z q[1] +barrier q[0] +h q[0] +cnot q[0], q[1] +prep_z q[2] +barrier q[0, 1, 2] +h q[2] +measure_z q[0] +measure_z q[1] +prep_z q[3] +barrier q[2, 3] +z q[2] +cnot q[2], q[3] +measure_z q[2] +measure_z q[3] +""" + ) + + +class TestQuantifySchedulerExporter: + def test_simple_circuit(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + Ry(pi/2) q[0] + X q[0] + CNOT q[0], q[1] + b = measure q + """, + ) + if importlib.util.find_spec("quantify_scheduler") is None: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + else: + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + operations = [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] + + assert operations == [ + "Rxy(90, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "CNOT (q[0], q[1])", + "Measure q[0]", + "Measure q[1]", + ] + assert bitstring_mapping == [(0, 0), (0, 1)] + + def test_registers(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] qA + bit[3] bA + + Ry(pi/2) qA[0] + X qA[0] + CNOT qA[0], qA[1] + + bA[1,2] = measure qA + + qubit[3] qB + bit[2] bB + + Ry(pi/2) qB[1] + X qB[1] + CNOT qB[1], qA[1] + + bB[0] = measure qB[1] + bB[1] = measure qA[1] + """, + ) + if importlib.util.find_spec("quantify_scheduler") is None: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + else: + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + operations = [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] + + assert operations == [ + "Rxy(90, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "CNOT (q[0], q[1])", + "Measure q[0]", + "Measure q[1]", + "Rxy(90, 90, 'q[3]')", + "Rxy(180, 0, 'q[3]')", + "CNOT (q[3], q[1])", + "Measure q[3]", + "Measure q[1]", + ] + assert bitstring_mapping == [(None, None), (0, 0), (0, 1), (0, 3), (1, 1)] + + def test_init_and_reset(self) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[2] q + bit[2] b + + init q + + Ry(pi/2) q[0] + X q[0] + CNOT q[0], q[1] + b = measure q + + reset q + + Ry(pi/2) q[0] + X q[0] + Z q[0] + CNOT q[0], q[1] + b = measure q + """, + ) + if importlib.util.find_spec("quantify_scheduler") is None: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + else: + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + operations = [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] + + assert operations == [ + "Rxy(90, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "CNOT (q[0], q[1])", + "Measure q[0]", + "Measure q[1]", + "Reset q[0]", + "Reset q[1]", + "Rxy(90, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "Rz(180, 'q[0]')", + "CNOT (q[0], q[1])", + "Measure q[0]", + "Measure q[1]", + ] + assert bitstring_mapping == [(1, 0), (1, 1)] diff --git a/tests/docs/compilation-passes/test_merger.py b/tests/docs/compilation-passes/test_merger.py new file mode 100644 index 00000000..728b87d9 --- /dev/null +++ b/tests/docs/compilation-passes/test_merger.py @@ -0,0 +1,72 @@ +from math import pi + +from opensquirrel import CircuitBuilder +from opensquirrel.passes.decomposer import McKayDecomposer +from opensquirrel.passes.merger import SingleQubitGatesMerger + + +class TestSingleQubitGatesMerger: + def test_four_rx_to_one_rx(self) -> None: + builder = CircuitBuilder(1) + for _ in range(4): + builder.Rx(0, pi / 4) + circuit = builder.to_circuit() + + circuit.merge(merger=SingleQubitGatesMerger()) + + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +Rx(3.1415927) q[0] +""" + ) + + def test_no_merge_across(self) -> None: + builder = CircuitBuilder(2, 2) + builder.Ry(0, pi / 2).X(0).CNOT(0, 1).H(0).X(1).barrier(1).H(0).X(1).measure(0, 0).H(0).X(1) + circuit = builder.to_circuit() + + circuit.merge(merger=SingleQubitGatesMerger()) + + assert ( + str(circuit) + == """version 3.0 + +qubit[2] q +bit[2] b + +H q[0] +CNOT q[0], q[1] +H q[0] +X q[1] +barrier q[1] +H q[0] +b[0] = measure q[0] +H q[0] +""" + ) + + def test_increase_circuit_depth(self) -> None: + builder = CircuitBuilder(1) + builder.Rx(0, pi / 3).Ry(0, pi / 5) + circuit = builder.to_circuit() + + circuit.merge(merger=SingleQubitGatesMerger()) + circuit.decompose(decomposer=McKayDecomposer()) + + assert ( + str(circuit) + == """version 3.0 + +qubit[1] q + +Rz(-2.2688338) q[0] +X90 q[0] +Rz(1.9872376) q[0] +X90 q[0] +Rz(-1.2436334) q[0] +""" + ) diff --git a/tests/docs/compilation-passes/test_router.py b/tests/docs/compilation-passes/test_router.py new file mode 100644 index 00000000..e16557f1 --- /dev/null +++ b/tests/docs/compilation-passes/test_router.py @@ -0,0 +1,215 @@ +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.exceptions import NoRoutingPathError +from opensquirrel.passes.router import AStarRouter, ShortestPathRouter +from opensquirrel.passes.router.heuristics import DistanceMetric + + +class TestAStarRouter: + def test_example_1(self) -> None: + connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + + builder = CircuitBuilder(5) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + circuit = builder.to_circuit() + + a_star_router = AStarRouter(connectivity=connectivity, distance_metric=DistanceMetric.MANHATTAN) + circuit.route(router=a_star_router) + + assert ( + str(circuit) + == """version 3.0 + +qubit[5] q + +CNOT q[0], q[1] +CNOT q[1], q[2] +CNOT q[2], q[3] +CNOT q[3], q[4] +SWAP q[0], q[1] +SWAP q[1], q[2] +SWAP q[2], q[3] +CNOT q[3], q[4] +""" + ) + + def test_example_2(self) -> None: + connectivity = { + "0": [1, 2, 5], + "1": [0, 3, 6], + "2": [0, 4, 7], + "3": [1, 5, 8], + "4": [2, 6, 9], + "5": [0, 3, 7], + "6": [1, 4, 8], + "7": [2, 5, 9], + "8": [3, 6, 9], + "9": [4, 7, 8], + } + + builder = CircuitBuilder(10) + builder.CNOT(0, 9) + builder.CNOT(1, 8) + builder.CNOT(2, 7) + builder.CNOT(3, 6) + builder.CNOT(4, 5) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 6) + builder.CNOT(5, 7) + builder.CNOT(8, 9) + builder.CNOT(0, 5) + builder.CNOT(1, 6) + builder.CNOT(2, 8) + builder.CNOT(3, 9) + circuit = builder.to_circuit() + + a_star_router = AStarRouter(connectivity=connectivity, distance_metric=DistanceMetric.CHEBYSHEV) + circuit.route(router=a_star_router) + + assert ( + str(circuit) + == """version 3.0 + +qubit[10] q + +SWAP q[0], q[2] +SWAP q[2], q[4] +CNOT q[4], q[9] +SWAP q[1], q[6] +CNOT q[6], q[8] +SWAP q[0], q[2] +CNOT q[2], q[7] +CNOT q[3], q[1] +CNOT q[0], q[5] +CNOT q[4], q[2] +SWAP q[6], q[1] +CNOT q[1], q[3] +SWAP q[0], q[1] +CNOT q[1], q[6] +CNOT q[5], q[7] +CNOT q[8], q[9] +SWAP q[4], q[2] +SWAP q[2], q[0] +CNOT q[0], q[5] +SWAP q[2], q[4] +CNOT q[4], q[6] +SWAP q[2], q[4] +SWAP q[4], q[9] +CNOT q[9], q[8] +SWAP q[3], q[8] +SWAP q[8], q[9] +CNOT q[9], q[4] +""" + ) + + def test_example_3(self) -> None: + connectivity = {"0": [1], "1": [0], "2": [3], "3": [2]} + + builder = CircuitBuilder(4) + builder.CNOT(0, 2) + builder.CNOT(3, 1) + circuit = builder.to_circuit() + + a_star_router = AStarRouter(connectivity=connectivity, distance_metric=DistanceMetric.EUCLIDEAN) + with pytest.raises(NoRoutingPathError, match=r"No routing path available between qubit 0 and qubit 2"): + circuit.route(router=a_star_router) + + +class TestShortestPathRouter: + def test_example_1(self) -> None: + connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + + builder = CircuitBuilder(5) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + circuit = builder.to_circuit() + + shortest_path_router = ShortestPathRouter(connectivity=connectivity) + circuit.route(router=shortest_path_router) + + assert ( + str(circuit) + == """version 3.0 + +qubit[5] q + +CNOT q[0], q[1] +CNOT q[1], q[2] +CNOT q[2], q[3] +CNOT q[3], q[4] +SWAP q[0], q[1] +SWAP q[1], q[2] +SWAP q[2], q[3] +CNOT q[3], q[4] +""" + ) + + def test_example_2(self) -> None: + connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} + + builder = CircuitBuilder(7) + builder.CNOT(0, 6) + builder.CNOT(1, 5) + builder.CNOT(2, 4) + builder.CNOT(3, 6) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(4, 5) + builder.CNOT(5, 6) + circuit = builder.to_circuit() + + shortest_path_router = ShortestPathRouter(connectivity=connectivity) + circuit.route(router=shortest_path_router) + + assert ( + str(circuit) + == """version 3.0 + +qubit[7] q + +SWAP q[0], q[1] +SWAP q[1], q[3] +SWAP q[3], q[5] +CNOT q[5], q[6] +SWAP q[0], q[1] +CNOT q[1], q[3] +CNOT q[2], q[4] +SWAP q[0], q[1] +SWAP q[1], q[3] +SWAP q[3], q[5] +CNOT q[5], q[6] +SWAP q[3], q[1] +SWAP q[1], q[0] +CNOT q[0], q[2] +SWAP q[1], q[3] +CNOT q[3], q[5] +SWAP q[4], q[2] +SWAP q[2], q[0] +CNOT q[0], q[1] +SWAP q[1], q[3] +SWAP q[3], q[5] +CNOT q[5], q[6] +""" + ) + + def test_example_3(self) -> None: + connectivity = {"0": [1], "1": [0], "2": [3], "3": [2]} + + builder = CircuitBuilder(4) + builder.CNOT(0, 2) + builder.CNOT(3, 1) + circuit = builder.to_circuit() + + shortest_path_router = ShortestPathRouter(connectivity=connectivity) + + with pytest.raises(NoRoutingPathError, match=r"No routing path available between qubit 0 and qubit 2"): + circuit.route(router=shortest_path_router) diff --git a/tests/docs/compilation-passes/test_validator.py b/tests/docs/compilation-passes/test_validator.py new file mode 100644 index 00000000..9501d88c --- /dev/null +++ b/tests/docs/compilation-passes/test_validator.py @@ -0,0 +1,79 @@ +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator + + +class TestInteractionValidator: + @pytest.fixture + def connectivity(self) -> dict[str, list[int]]: + return {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} + + @pytest.fixture + def interaction_validator(self, connectivity: dict[str, list[int]]) -> InteractionValidator: + return InteractionValidator(connectivity) + + def test_example_1(self, interaction_validator: InteractionValidator) -> None: + builder = CircuitBuilder(5) + builder.H(0) + builder.CNOT(0, 1) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(2, 4) + builder.CNOT(3, 4) + circuit = builder.to_circuit() + circuit.validate(validator=interaction_validator) + + def test_example_2(self, interaction_validator: InteractionValidator) -> None: + builder = CircuitBuilder(5) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(0, 3) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(1, 3) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + circuit = builder.to_circuit() + + with pytest.raises( + ValueError, + match=r"the following qubit interactions in the circuit prevent a 1-to-1" + r" mapping:\{\(2, 3\), \(0, 3\), \(0, 4\)\}", + ): + circuit.validate(validator=interaction_validator) + + +class TestPrimitiveGateValidator: + def test_example_1(self) -> None: + from math import pi + + pgs = ["I", "Rx", "Ry", "Rz", "CZ"] + + builder = CircuitBuilder(5) + builder.Rx(0, pi / 2) + builder.Ry(1, -pi / 2) + builder.CZ(0, 1) + builder.Ry(1, pi / 2) + circuit = builder.to_circuit() + + circuit.validate(validator=PrimitiveGateValidator(primitive_gate_set=pgs)) + + def test_example_2(self) -> None: + pgs = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] + + builder = CircuitBuilder(5) + builder.I(0) + builder.X90(1) + builder.mX90(2) + builder.Y90(3) + builder.mY90(4) + builder.Rz(0, 2) + builder.CZ(1, 2) + builder.H(0) + builder.CNOT(1, 2) + circuit = builder.to_circuit() + + with pytest.raises(ValueError, match=r"the following gates are not in the primitive gate set: ['H', 'CNOT']"): + circuit.validate(validator=PrimitiveGateValidator(primitive_gate_set=pgs)) diff --git a/tests/docs/tutorial/test_tutorial.py b/tests/docs/tutorial/test_tutorial.py new file mode 100644 index 00000000..76892a68 --- /dev/null +++ b/tests/docs/tutorial/test_tutorial.py @@ -0,0 +1,407 @@ +import math +from typing import ClassVar + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.passes.decomposer import CNOT2CZDecomposer, McKayDecomposer, SWAP2CZDecomposer +from opensquirrel.passes.exporter import ExportFormat +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator + + +@pytest.fixture +def circuit_1() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +Ry(1.5707963) q[0] +X q[0] +CNOT q[0], q[2] +barrier q[0] +barrier q[1] +barrier q[2] +b[0] = measure q[0] +b[1] = measure q[2] +""" + ) + + +@pytest.fixture +def circuit_2() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +Ry(1.5707963) q[0] +X q[0] +SWAP q[0], q[1] +CNOT q[1], q[2] +barrier q[1] +barrier q[0] +barrier q[2] +b[0] = measure q[1] +b[1] = measure q[2] +""" + ) + + +@pytest.fixture +def circuit_3() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +Ry(1.5707963) q[0] +X q[0] +Ry(-1.5707963) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Ry(-1.5707963) q[0] +CZ q[1], q[0] +Ry(1.5707963) q[0] +Ry(-1.5707963) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +CNOT q[1], q[2] +barrier q[1] +barrier q[0] +barrier q[2] +b[0] = measure q[1] +b[1] = measure q[2] +""" + ) + + +@pytest.fixture +def circuit_4() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +Ry(1.5707963) q[0] +X q[0] +Ry(-1.5707963) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Ry(-1.5707963) q[0] +CZ q[1], q[0] +Ry(1.5707963) q[0] +Ry(-1.5707963) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Ry(-1.5707963) q[2] +CZ q[1], q[2] +Ry(1.5707963) q[2] +barrier q[1] +barrier q[0] +barrier q[2] +b[0] = measure q[1] +b[1] = measure q[2] +""" + ) + + +@pytest.fixture +def circuit_5() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +H q[0] +Rn(0.0, -1.0, 0.0, 1.5707963, 0.0) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Rn(0.0, -1.0, 0.0, 1.5707963, 0.0) q[0] +CZ q[1], q[0] +Ry(1.5707963) q[0] +Rn(0.0, -1.0, 0.0, 1.5707963, 0.0) q[1] +CZ q[0], q[1] +Ry(1.5707963) q[1] +Rn(0.0, -1.0, 0.0, 1.5707963, 0.0) q[2] +CZ q[1], q[2] +Ry(1.5707963) q[2] +barrier q[1] +barrier q[0] +barrier q[2] +b[0] = measure q[1] +b[1] = measure q[2] +""" + ) + + +@pytest.fixture +def circuit_6() -> Circuit: + return Circuit.from_string( + """version 3.0 + +qubit[3] q +bit[2] b + +init q[0] +init q[1] +init q[2] +Rz(1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(1.5707963) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(1.5707963) q[2] +X90 q[2] +Rz(-1.5707963) q[2] +CZ q[1], q[2] +Rz(-1.5707963) q[2] +X90 q[2] +Rz(1.5707963) q[2] +barrier q[1] +barrier q[0] +barrier q[2] +b[0] = measure q[1] +b[1] = measure q[2] +""" + ) + + +class TestTutorial: + @pytest.fixture + def circuit(self) -> Circuit: + builder = CircuitBuilder(1) + builder.H(0) + return builder.to_circuit() + + def test_apply_mckay_decomposer(self, circuit: Circuit) -> None: + circuit.decompose(decomposer=McKayDecomposer()) + assert str(circuit) == """version 3.0\n\nqubit[1] q\n\nRz(1.5707963) q[0]\nX90 q[0]\nRz(1.5707963) q[0]\n""" + + +class TestCreatingACircuit: + def test_from_a_cqasm_string(self, circuit_1: Circuit) -> None: + circuit = Circuit.from_string( + """ + // Version statement + version 3.0 + + // Qubit register declaration + qubit[3] q + + // Bit register declaration + bit[2] b + + // Qubit register initialization (with SGMQ notation) + init q + + // Single-qubit gates + Ry(pi / 2) q[0] + X q[0] + + // Two-qubit gate + CNOT q[0], q[2] + + // Control instruction (with SGMQ notation) + barrier q + + // Measure instruction (with SGMQ notation) + b[0, 1] = measure q[0, 2] + """ + ) + assert str(circuit) == str(circuit_1) + + def test_by_using_the_circuit_builder(self, circuit_1: Circuit) -> None: + builder = CircuitBuilder(qubit_register_size=3, bit_register_size=2) + builder.init(0).init(1).init(2) + builder.Ry(0, math.pi / 2) + builder.X(0) + builder.CNOT(0, 2) + builder.barrier(0).barrier(1).barrier(2) + builder.measure(0, 0).measure(2, 1) + circuit = builder.to_circuit() + + assert str(circuit) == str(circuit_1) + + def test_circuit_builder_loop(self) -> None: + qreg_size = 10 + builder = CircuitBuilder(qubit_register_size=qreg_size) + for qubit_index in range(0, qreg_size, 2): + builder.H(qubit_index) + circuit = builder.to_circuit() + + assert ( + str(circuit) + == """version 3.0 + +qubit[10] q + +H q[0] +H q[2] +H q[4] +H q[6] +H q[8] +""" + ) + + def test_circuit_builder_qft(self) -> None: + qreg_size = 5 + builder = CircuitBuilder(qubit_register_size=qreg_size) + for qubit_index in range(qreg_size): + builder.H(qubit_index) + for control_index in range(qubit_index + 1, qreg_size): + target_index = qubit_index + k = control_index - target_index + 1 + builder.CRk(control_index, target_index, k) + circuit_qft = builder.to_circuit() + assert ( + str(circuit_qft) + == """version 3.0 + +qubit[5] q + +H q[0] +CRk(2) q[1], q[0] +CRk(3) q[2], q[0] +CRk(4) q[3], q[0] +CRk(5) q[4], q[0] +H q[1] +CRk(2) q[2], q[1] +CRk(3) q[3], q[1] +CRk(4) q[4], q[1] +H q[2] +CRk(2) q[3], q[2] +CRk(3) q[4], q[2] +H q[3] +CRk(2) q[4], q[3] +H q[4] +""" + ) + + +class TestApplyingCompilationPasses: + connectivity: ClassVar[dict[str, list[int]]] = {"0": [1], "1": [0, 2], "2": [1]} + pgs: ClassVar[list[str]] = ["I", "X90", "Rx", "Rz", "CZ", "init", "barrier", "measure"] + + def test_routing(self, circuit_1: Circuit, circuit_2: Circuit) -> None: + circuit = circuit_1 + from opensquirrel.passes.router import ShortestPathRouter + + circuit.route(router=ShortestPathRouter(connectivity=self.connectivity)) + + assert str(circuit) == str(circuit_2) + + def test_decomposition_predefined(self, circuit_2: Circuit, circuit_3: Circuit, circuit_4: Circuit) -> None: + circuit = circuit_2 + circuit.decompose(decomposer=SWAP2CZDecomposer()) + assert str(circuit) == str(circuit_3) + + circuit = circuit_3 + circuit.decompose(decomposer=CNOT2CZDecomposer()) + assert str(circuit) == str(circuit_4) + + def test_merging(self, circuit_4: Circuit, circuit_5: Circuit) -> None: + circuit = circuit_4 + circuit.merge(merger=SingleQubitGatesMerger()) + assert str(circuit) == str(circuit_5) + + def test_decomposition_inferred(self, circuit_5: Circuit, circuit_6: Circuit) -> None: + circuit = circuit_5 + circuit.decompose(decomposer=McKayDecomposer()) + assert str(circuit) == str(circuit_6) + + def test_validation(self, circuit_6: Circuit) -> None: + circuit_6.validate(validator=InteractionValidator(connectivity=self.connectivity)) + circuit_6.validate(validator=PrimitiveGateValidator(primitive_gate_set=self.pgs)) + + +class TestWritingOutAndExporting: + def test_exporting_to_cqasm_v1(self, circuit_6: Circuit) -> None: + circuit = circuit_6 + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + + assert ( + str(exported_circuit) + == """version 1.0 + +qubits 3 + +prep_z q[0] +prep_z q[1] +prep_z q[2] +rz q[0], 1.5707963 +x90 q[0] +rz q[0], 1.5707963 +rz q[1], 1.5707963 +x90 q[1] +rz q[1], -1.5707963 +cz q[0], q[1] +rz q[1], -1.5707963 +x90 q[1] +rz q[1], 1.5707963 +rz q[0], 1.5707963 +x90 q[0] +rz q[0], -1.5707963 +cz q[1], q[0] +rz q[0], -1.5707963 +x90 q[0] +rz q[0], 1.5707963 +rz q[1], 1.5707963 +x90 q[1] +rz q[1], -1.5707963 +cz q[0], q[1] +rz q[1], -1.5707963 +x90 q[1] +rz q[1], 1.5707963 +rz q[2], 1.5707963 +x90 q[2] +rz q[2], -1.5707963 +cz q[1], q[2] +rz q[2], -1.5707963 +x90 q[2] +rz q[2], 1.5707963 +barrier q[1, 0, 2] +measure_z q[1] +measure_z q[2] +""" + ) diff --git a/test/example/tutorials/test_decompositions.py b/tests/example/tutorials/test_decompositions.py similarity index 99% rename from test/example/tutorials/test_decompositions.py rename to tests/example/tutorials/test_decompositions.py index d7c12e3b..cbddf61a 100644 --- a/test/example/tutorials/test_decompositions.py +++ b/tests/example/tutorials/test_decompositions.py @@ -176,7 +176,7 @@ def test_cnot_decomposer(self) -> None: Ry(1.5707963) q[1] CNOT q[0], q[1] Ry(-1.5707963) q[1] -Rz(-3.1415927) q[1] +Rz(3.1415927) q[1] Rz(0.52359878) q[1] CNOT q[0], q[1] Rz(-0.52359878) q[1] diff --git a/test/test_init.py b/tests/instructions/test_init.py similarity index 72% rename from test/test_init.py rename to tests/instructions/test_init.py index 783b4a60..61aa2edf 100644 --- a/test/test_init.py +++ b/tests/instructions/test_init.py @@ -19,14 +19,14 @@ ids=["init", "init sgmq"], ) def test_init_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: - qc = Circuit.from_string(cqasm_string) - assert str(qc) == expected_result + circuit = Circuit.from_string(cqasm_string) + assert str(circuit) == expected_result def test_init_in_circuit_builder() -> None: builder = CircuitBuilder(2) builder.init(0).init(1) - qc = builder.to_circuit() - assert qc.qubit_register_size == 2 - assert qc.qubit_register_name == "q" - assert qc.ir.statements == [Init(0), Init(1)] + circuit = builder.to_circuit() + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [Init(0), Init(1)] diff --git a/test/test_instructions.py b/tests/instructions/test_instructions.py similarity index 95% rename from test/test_instructions.py rename to tests/instructions/test_instructions.py index 1c093194..e0cd3781 100644 --- a/test/test_instructions.py +++ b/tests/instructions/test_instructions.py @@ -2,7 +2,7 @@ def test_parse_instructions() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -54,7 +54,7 @@ def test_parse_instructions() -> None: ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -82,7 +82,7 @@ def test_parse_instructions() -> None: Rn(1.0, 0.0, 0.0, 1.5707963, 0.78539816) q[0] Rx(1.5707963) q[0] Ry(1.5707963) q[0] -Rz(6.2831853) q[0] +Rz(0.0) q[0] reset q[0] reset q[1] b[0] = measure q[0] diff --git a/test/test_measure.py b/tests/instructions/test_measure.py similarity index 82% rename from test/test_measure.py rename to tests/instructions/test_measure.py index b1d64b5c..87bf293c 100644 --- a/test/test_measure.py +++ b/tests/instructions/test_measure.py @@ -4,7 +4,7 @@ def test_measure() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -15,7 +15,7 @@ def test_measure() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -28,7 +28,7 @@ def test_measure() -> None: def test_consecutive_measures() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -44,7 +44,7 @@ def test_consecutive_measures() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[3] q @@ -61,7 +61,7 @@ def test_consecutive_measures() -> None: def test_measures_unrolling() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -76,7 +76,7 @@ def test_measures_unrolling() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[6] q @@ -101,7 +101,7 @@ def test_measures_unrolling() -> None: def test_measure_order() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -113,10 +113,10 @@ def test_measure_order() -> None: b[1, 0] = measure q[1, 0] """, ) - qc.merge(merger=SingleQubitGatesMerger()) - qc.decompose(decomposer=McKayDecomposer()) + circuit.merge(merger=SingleQubitGatesMerger()) + circuit.decompose(decomposer=McKayDecomposer()) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -131,7 +131,7 @@ def test_measure_order() -> None: def test_multiple_qubit_bit_definitions_and_mid_circuit_measure_instructions() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -148,10 +148,10 @@ def test_multiple_qubit_bit_definitions_and_mid_circuit_measure_instructions() - b0 = measure q0 """, ) - qc.merge(merger=SingleQubitGatesMerger()) - qc.decompose(decomposer=McKayDecomposer()) + circuit.merge(merger=SingleQubitGatesMerger()) + circuit.decompose(decomposer=McKayDecomposer()) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q diff --git a/test/test_reset.py b/tests/instructions/test_reset.py similarity index 73% rename from test/test_reset.py rename to tests/instructions/test_reset.py index 244c5918..58a5f129 100644 --- a/test/test_reset.py +++ b/tests/instructions/test_reset.py @@ -19,14 +19,14 @@ ids=["reset", "reset sgmq"], ) def test_reset_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: - qc = Circuit.from_string(cqasm_string) - assert str(qc) == expected_result + circuit = Circuit.from_string(cqasm_string) + assert str(circuit) == expected_result def test_reset_in_circuit_builder() -> None: builder = CircuitBuilder(2) builder.reset(0).reset(1) - qc = builder.to_circuit() - assert qc.qubit_register_size == 2 - assert qc.qubit_register_name == "q" - assert qc.ir.statements == [Reset(0), Reset(1)] + circuit = builder.to_circuit() + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [Reset(0), Reset(1)] diff --git a/test/test_wait.py b/tests/instructions/test_wait.py similarity index 71% rename from test/test_wait.py rename to tests/instructions/test_wait.py index b9d2298b..012f98af 100644 --- a/test/test_wait.py +++ b/tests/instructions/test_wait.py @@ -19,26 +19,26 @@ ids=["wait", "wait sgmq"], ) def test_wait_as_cqasm_string(cqasm_string: str, expected_result: str) -> None: - qc = Circuit.from_string(cqasm_string) - assert str(qc) == expected_result + circuit = Circuit.from_string(cqasm_string) + assert str(circuit) == expected_result def test_wait_in_circuit_builder() -> None: builder = CircuitBuilder(2) builder.wait(0, 3).wait(1, 1) - qc = builder.to_circuit() - assert qc.qubit_register_size == 2 - assert qc.qubit_register_name == "q" - assert qc.ir.statements == [Wait(0, 3), Wait(1, 1)] + circuit = builder.to_circuit() + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [Wait(0, 3), Wait(1, 1)] def test_wait_in_instruction_context() -> None: builder = CircuitBuilder(2) builder.H(0).H(1).wait(0, 1).barrier(1).wait(1, 3).barrier(0).CNOT(0, 1).wait(0, 3) - qc = builder.to_circuit() - assert qc.qubit_register_size == 2 - assert qc.qubit_register_name == "q" - assert qc.ir.statements == [ + circuit = builder.to_circuit() + assert circuit.qubit_register_size == 2 + assert circuit.qubit_register_name == "q" + assert circuit.ir.statements == [ H(0), H(1), Wait(0, 1), diff --git a/tests/integration/test_rydberg.py b/tests/integration/test_rydberg.py new file mode 100644 index 00000000..b3a8bdb8 --- /dev/null +++ b/tests/integration/test_rydberg.py @@ -0,0 +1,76 @@ +from opensquirrel import Circuit + + +class TestRydberg: + def test_circuit(self) -> None: + circuit = Circuit.from_string( + """version 3.0 + +qubit[9] q + +asm(Rydberg) ''' +INIT(p(0,1)) q[0] +INIT(p(1,1)) q[1] +INIT(p(1,2)) q[2] +INIT(p(2,0)) q[3] +INIT(p(2,1)) q[4] +INIT(p(2,2)) q[5] +INIT(p(3,3)) q[6] +INIT(p(3,1)) q[7] +INIT(p(4,0)) q[8] +''' + +X q + +asm(Rydberg) ''' +RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] +RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] +RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] +''' + +X q +""", + ) + # Compiler configuration is yet to be defined for the Rydberg backend. + assert ( + str(circuit) + == """version 3.0 + +qubit[9] q + +asm(Rydberg) ''' +INIT(p(0,1)) q[0] +INIT(p(1,1)) q[1] +INIT(p(1,2)) q[2] +INIT(p(2,0)) q[3] +INIT(p(2,1)) q[4] +INIT(p(2,2)) q[5] +INIT(p(3,3)) q[6] +INIT(p(3,1)) q[7] +INIT(p(4,0)) q[8] +''' +X q[0] +X q[1] +X q[2] +X q[3] +X q[4] +X q[5] +X q[6] +X q[7] +X q[8] +asm(Rydberg) ''' +RG(r(0.00046748015548948326, -0.9711667423688995, 0.15759622123497696)) q[0] +RG(r(0.001868075691355584, -0.9423334847377992, 0.15759622123497696)) q[0] +RG(r(0.004196259096889474, -0.9135002271066988, 0.15759622123497696)) q[0] +''' +X q[0] +X q[1] +X q[2] +X q[3] +X q[4] +X q[5] +X q[6] +X q[7] +X q[8] +""" + ) diff --git a/tests/integration/test_spin_2_plus.py b/tests/integration/test_spin_2_plus.py new file mode 100644 index 00000000..892ce3b9 --- /dev/null +++ b/tests/integration/test_spin_2_plus.py @@ -0,0 +1,163 @@ +from typing import Any + +import pytest + +from opensquirrel import Circuit +from opensquirrel.passes.decomposer import CNOT2CZDecomposer, CNOTDecomposer, McKayDecomposer, SWAP2CNOTDecomposer +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator + +DataType = dict[str, Any] + + +class TestSpin2Plus: + @pytest.fixture + def data(self) -> DataType: + """ + Spin-2+ chip topology: + 0 <--> 1 + """ + connectivity = {"0": [1], "1": [0]} + primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ", "measure", "wait", "init", "barrier"] + return { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + def test_complete_circuit(self, data: DataType) -> None: + circuit = Circuit.from_string( + """ + // Version statement + version 3.0 + + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + + /* This is a multi- + line comment block */ + + // (Qu)bit declaration + qubit[2] q // Sping-2+ has a 2-qubit register + bit[4] b + + // Initialization + init q + + // Single-qubit gates + I q[0] + H q[1] + X q[0] + X90 q[1] + mX90 q[0] + Y q[1] + Y90 q[0] + mY90 q[1] + Z q[0] + S q[1] + Sdag q[0] + T q[1] + Tdag q[0] + Rx(pi/2) q[1] + Ry(pi/2) q[0] + Rz(tau) q[1] + + // Mid-circuit measurement + b[0,2] = measure q + + // Two-qubit gates + CNOT q[0], q[1] + CZ q[1], q[0] + CR(pi) q[0], q[1] + CRk(2) q[1], q[0] + SWAP q[0], q[1] + + // Control instructions + barrier q + wait(3) q + + // Final measurement + b[1,3] = measure q + """, + ) + circuit.validate(validator=InteractionValidator(**data)) + circuit.decompose(decomposer=SWAP2CNOTDecomposer(**data)) + circuit.decompose(decomposer=CNOTDecomposer(**data)) + circuit.decompose(decomposer=CNOT2CZDecomposer(**data)) + circuit.merge(merger=SingleQubitGatesMerger(**data)) + circuit.decompose(decomposer=McKayDecomposer(**data)) + circuit.validate(validator=PrimitiveGateValidator(**data)) + + assert ( + str(circuit) + == """version 3.0 + +qubit[2] q +bit[4] b + +init q[0] +init q[1] +Rz(1.5707963) q[0] +X90 q[0] +Rz(0.78539813) q[0] +X90 q[0] +Rz(-1.5707964) q[0] +b[0] = measure q[0] +Rz(2.3561946) q[1] +X90 q[1] +Rz(3.1415926) q[1] +b[2] = measure q[1] +Rz(1.5707963) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(3.1415927) q[0] +CZ q[1], q[0] +Rz(3.1415927) q[0] +Rz(3.1415927) q[1] +CZ q[0], q[1] +Rz(3.1415927) q[1] +Rz(2.3561944) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(2.3561946) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(2.3561944) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +Rz(1.5707963) q[0] +X90 q[0] +Rz(-1.5707963) q[0] +CZ q[1], q[0] +Rz(-1.5707963) q[0] +X90 q[0] +Rz(1.5707963) q[0] +Rz(1.5707963) q[1] +X90 q[1] +Rz(-1.5707963) q[1] +CZ q[0], q[1] +Rz(-1.5707963) q[1] +X90 q[1] +Rz(1.5707963) q[1] +barrier q[0] +barrier q[1] +wait(3) q[0] +wait(3) q[1] +b[1] = measure q[0] +b[3] = measure q[1] +""" + ) diff --git a/tests/integration/test_starmon_7.py b/tests/integration/test_starmon_7.py new file mode 100644 index 00000000..177d8949 --- /dev/null +++ b/tests/integration/test_starmon_7.py @@ -0,0 +1,182 @@ +from typing import Any + +import pytest + +from opensquirrel import Circuit +from opensquirrel.passes.exporter import ExportFormat +from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator + +DataType = dict[str, Any] + + +class TestStarmon7: + @pytest.fixture + def data(self) -> DataType: + """ + Starmon-7 chip topology: + 1 = 4 = 6 + \\ // + 3 + // \\ + 0 = 2 = 5 + """ + connectivity = { + "0": [2, 3], + "1": [3, 4], + "2": [0, 5], + "3": [0, 1, 5, 6], + "4": [1, 6], + "5": [2, 3], + "6": [3, 4], + } + primitive_gate_set = [ + "I", + "H", + "X", + "X90", + "mX90", + "Y", + "Y90", + "mY90", + "Z", + "S", + "Sdag", + "T", + "Tdag", + "Rx", + "Ry", + "Rz", + "CNOT", + "CZ", + "CR", + "CRk", + "SWAP", + "measure", + "wait", + "init", + "barrier", + ] + return { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + def test_complete_circuit(self, data: DataType) -> None: + circuit = Circuit.from_string( + """ + // Version statement + version 3.0 + + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + + /* This is a multi- + line comment block */ + + // (Qu)bit declaration + qubit[7] q // Starmon-7 has a 7-qubit register + bit[14] b + + // Initialization + init q + + // Single-qubit gates + I q[0] + H q[1] + X q[2] + X90 q[3] + mX90 q[4] + Y q[5] + Y90 q[6] + mY90 q[0] + Z q[1] + S q[2] + Sdag q[3] + T q[4] + Tdag q[5] + Rx(pi/2) q[6] + Ry(pi/2) q[0] + Rz(tau) q[1] + + barrier q // to ensure all measurements occur simultaneously + // Mid-circuit measurement + b[0:6] = measure q + + // Two-qubit gates + CNOT q[0], q[2] + CZ q[1], q[4] + CR(pi) q[5], q[3] + CRk(2) q[3], q[6] + SWAP q[5], q[2] + + // Control instructions + barrier q + wait(3) q + + // Final measurement + b[7:13] = measure q + """, + ) + circuit.validate(validator=InteractionValidator(**data)) + circuit.validate(validator=PrimitiveGateValidator(**data)) + exported_circuit = circuit.export(fmt=ExportFormat.CQASM_V1) + + assert ( + exported_circuit + == """version 1.0 + +qubits 7 + +prep_z q[0] +prep_z q[1] +prep_z q[2] +prep_z q[3] +prep_z q[4] +prep_z q[5] +prep_z q[6] +i q[0] +h q[1] +x q[2] +x90 q[3] +mx90 q[4] +y q[5] +y90 q[6] +my90 q[0] +z q[1] +s q[2] +sdag q[3] +t q[4] +tdag q[5] +rx q[6], 1.5707963 +ry q[0], 1.5707963 +rz q[1], 0.0 +barrier q[0, 1, 2, 3, 4, 5, 6] +measure_z q[0] +measure_z q[1] +measure_z q[2] +measure_z q[3] +measure_z q[4] +measure_z q[5] +measure_z q[6] +cnot q[0], q[2] +cz q[1], q[4] +cr(3.1415927) q[5], q[3] +crk(2) q[3], q[6] +swap q[5], q[2] +barrier q[0, 1, 2, 3, 4, 5, 6] +wait q[0], 3 +wait q[1], 3 +wait q[2], 3 +wait q[3], 3 +wait q[4], 3 +wait q[5], 3 +wait q[6], 3 +measure_z q[0] +measure_z q[1] +measure_z q[2] +measure_z q[3] +measure_z q[4] +measure_z q[5] +measure_z q[6] +""" + ) diff --git a/tests/integration/test_tuna_5.py b/tests/integration/test_tuna_5.py new file mode 100644 index 00000000..d53219f8 --- /dev/null +++ b/tests/integration/test_tuna_5.py @@ -0,0 +1,313 @@ +from __future__ import annotations + +import importlib +from typing import Any, Union + +import pytest + +from opensquirrel import Circuit, Measure +from opensquirrel.passes.decomposer import CZDecomposer, SWAP2CZDecomposer, XYXDecomposer +from opensquirrel.passes.exporter import ExportFormat +from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator + +DataType = dict[str, Any] +BitStringMappingType = list[Union[tuple[None, None], tuple[int, int]]] + + +def _get_operations(exported_schedule) -> list[str]: # type: ignore # noqa: ANN001 + return [ + exported_schedule.operations[schedulable["operation_id"]].name + for schedulable in exported_schedule.schedulables.values() + ] + + +def _check_bitstring_mapping(circuit: Circuit, exported_schedule, bitstring_mapping: BitStringMappingType) -> None: # type: ignore # noqa: ANN001 + ir_measures = [instruction for instruction in circuit.ir.statements if isinstance(instruction, Measure)] + ir_acq_index_record = [0] * circuit.qubit_register_size + ir_bitstring_mapping = [(None, None)] * circuit.bit_register_size + + qs_measures = [ + operation.data["gate_info"] + for operation in exported_schedule.operations.values() + if operation.data["gate_info"]["operation_type"] == "measure" + ] + + for i, ir_measure in enumerate(ir_measures): + qubit_index = ir_measure.qubit.index + ir_acq_index = ir_acq_index_record[qubit_index] + ir_bitstring_mapping[ir_measure.bit.index] = (ir_acq_index, qubit_index) # type: ignore + assert qs_measures[i]["acq_channel_override"] == qubit_index + assert qs_measures[i]["acq_index"] == ir_acq_index + assert qs_measures[i]["acq_protocol"] == "ThresholdedAcquisition" + ir_acq_index_record[qubit_index] += 1 + + assert len(bitstring_mapping) == circuit.bit_register_size + assert bitstring_mapping == ir_bitstring_mapping + + +class TestTuna5: + @pytest.fixture + def qs_is_installed(self) -> bool: + return importlib.util.find_spec("quantify_scheduler") is not None + + @pytest.fixture + def data(self) -> DataType: + # Tuna-5 (full-connectivity assumed for now) + connectivity = { + "0": [1, 2, 3, 4], + "1": [0, 2, 3, 4], + "2": [0, 1, 3, 4], + "3": [0, 1, 2, 4], + "4": [0, 1, 2, 3], + } + primitive_gate_set = [ + "I", + "X", + "X90", + "mX90", + "Y", + "Y90", + "mY90", + "Z", + "S", + "Sdag", + "T", + "Tdag", + "Rx", + "Ry", + "Rz", + "CNOT", + "CZ", + "measure", + "wait", + "init", + "barrier", + ] + return { + "connectivity": connectivity, + "primitive_gate_set": primitive_gate_set, + } + + def test_qs_is_not_installed(self, qs_is_installed: bool) -> None: + circuit = Circuit.from_string("""version 3.0;""") + if not qs_is_installed: + with pytest.raises( + Exception, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + + def test_complete_circuit(self, qs_is_installed: bool, data: DataType) -> None: + circuit = Circuit.from_string( + """ + // Version statement + version 3.0 + + // This is a single line comment which ends on the newline. + // The cQASM string must begin with the version instruction (apart from any preceding comments). + + /* This is a multi- + line comment block */ + + // (Qu)bit declaration + qubit[5] q // Tuna-5 has a 5-qubit register + bit[7] b + + // Initialization + init q + + // Single-qubit gates + I q[0] + H q[1] + X q[2] + X90 q[3] + mX90 q[4] + Y q[0] + Y90 q[1] + mY90 q[2] + Z q[3] + S q[4] + Sdag q[0] + T q[1] + Tdag q[2] + Rx(pi/2) q[3] + Ry(pi/2) q[4] + Rz(tau) q[0] + + barrier q // to ensure all measurements occur simultaneously + // Mid-circuit measurement + b[0:4] = measure q + + // Two-qubit gates + CNOT q[0], q[1] + CZ q[2], q[3] + CR(pi) q[4], q[0] + CRk(2) q[1], q[2] + SWAP q[3], q[4] + + // Control instructions + barrier q + // wait(3) q // not supported by HectoQubit/2 atm + + // Final measurement + b[2:6] = measure q + """ + ) + circuit.validate(validator=InteractionValidator(**data)) + circuit.decompose(decomposer=SWAP2CZDecomposer(**data)) + circuit.decompose(decomposer=CZDecomposer(**data)) + circuit.merge(merger=SingleQubitGatesMerger(**data)) + circuit.decompose(decomposer=XYXDecomposer(**data)) + circuit.validate(validator=PrimitiveGateValidator(**data)) + + if qs_is_installed: + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + operations = _get_operations(exported_schedule) + + assert exported_schedule.name == "Exported OpenSquirrel circuit" + assert operations == [ + "Rxy(90, 0, 'q[0]')", + "Rxy(90, 90, 'q[0]')", + "Rxy(90, 0, 'q[0]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(45, 90, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(-45, 0, 'q[2]')", + "Rxy(90, 90, 'q[2]')", + "Rxy(180, 0, 'q[2]')", + "Rxy(-90, 0, 'q[3]')", + "Rxy(180, 90, 'q[3]')", + "Rxy(90, 0, 'q[3]')", + "Rxy(-90, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(90, 0, 'q[4]')", + "Measure q[0]", + "Measure q[1]", + "Measure q[2]", + "Measure q[3]", + "Measure q[4]", + "Rxy(180, 0, 'q[1]')", + "Rxy(90, 90, 'q[1]')", + "Rxy(180, 0, 'q[1]')", + "CZ (q[0], q[1])", + "CZ (q[2], q[3])", + "CZ (q[4], q[0])", + "Rxy(90, 90, 'q[1]')", + "Rxy(-90, 0, 'q[2]')", + "CZ (q[1], q[2])", + "Rxy(180, 0, 'q[2]')", + "Rxy(45, 90, 'q[2]')", + "Rxy(180, 0, 'q[2]')", + "CZ (q[1], q[2])", + "Rxy(180, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[4]')", + "CZ (q[3], q[4])", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[3]')", + "Rxy(90, 90, 'q[3]')", + "Rxy(180, 0, 'q[3]')", + "CZ (q[4], q[3])", + "Rxy(90, 90, 'q[3]')", + "Rxy(180, 0, 'q[4]')", + "Rxy(90, 90, 'q[4]')", + "Rxy(180, 0, 'q[4]')", + "CZ (q[3], q[4])", + "Rxy(-90, 0, 'q[1]')", + "Rxy(45, 90, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(45, 90, 'q[2]')", + "Rxy(90, 0, 'q[2]')", + "Rxy(90, 90, 'q[4]')", + "Measure q[0]", + "Measure q[1]", + "Measure q[2]", + "Measure q[3]", + "Measure q[4]", + ] + _check_bitstring_mapping(circuit, exported_schedule, bitstring_mapping) + + def test_all_xy(self, qs_is_installed: bool, data: DataType) -> None: + circuit = Circuit.from_string( + """ + version 3.0 + + qubit[3] q + bit[10] b + + reset q + + Rx(0.0) q[0] + Rx(0.0) q[0] + b[0] = measure q[0] + + Rx(3.141592653589793) q[1] + Rx(3.141592653589793) q[1] + b[1] = measure q[1] + + Ry(3.141592653589793) q[0] + Ry(3.141592653589793) q[0] + b[2] = measure q[0] + + Rx(3.141592653589793) q[2] + Ry(3.141592653589793) q[2] + b[3] = measure q[2] + + Ry(3.141592653589793) q[0] + Rx(3.141592653589793) q[0] + b[4] = measure q[0] + + Rx(3.141592653589793) q[0] + Rx(0.0) q[0] + Ry(3.141592653589793) q[2] + Rx(0.0) q[2] + Rx(1.5707963267948966) q[1] + Rx(1.5707963267948966) q[1] + + b[6] = measure q[2] + b[5] = measure q[0] + b[8] = measure q[0] + b[7] = measure q[1] + + b[9] = measure q[0] + """ + ) + # No compilation passes are performed + if qs_is_installed: + exported_schedule, bitstring_mapping = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + operations = _get_operations(exported_schedule) + + assert exported_schedule.name == "Exported OpenSquirrel circuit" + assert operations == [ + "Reset q[0]", + "Reset q[1]", + "Reset q[2]", + "Rxy(0, 0, 'q[0]')", + "Rxy(0, 0, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[1]')", + "Rxy(180, 0, 'q[1]')", + "Measure q[1]", + "Rxy(180, 90, 'q[0]')", + "Rxy(180, 90, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[2]')", + "Rxy(180, 90, 'q[2]')", + "Measure q[2]", + "Rxy(180, 90, 'q[0]')", + "Rxy(180, 0, 'q[0]')", + "Measure q[0]", + "Rxy(180, 0, 'q[0]')", + "Rxy(0, 0, 'q[0]')", + "Rxy(180, 90, 'q[2]')", + "Rxy(0, 0, 'q[2]')", + "Rxy(90, 0, 'q[1]')", + "Rxy(90, 0, 'q[1]')", + "Measure q[2]", + "Measure q[0]", + "Measure q[0]", + "Measure q[1]", + "Measure q[0]", + ] + _check_bitstring_mapping(circuit, exported_schedule, bitstring_mapping) diff --git a/test/ir_equality_test_base.py b/tests/ir/ir_equality_test_base.py similarity index 100% rename from test/ir_equality_test_base.py rename to tests/ir/ir_equality_test_base.py diff --git a/tests/ir/semantics/test_bsr.py b/tests/ir/semantics/test_bsr.py new file mode 100644 index 00000000..1690f9dc --- /dev/null +++ b/tests/ir/semantics/test_bsr.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +from math import pi, tau + +import pytest + +from opensquirrel import ( + X90, + H, + I, + MinusX90, + Rn, + Rx, + Ry, + Rz, + TDagger, + X, +) +from opensquirrel.common import ATOL +from opensquirrel.ir import ( + Qubit, +) +from opensquirrel.ir.semantics import BlochSphereRotation + + +class TestBlochSphereRotation: + @pytest.fixture + def gate(self) -> BlochSphereRotation: + return BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi, phase=tau) + + @pytest.mark.parametrize( + "other_gate", + [ + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi, phase=tau), + BlochSphereRotation(qubit=42, axis=(1 + ATOL / 2, 0, 0), angle=pi, phase=tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi + ATOL / 2, phase=tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi, phase=tau + ATOL / 2), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi + tau, phase=tau), + ], + ids=["all_equal", "close_axis", "close_angle", "close_phase", "angle+tau"], + ) + def test_equality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation) -> None: + assert gate == other_gate + + @pytest.mark.parametrize( + "other_gate", + [ + BlochSphereRotation(qubit=43, axis=(1, 0, 0), angle=pi, phase=tau), + BlochSphereRotation(qubit=42, axis=(0, 1, 0), angle=pi, phase=tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=0, phase=tau), + BlochSphereRotation(qubit=42, axis=(1, 0, 0), angle=pi, phase=1), + "test", + ], + ids=["qubit", "axis", "angle", "phase", "type"], + ) + def test_inequality(self, gate: BlochSphereRotation, other_gate: BlochSphereRotation | str) -> None: + assert gate != other_gate + + def test_get_qubit_operands(self, gate: BlochSphereRotation) -> None: + assert gate.get_qubit_operands() == [Qubit(42)] + + def test_is_identity(self, gate: BlochSphereRotation) -> None: + assert I(42).is_identity() + assert not gate.is_identity() + + @pytest.mark.parametrize( + ("bsr", "default_gate"), + [ + (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=pi, phase=pi / 2), H(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi, phase=pi / 2), X(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi / 2, phase=pi / 4), X90(0)), + (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=-pi / 2, phase=-pi / 4), X90(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=-pi / 2, phase=-pi / 4), MinusX90(0)), + (BlochSphereRotation(qubit=0, axis=(-1, 0, 0), angle=pi / 2, phase=pi / 4), MinusX90(0)), + (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=-pi / 4, phase=-pi / 8), TDagger(0)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi / 4, phase=0), Rx(0, pi / 4)), + (BlochSphereRotation(qubit=0, axis=(0, 1, 0), angle=pi / 3, phase=0), Ry(0, pi / 3)), + (BlochSphereRotation(qubit=0, axis=(0, 0, 1), angle=3 * pi / 4, phase=0), Rz(0, 3 * pi / 4)), + (BlochSphereRotation(qubit=0, axis=(1, 0, 1), angle=pi, phase=0), Rn(0, 1, 0, 1, pi, 0)), + ], + ids=["H", "X", "X90-1", "X90-2", "mX90-1", "mX90-2", "Tdag", "Rx", "Ry", "Rz", "Rn"], + ) + def test_default_gate_matching(self, bsr: BlochSphereRotation, default_gate: BlochSphereRotation) -> None: + matched_bsr = BlochSphereRotation.try_match_replace_with_default(bsr) + assert matched_bsr == default_gate + assert matched_bsr.name == default_gate.name diff --git a/tests/ir/semantics/test_controlled_gate.py b/tests/ir/semantics/test_controlled_gate.py new file mode 100644 index 00000000..df0a25fd --- /dev/null +++ b/tests/ir/semantics/test_controlled_gate.py @@ -0,0 +1,11 @@ +from math import pi + +import pytest + +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate + + +class TestControlledGate: + def test_control_gate_same_control_and_target_qubit(self) -> None: + with pytest.raises(ValueError, match="control and target qubit cannot be the same"): + ControlledGate(0, BlochSphereRotation(0, [0, 0, 1], angle=pi, phase=pi / 2)) diff --git a/tests/ir/semantics/test_matrix_gate.py b/tests/ir/semantics/test_matrix_gate.py new file mode 100644 index 00000000..2333f822 --- /dev/null +++ b/tests/ir/semantics/test_matrix_gate.py @@ -0,0 +1,46 @@ +import numpy as np +import pytest + +from opensquirrel.ir import Qubit +from opensquirrel.ir.semantics import MatrixGate + + +class TestMatrixGate: + @pytest.fixture + def gate(self) -> MatrixGate: + cnot_matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + ] + return MatrixGate(cnot_matrix, operands=[42, 100]) + + def test_array_like(self) -> None: + gate = MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]) + assert ( + repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + ) + + def test_incorrect_array(self) -> None: + with pytest.raises(ValueError, match=r".* inhomogeneous shape after .*") as e_info: + MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0]], [0, 1]) + assert "setting an array element with a sequence." in str(e_info.value) + + def test_repr(self, gate: MatrixGate) -> None: + assert ( + repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " + "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" + ) + + def test_get_qubit_operands(self, gate: MatrixGate) -> None: + assert gate.get_qubit_operands() == [Qubit(42), Qubit(100)] + + def test_is_identity(self, gate: MatrixGate) -> None: + assert MatrixGate(np.eye(4, dtype=np.complex128), operands=[42, 100]).is_identity() + assert not gate.is_identity() + + def test_matrix_gate_same_control_and_target_qubit(self) -> None: + with pytest.raises(ValueError, match="operands cannot be the same"): + MatrixGate(np.eye(4, dtype=np.complex128), [0, 0]) diff --git a/tests/ir/test_expression.py b/tests/ir/test_expression.py new file mode 100644 index 00000000..e1603447 --- /dev/null +++ b/tests/ir/test_expression.py @@ -0,0 +1,175 @@ +from collections.abc import Sequence +from typing import Any, SupportsInt + +import numpy as np +import pytest +from numpy.typing import NDArray + +from opensquirrel.ir import Axis, AxisLike, Bit, Float, Int, Qubit +from opensquirrel.ir.expression import Expression + + +class TestFloat: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="value must be a float"): + Float("f") # type: ignore + + def test_init(self) -> None: + assert Float(1).value == 1.0 + + +class TestInt: + @pytest.mark.parametrize("value", ["f", None, {1}]) + def test_type_error(self, value: Any) -> None: + with pytest.raises(TypeError, match="value must be an int"): + Int(value) + + @pytest.mark.parametrize("value", [1, 1.0, 1.1, Int(1)]) + def test_init(self, value: SupportsInt) -> None: + assert Int(value).value == 1 + + +class TestBit: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="index must be a BitLike"): + Bit("f") # type: ignore + + def test_init(self) -> None: + assert str(Bit(1)) == "Bit[1]" + + +class TestQubit: + def test_type_error(self) -> None: + with pytest.raises(TypeError, match="index must be a QubitLike"): + Qubit("f") # type: ignore + + def test_init(self) -> None: + assert str(Qubit(1)) == "Qubit[1]" + + +class TestAxis: + @pytest.fixture + def axis(self) -> Axis: + return Axis(1, 0, 0) + + @pytest.mark.parametrize("expected_class", [Sequence, Expression]) + def test_inheritance(self, axis: Axis, expected_class: type[Any]) -> None: + assert isinstance(axis, expected_class) + + def test_axis_getter(self, axis: Axis) -> None: + np.testing.assert_array_equal(axis.value, [1, 0, 0]) + + @pytest.mark.parametrize( + ("new_axis", "expected_axis"), + [ + ([0, 0, 1], [0, 0, 1]), + ([0, 3, 4], [0, 3 / 5, 4 / 5]), + (Axis(0, 1, 0), [0, 1, 0]), + ], + ) + def test_axis_setter_no_error(self, axis: Axis, new_axis: AxisLike, expected_axis: list[float]) -> None: + axis.value = new_axis + np.testing.assert_array_equal(axis, expected_axis) + + @pytest.mark.parametrize( + ("erroneous_axis", "expected_error", "expected_error_message"), + [ + (Qubit(1), TypeError, "axis requires an ArrayLike"), + ([0, [3], [2]], TypeError, "axis requires an ArrayLike"), + (0, ValueError, "axis requires an ArrayLike of length 3, but received an ArrayLike of length 1"), + ( + [1, 2, 3, 4], + ValueError, + "axis requires an ArrayLike of length 3, but received an ArrayLike of length 4", + ), + ([0, 0, 0], ValueError, "axis requires at least one element to be non-zero"), + ], + ) + def test_axis_setter_with_error( + self, + axis: Axis, + erroneous_axis: Any, + expected_error: type[Exception], + expected_error_message: str, + ) -> None: + with pytest.raises(expected_error, match=expected_error_message): + axis.value = erroneous_axis + + def test_get_item(self, axis: Axis) -> None: + assert axis[0] == 1 + assert axis[1] == 0 + assert axis[2] == 0 + + def test_len(self, axis: Axis) -> None: + assert len(axis) == 3 + + def test_repr(self, axis: Axis) -> None: + assert repr(axis) == "Axis[1. 0. 0.]" + + def test_array(self, axis: Axis) -> None: + np.testing.assert_array_equal(axis, [1, 0, 0]) + + @pytest.mark.parametrize("other", [Axis(1, 0, 0), Axis([1, 0, 0]), Axis([[1], [0], [0]])]) + def test_eq_true(self, axis: Axis, other: Any) -> None: + assert axis == other + + @pytest.mark.parametrize("other", ["test", Axis(0, 1, 0)]) + def test_eq_false(self, axis: Axis, other: Any) -> None: + assert axis != other + + @pytest.mark.parametrize( + ("axis", "expected"), + [ + ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), + ([0, 0, 0], ValueError), + ([1, 2], ValueError), + ([1, 2, 3, 4], ValueError), + ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), + (["a", "b", "c"], TypeError), + ], + ) + def test_constructor(self, axis: AxisLike, expected: Any) -> None: + if isinstance(expected, type) and issubclass(expected, Exception): + with pytest.raises(expected): + Axis(axis) + else: + assert isinstance(expected, np.ndarray) + obj = Axis(axis) + np.testing.assert_array_equal(obj.value, expected) + + @pytest.mark.parametrize( + ("axis", "expected"), + [ + ([1, 0, 0], np.array([1, 0, 0], dtype=np.float64)), + ([0, 0, 0], ValueError), + ([1, 2], ValueError), + ([1, 2, 3, 4], ValueError), + ([0, 1, 0], np.array([0, 1, 0], dtype=np.float64)), + (["a", "b", "c"], TypeError), + ], + ) + def test_parse(self, axis: AxisLike, expected: Any) -> None: + if isinstance(expected, type) and issubclass(expected, Exception): + with pytest.raises(expected): + Axis.parse(axis) + else: + assert isinstance(expected, np.ndarray) + obj = Axis.parse(axis) + np.testing.assert_array_equal(obj, expected) + + @pytest.mark.parametrize( + ("axis", "expected"), + [ + (np.array([1, 0, 0], dtype=np.float64), np.array([1, 0, 0], dtype=np.float64)), + (np.array([0, 1, 0], dtype=np.float64), np.array([0, 1, 0], dtype=np.float64)), + (np.array([0, 0, 1], dtype=np.float64), np.array([0, 0, 1], dtype=np.float64)), + ( + np.array([1, 1, 1], dtype=np.float64), + np.array([1 / np.sqrt(3), 1 / np.sqrt(3), 1 / np.sqrt(3)], dtype=np.float64), + ), + ], + ) + def test_normalize(self, axis: AxisLike, expected: NDArray[np.float64]) -> None: + obj = Axis.normalize(np.array(axis, dtype=np.float64)) + assert isinstance(expected, np.ndarray) + np.testing.assert_array_almost_equal(obj, expected) diff --git a/tests/ir/test_ir.py b/tests/ir/test_ir.py new file mode 100644 index 00000000..89d7c6d1 --- /dev/null +++ b/tests/ir/test_ir.py @@ -0,0 +1,96 @@ +from math import pi + +import numpy as np + +from opensquirrel.ir import ( + Bit, + Qubit, +) +from opensquirrel.ir.semantics import ( + BlochSphereRotation, + ControlledGate, + MatrixGate, +) + + +class TestIR: + def test_cnot_equality(self) -> None: + matrix = np.array( + [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + ], + ) + cnot_matrix_gate = MatrixGate(matrix, operands=[4, 100]) + + cnot_controlled_gate = ControlledGate( + 4, + BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=pi, phase=pi / 2), + ) + + assert cnot_controlled_gate == cnot_matrix_gate + + def test_different_qubits_gate(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1], + ] + large_identity_matrix_gate = MatrixGate(matrix, operands=[0, 2]) + small_identity_control_gate = ControlledGate(4, BlochSphereRotation(qubit=2, axis=(1, 0, 0), angle=0, phase=0)) + + assert large_identity_matrix_gate == small_identity_control_gate + + def test_inverse_gate(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 0, 0, 1], + [0, 0, 1, 0], + [0, 1, 0, 0], + ] + inverted_matrix_gate = MatrixGate(matrix, operands=[0, 1]) + + inverted_cnot_gate = ControlledGate( + 1, + BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi, phase=pi / 2), + ) + + assert inverted_matrix_gate == inverted_cnot_gate + + def test_global_phase(self) -> None: + matrix = [ + [1j, 0, 0, 0], + [0, 0, 0, 1j], + [0, 0, 1j, 0], + [0, 1j, 0, 0], + ] + inverted_matrix_with_phase = MatrixGate(matrix, operands=[0, 1]) + + inverted_cnot_gate = ControlledGate( + 1, + BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi, phase=pi / 2), + ) + + assert inverted_matrix_with_phase == inverted_cnot_gate + + def test_cnot_inequality(self) -> None: + matrix = [ + [1, 0, 0, 0], + [0, 0, 1, 0], + [0, 1, 0, 0], + [0, 0, 0, 1], + ] + swap_matrix_gate = MatrixGate(matrix, operands=[4, 100]) + + cnot_controlled_gate = ControlledGate( + 4, + BlochSphereRotation(qubit=100, axis=(1, 0, 0), angle=pi, phase=pi / 2), + ) + + assert cnot_controlled_gate != swap_matrix_gate + + def test_hash_difference_bit_qubit(self) -> None: + assert hash(Qubit(1)) != hash(Bit(1)) diff --git a/tests/ir/test_non_unitary.py b/tests/ir/test_non_unitary.py new file mode 100644 index 00000000..7bdd1ddd --- /dev/null +++ b/tests/ir/test_non_unitary.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import pytest + +from opensquirrel.ir import Bit, Measure, Qubit + + +class TestMeasure: + @pytest.fixture + def measure(self) -> Measure: + return Measure(42, 42, axis=(0, 0, 1)) + + def test_repr(self, measure: Measure) -> None: + expected_repr = "Measure(qubit=Qubit[42], bit=Bit[42], axis=Axis[0. 0. 1.])" + assert repr(measure) == expected_repr + + def test_equality(self, measure: Measure) -> None: + measure_eq = Measure(42, 42, axis=(0, 0, 1)) + assert measure == measure_eq + + @pytest.mark.parametrize( + "other_measure", + [Measure(43, 43, axis=(0, 0, 1)), Measure(42, 42, axis=(1, 0, 0)), "test"], + ids=["qubit", "axis", "type"], + ) + def test_inequality(self, measure: Measure, other_measure: Measure | str) -> None: + assert measure != other_measure + + def test_get_bit_operands(self, measure: Measure) -> None: + assert measure.get_bit_operands() == [Bit(42)] + + def test_get_qubit_operands(self, measure: Measure) -> None: + assert measure.get_qubit_operands() == [Qubit(42)] diff --git a/test/parser/libqasm/test_libqasm.py b/tests/parser/libqasm/test_libqasm.py similarity index 78% rename from test/parser/libqasm/test_libqasm.py rename to tests/parser/libqasm/test_libqasm.py index 7870dfb8..cd9ba31e 100644 --- a/test/parser/libqasm/test_libqasm.py +++ b/tests/parser/libqasm/test_libqasm.py @@ -1,14 +1,15 @@ -import math +from math import pi import pytest -from opensquirrel import CNOT, CR, CRk, H, I, Ry, X -from opensquirrel.ir import ControlledGate, Gate, Rn -from opensquirrel.parser.libqasm.parser import Parser +from opensquirrel import CNOT, CR, CRk, H, I, Rn, Ry, X +from opensquirrel.ir import Gate +from opensquirrel.ir.semantics import ControlledGate +from opensquirrel.reader import LibQasmParser def test_simple() -> None: - circuit = Parser().circuit_from_string( + circuit = LibQasmParser().circuit_from_string( """ version 3.0 @@ -29,7 +30,7 @@ def test_simple() -> None: def test_sgmq() -> None: - circuit = Parser().circuit_from_string( + circuit = LibQasmParser().circuit_from_string( """ version 3.0 @@ -61,7 +62,7 @@ def test_error() -> None: IOError, match=r"Error at :1:30..31: failed to resolve variable 'q'", ): - Parser().circuit_from_string("version 3.0; qubit[20] qu; H q[5]") + LibQasmParser().circuit_from_string("version 3.0; qubit[20] qu; H q[5]") @pytest.mark.parametrize( @@ -107,7 +108,7 @@ def test_error() -> None: ], ) def test_simplest(circuit_string: str, expected_output: str) -> None: - circuit = Parser().circuit_from_string(circuit_string) + circuit = LibQasmParser().circuit_from_string(circuit_string) assert str(circuit) == expected_output @@ -116,7 +117,7 @@ def test_simplest(circuit_string: str, expected_output: str) -> None: [ ( "version 3.0; qubit q; inv.X q", - [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * -1, phi=math.pi / 2 * -1)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=pi * -1, phi=pi / 2 * -1)], ), ( "version 3.0; qubit q; inv.inv.X q", @@ -124,17 +125,17 @@ def test_simplest(circuit_string: str, expected_output: str) -> None: ), ( "version 3.0; qubit q; pow(2).Rx(pi) q", - [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * 2, phi=0)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=pi * 2, phi=0)], ), ( "version 3.0; qubit q; pow(2).inv.X q", - [Rn(qubit=0, nx=1, ny=0, nz=0, theta=math.pi * -2, phi=math.pi / 2 * -2)], + [Rn(qubit=0, nx=1, ny=0, nz=0, theta=pi * -2, phi=pi / 2 * -2)], ), ( "version 3.0; qubit[2] q; ctrl.pow(2).inv.X q[0], q[1]", [ ControlledGate( - control_qubit=0, target_gate=Rn(qubit=1, nx=1, ny=0, nz=0, theta=math.pi * -2, phi=math.pi / 2 * -2) + control_qubit=0, target_gate=Rn(qubit=1, nx=1, ny=0, nz=0, theta=pi * -2, phi=pi / 2 * -2) ) ], ), @@ -142,5 +143,5 @@ def test_simplest(circuit_string: str, expected_output: str) -> None: ids=["inv_X", "inv_inv_X", "pow_2_Rx", "pow_2_inv_X", "ctrl_pow_2_inv_X"], ) def test_gate_modifiers(circuit_string: str, expected_result: list[Gate]) -> None: - circuit = Parser().circuit_from_string(circuit_string) + circuit = LibQasmParser().circuit_from_string(circuit_string) assert circuit.ir.statements == expected_result diff --git a/test/decomposer/test_aba_decomposer.py b/tests/passes/decomposer/test_aba_decomposer.py similarity index 88% rename from test/decomposer/test_aba_decomposer.py rename to tests/passes/decomposer/test_aba_decomposer.py index c40c3249..6f3243df 100644 --- a/test/decomposer/test_aba_decomposer.py +++ b/tests/passes/decomposer/test_aba_decomposer.py @@ -4,9 +4,9 @@ import numpy as np import pytest -from opensquirrel.ir import BlochSphereRotation -from opensquirrel.passes.decomposer import Decomposer, aba_decomposer as aba -from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +from opensquirrel.ir.semantics import BlochSphereRotation +from opensquirrel.passes.decomposer import aba_decomposer as aba +from opensquirrel.passes.decomposer.general_decomposer import Decomposer, check_gate_replacement ABA_DECOMPOSER_LIST = [ aba.XYXDecomposer, diff --git a/test/decomposer/test_cnot2cz_decomposer.py b/tests/passes/decomposer/test_cnot2cz_decomposer.py similarity index 77% rename from test/decomposer/test_cnot2cz_decomposer.py rename to tests/passes/decomposer/test_cnot2cz_decomposer.py index 0207df0b..7f92a382 100644 --- a/test/decomposer/test_cnot2cz_decomposer.py +++ b/tests/passes/decomposer/test_cnot2cz_decomposer.py @@ -1,16 +1,20 @@ from __future__ import annotations import math +from typing import TYPE_CHECKING import pytest -from opensquirrel.ir import CNOT, CR, CZ, SWAP, ControlledGate, CRk, Gate, H, Ry, X +from opensquirrel import CNOT, CR, CZ, SWAP, CRk, H, Ry from opensquirrel.passes.decomposer import CNOT2CZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> CNOT2CZDecomposer: + +@pytest.fixture +def decomposer() -> CNOT2CZDecomposer: return CNOT2CZDecomposer() @@ -42,13 +46,6 @@ def test_ignores_2q_gates(decomposer: CNOT2CZDecomposer, gate: Gate, expected_re assert decomposer.decompose(gate) == expected_result -def test_ignores_double_controlled(decomposer: CNOT2CZDecomposer) -> None: - gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) - decomposed_gate = decomposer.decompose(gate) - check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [gate] - - @pytest.mark.parametrize( ("gate", "expected_result"), [ diff --git a/test/decomposer/test_cnot_decomposer.py b/tests/passes/decomposer/test_cnot_decomposer.py similarity index 65% rename from test/decomposer/test_cnot_decomposer.py rename to tests/passes/decomposer/test_cnot_decomposer.py index 3fec41c1..709723ec 100644 --- a/test/decomposer/test_cnot_decomposer.py +++ b/tests/passes/decomposer/test_cnot_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi, sqrt +from typing import TYPE_CHECKING import pytest -from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz, X -from opensquirrel.ir import ControlledGate, Gate +from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz from opensquirrel.passes.decomposer import CNOTDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate + from opensquirrel.ir.semantics import ControlledGate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> CNOTDecomposer: + +@pytest.fixture +def decomposer() -> CNOTDecomposer: return CNOTDecomposer() @@ -21,13 +25,6 @@ def test_ignores_1q_gates(decomposer: CNOTDecomposer, gate: Gate, expected_resul assert decomposer.decompose(gate) == expected_result -def test_ignores_double_controlled(decomposer: CNOTDecomposer) -> None: - gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) - decomposed_gate = decomposer.decompose(gate) - check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [gate] - - def test_preserves_CNOT(decomposer: CNOTDecomposer) -> None: # noqa: N802 gate = CNOT(0, 1) decomposed_gate = decomposer.decompose(gate) @@ -39,15 +36,15 @@ def test_CZ(decomposer: CNOTDecomposer) -> None: # noqa: N802 gate = CZ(0, 1) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(1, math.pi), Ry(1, math.pi / 2), CNOT(0, 1), Ry(1, -math.pi / 2), Rz(1, math.pi)] + assert decomposed_gate == [Rz(1, pi), Ry(1, pi / 2), CNOT(0, 1), Ry(1, -pi / 2), Rz(1, pi)] @pytest.mark.parametrize( "controlled_gate", [ - CR(0, 1, math.pi / 2), - CR(0, 1, math.pi / 4), - CR(0, 1, 1 / math.sqrt(2)), + CR(0, 1, pi / 2), + CR(0, 1, pi / 4), + CR(0, 1, 1 / sqrt(2)), CRk(0, 1, 1), CRk(0, 1, 2), CRk(0, 1, 16), diff --git a/test/decomposer/test_cz_decomposer.py b/tests/passes/decomposer/test_cz_decomposer.py similarity index 75% rename from test/decomposer/test_cz_decomposer.py rename to tests/passes/decomposer/test_cz_decomposer.py index 20dd11c4..daa64a7e 100644 --- a/test/decomposer/test_cz_decomposer.py +++ b/tests/passes/decomposer/test_cz_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations import math +from typing import TYPE_CHECKING import pytest -from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz, X -from opensquirrel.ir import ControlledGate, Gate +from opensquirrel import CNOT, CR, CZ, CRk, H, Ry, Rz from opensquirrel.passes.decomposer import CZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate + from opensquirrel.ir.semantics import ControlledGate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> CZDecomposer: + +@pytest.fixture +def decomposer() -> CZDecomposer: return CZDecomposer() @@ -21,13 +25,6 @@ def test_ignores_1q_gates(decomposer: CZDecomposer, gate: Gate, expected_result: assert decomposer.decompose(gate) == expected_result -def test_ignores_double_controlled(decomposer: CZDecomposer) -> None: - gate = ControlledGate(control_qubit=5, target_gate=ControlledGate(control_qubit=2, target_gate=X(0))) - decomposed_gate = decomposer.decompose(gate) - check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [gate] - - def test_preserves_CZ(decomposer: CZDecomposer) -> None: # noqa: N802 gate = CZ(0, 1) decomposed_gate = decomposer.decompose(gate) diff --git a/test/decomposer/test_mckay_decomposer.py b/tests/passes/decomposer/test_mckay_decomposer.py similarity index 62% rename from test/decomposer/test_mckay_decomposer.py rename to tests/passes/decomposer/test_mckay_decomposer.py index db8c6d54..568450e1 100644 --- a/test/decomposer/test_mckay_decomposer.py +++ b/tests/passes/decomposer/test_mckay_decomposer.py @@ -1,18 +1,22 @@ from __future__ import annotations -import math +from math import pi, sqrt +from typing import TYPE_CHECKING import numpy as np import pytest from opensquirrel import CNOT, CR, X90, Y90, H, I, MinusX90, MinusY90, Rz, S, SDagger, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import McKayDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> McKayDecomposer: + +@pytest.fixture +def decomposer() -> McKayDecomposer: return McKayDecomposer() @@ -44,28 +48,28 @@ def test_y(decomposer: McKayDecomposer) -> None: gate = Y(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, math.pi), X90(0), X90(0)] + assert decomposed_gate == [Rz(0, pi), X90(0), X90(0)] def test_z(decomposer: McKayDecomposer) -> None: gate = Z(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, math.pi)] + assert decomposed_gate == [Rz(0, pi)] def test_rz(decomposer: McKayDecomposer) -> None: - gate = Rz(0, math.pi / 2) + gate = Rz(0, pi / 2) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, math.pi / 2)] + assert decomposed_gate == [Rz(0, pi / 2)] def test_hadamard(decomposer: McKayDecomposer) -> None: gate = H(0) decomposed_gate = decomposer.decompose(gate) check_gate_replacement(gate, decomposed_gate) - assert decomposed_gate == [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)] + assert decomposed_gate == [Rz(0, pi / 2), X90(0), Rz(0, pi / 2)] def test_all_octants_of_bloch_sphere_rotation(decomposer: McKayDecomposer) -> None: @@ -89,59 +93,55 @@ def test_all_octants_of_bloch_sphere_rotation(decomposer: McKayDecomposer) -> No [ (I(0), [I(0)]), (X(0), [X90(0), X90(0)]), - (Y(0), [Rz(0, math.pi), X90(0), X90(0)]), - (Z(0), [Rz(0, math.pi)]), + (Y(0), [Rz(0, pi), X90(0), X90(0)]), + (Z(0), [Rz(0, pi)]), ( - BlochSphereRotation( - qubit=0, axis=[1 / math.sqrt(3), 1 / math.sqrt(3), 1 / math.sqrt(3)], angle=2 * math.pi / 3, phase=0 - ), - [X90(0), Rz(0, math.pi / 2)], + BlochSphereRotation(qubit=0, axis=[1 / sqrt(3), 1 / sqrt(3), 1 / sqrt(3)], angle=2 * pi / 3, phase=0), + [X90(0), Rz(0, pi / 2)], ), ( - BlochSphereRotation(qubit=0, axis=[1, 1, 1], angle=-2 * math.pi / 3, phase=0), - [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)], + BlochSphereRotation(qubit=0, axis=[1, 1, 1], angle=-2 * pi / 3, phase=0), + [X90(0), Rz(0, pi / 2), X90(0), Rz(0, pi / 2)], ), ( - BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=2 * math.pi / 3, phase=0), - [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi)], + BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=2 * pi / 3, phase=0), + [Rz(0, -pi / 2), X90(0), Rz(0, pi)], ), ( - BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=-2 * math.pi / 3, phase=0), - [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)], + BlochSphereRotation(qubit=0, axis=[-1, 1, 1], angle=-2 * pi / 3, phase=0), + [Rz(0, -pi / 2), X90(0), Rz(0, pi / 2), X90(0), Rz(0, pi)], ), - (BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=2 * math.pi / 3, phase=0), [Rz(0, math.pi / 2), X90(0)]), + (BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=2 * pi / 3, phase=0), [Rz(0, pi / 2), X90(0)]), ( - BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=-2 * math.pi / 3, phase=0), - [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0)], + BlochSphereRotation(qubit=0, axis=[1, -1, 1], angle=-2 * pi / 3, phase=0), + [Rz(0, pi / 2), X90(0), Rz(0, pi / 2), X90(0)], ), - (BlochSphereRotation(qubit=0, axis=[1, 1, -1], angle=2 * math.pi / 3, phase=0), [Rz(0, -math.pi / 2), X90(0)]), + (BlochSphereRotation(qubit=0, axis=[1, 1, -1], angle=2 * pi / 3, phase=0), [Rz(0, -pi / 2), X90(0)]), ( - BlochSphereRotation( - qubit=0, axis=[1 / math.sqrt(3), 1 / math.sqrt(3), -1 / math.sqrt(3)], angle=-2 * math.pi / 3, phase=0 - ), - [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)], + BlochSphereRotation(qubit=0, axis=[1 / sqrt(3), 1 / sqrt(3), -1 / sqrt(3)], angle=-2 * pi / 3, phase=0), + [Rz(0, pi / 2), X90(0), Rz(0, pi / 2), X90(0), Rz(0, pi)], ), (X90(0), [X90(0)]), - (MinusX90(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), - (Y90(0), [Rz(0, -math.pi / 2), X90(0), Rz(0, math.pi / 2)]), - (MinusY90(0), [X90(0), Rz(0, math.pi / 2), X90(0), Rz(0, math.pi)]), - (S(0), [Rz(0, math.pi / 2)]), - (SDagger(0), [Rz(0, -math.pi / 2)]), - (H(0), [Rz(0, math.pi / 2), X90(0), Rz(0, math.pi / 2)]), + (MinusX90(0), [Rz(0, pi / 2), X90(0), Rz(0, pi / 2), X90(0), Rz(0, pi / 2)]), + (Y90(0), [Rz(0, -pi / 2), X90(0), Rz(0, pi / 2)]), + (MinusY90(0), [X90(0), Rz(0, pi / 2), X90(0), Rz(0, pi)]), + (S(0), [Rz(0, pi / 2)]), + (SDagger(0), [Rz(0, -pi / 2)]), + (H(0), [Rz(0, pi / 2), X90(0), Rz(0, pi / 2)]), ( - BlochSphereRotation(qubit=0, axis=[1, 1, 0], angle=math.pi, phase=math.pi / 2), - [Rz(0, -3 * math.pi / 4), X90(0), X90(0), Rz(0, -math.pi / 4)], + BlochSphereRotation(qubit=0, axis=[1, 1, 0], angle=pi, phase=pi / 2), + [Rz(0, -3 * pi / 4), X90(0), X90(0), Rz(0, -pi / 4)], ), - (BlochSphereRotation(qubit=0, axis=[0, 1, 1], angle=math.pi, phase=math.pi / 2), [X90(0), Rz(0, math.pi)]), + (BlochSphereRotation(qubit=0, axis=[0, 1, 1], angle=pi, phase=pi / 2), [X90(0), Rz(0, pi)]), ( - BlochSphereRotation(qubit=0, axis=[-1, 1, 0], angle=math.pi, phase=math.pi / 2), - [Rz(0, 3 * math.pi / 4), X90(0), X90(0), Rz(0, math.pi / 4)], + BlochSphereRotation(qubit=0, axis=[-1, 1, 0], angle=pi, phase=pi / 2), + [Rz(0, 3 * pi / 4), X90(0), X90(0), Rz(0, pi / 4)], ), ( - BlochSphereRotation(qubit=0, axis=[1, 0, -1], angle=math.pi, phase=math.pi / 2), - [Rz(0, -math.pi / 2), X90(0), Rz(0, -math.pi / 2)], + BlochSphereRotation(qubit=0, axis=[1, 0, -1], angle=pi, phase=pi / 2), + [Rz(0, -pi / 2), X90(0), Rz(0, -pi / 2)], ), - (BlochSphereRotation(qubit=0, axis=[0, -1, 1], angle=math.pi, phase=math.pi / 2), [Rz(0, math.pi), X90(0)]), + (BlochSphereRotation(qubit=0, axis=[0, -1, 1], angle=pi, phase=pi / 2), [Rz(0, pi), X90(0)]), ], ids=[ "I", diff --git a/test/decomposer/test_swap2cnot_decomposer.py b/tests/passes/decomposer/test_swap2cnot_decomposer.py similarity index 89% rename from test/decomposer/test_swap2cnot_decomposer.py rename to tests/passes/decomposer/test_swap2cnot_decomposer.py index ae7332be..6286f039 100644 --- a/test/decomposer/test_swap2cnot_decomposer.py +++ b/tests/passes/decomposer/test_swap2cnot_decomposer.py @@ -1,11 +1,11 @@ from __future__ import annotations -import math +from math import pi from typing import TYPE_CHECKING import pytest -from opensquirrel.ir import CNOT, CR, CZ, SWAP, CRk, H, Ry +from opensquirrel import CNOT, CR, CZ, SWAP, CRk, H, Ry from opensquirrel.passes.decomposer import SWAP2CNOTDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -13,8 +13,8 @@ from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> SWAP2CNOTDecomposer: +@pytest.fixture +def decomposer() -> SWAP2CNOTDecomposer: return SWAP2CNOTDecomposer() @@ -35,7 +35,7 @@ def test_ignores_1q_gates(decomposer: SWAP2CNOTDecomposer, gate: Gate, expected_ ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(0, 1, math.pi), [CR(0, 1, math.pi)]), + (CR(0, 1, pi), [CR(0, 1, pi)]), (CRk(0, 1, 2), [CRk(0, 1, 2)]), (CZ(0, 1), [CZ(0, 1)]), ], diff --git a/test/decomposer/test_swap2cz_decomposer.py b/tests/passes/decomposer/test_swap2cz_decomposer.py similarity index 74% rename from test/decomposer/test_swap2cz_decomposer.py rename to tests/passes/decomposer/test_swap2cz_decomposer.py index 0a400975..bd1fad9a 100644 --- a/test/decomposer/test_swap2cz_decomposer.py +++ b/tests/passes/decomposer/test_swap2cz_decomposer.py @@ -1,11 +1,11 @@ from __future__ import annotations -import math +from math import pi from typing import TYPE_CHECKING import pytest -from opensquirrel.ir import CNOT, CR, CZ, SWAP, CRk, H, Ry +from opensquirrel import CNOT, CR, CZ, SWAP, CRk, H, Ry from opensquirrel.passes.decomposer import SWAP2CZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement @@ -13,8 +13,8 @@ from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> SWAP2CZDecomposer: +@pytest.fixture +def decomposer() -> SWAP2CZDecomposer: return SWAP2CZDecomposer() @@ -35,7 +35,7 @@ def test_ignores_1q_gates(decomposer: SWAP2CZDecomposer, gate: Gate, expected_re ("gate", "expected_result"), [ (CNOT(0, 1), [CNOT(0, 1)]), - (CR(0, 1, math.pi), [CR(0, 1, math.pi)]), + (CR(0, 1, pi), [CR(0, 1, pi)]), (CRk(0, 1, 2), [CRk(0, 1, 2)]), (CZ(0, 1), [CZ(0, 1)]), ], @@ -52,29 +52,29 @@ def test_ignores_2q_gates(decomposer: SWAP2CZDecomposer, gate: Gate, expected_re ( SWAP(0, 1), [ - Ry(1, -math.pi / 2), + Ry(1, -pi / 2), CZ(0, 1), - Ry(1, math.pi / 2), - Ry(0, -math.pi / 2), + Ry(1, pi / 2), + Ry(0, -pi / 2), CZ(1, 0), - Ry(0, math.pi / 2), - Ry(1, -math.pi / 2), + Ry(0, pi / 2), + Ry(1, -pi / 2), CZ(0, 1), - Ry(1, math.pi / 2), + Ry(1, pi / 2), ], ), ( SWAP(1, 0), [ - Ry(0, -math.pi / 2), + Ry(0, -pi / 2), CZ(1, 0), - Ry(0, math.pi / 2), - Ry(1, -math.pi / 2), + Ry(0, pi / 2), + Ry(1, -pi / 2), CZ(0, 1), - Ry(1, math.pi / 2), - Ry(0, -math.pi / 2), + Ry(1, pi / 2), + Ry(0, -pi / 2), CZ(1, 0), - Ry(0, math.pi / 2), + Ry(0, pi / 2), ], ), ], diff --git a/test/decomposer/test_xyx_decomposer.py b/tests/passes/decomposer/test_xyx_decomposer.py similarity index 88% rename from test/decomposer/test_xyx_decomposer.py rename to tests/passes/decomposer/test_xyx_decomposer.py index 300954b5..f7f74220 100644 --- a/test/decomposer/test_xyx_decomposer.py +++ b/tests/passes/decomposer/test_xyx_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations import math +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Ry, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import XYXDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> XYXDecomposer: + +@pytest.fixture +def decomposer() -> XYXDecomposer: return XYXDecomposer() diff --git a/test/decomposer/test_xzx_decomposer.py b/tests/passes/decomposer/test_xzx_decomposer.py similarity index 78% rename from test/decomposer/test_xzx_decomposer.py rename to tests/passes/decomposer/test_xzx_decomposer.py index cb480f4d..64cf886c 100644 --- a/test/decomposer/test_xzx_decomposer.py +++ b/tests/passes/decomposer/test_xzx_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Rz, S, X, Z -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import XZXDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> XZXDecomposer: + +@pytest.fixture +def decomposer() -> XZXDecomposer: return XZXDecomposer() @@ -26,12 +30,12 @@ def test_identity(decomposer: XZXDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (S(0), [Rz(0, math.pi / 2)]), - (Z(0), [Rz(0, math.pi)]), + (S(0), [Rz(0, pi / 2)]), + (Z(0), [Rz(0, pi)]), (Rz(0, 0.9), [Rz(0, 0.9)]), - (X(0), [Rx(0, math.pi)]), + (X(0), [Rx(0, pi)]), (Rx(0, 0.123), [Rx(0, 0.123)]), - (H(0), [Rx(0, math.pi / 2), Rz(0, math.pi / 2), Rx(0, math.pi / 2)]), + (H(0), [Rx(0, pi / 2), Rz(0, pi / 2), Rx(0, pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), [Rx(0, 0.43035280630630446), Rz(0, -1.030183660156084), Rx(0, -0.7456524007888308)], diff --git a/test/decomposer/test_yxy_decomposer.py b/tests/passes/decomposer/test_yxy_decomposer.py similarity index 77% rename from test/decomposer/test_yxy_decomposer.py rename to tests/passes/decomposer/test_yxy_decomposer.py index 5c32ca68..50c55913 100644 --- a/test/decomposer/test_yxy_decomposer.py +++ b/tests/passes/decomposer/test_yxy_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Ry, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import YXYDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> YXYDecomposer: + +@pytest.fixture +def decomposer() -> YXYDecomposer: return YXYDecomposer() @@ -26,12 +30,12 @@ def test_identity(decomposer: YXYDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (S(0), [Ry(0, math.pi / 2), Rx(0, math.pi / 2), Ry(0, -math.pi / 2)]), - (Y(0), [Ry(0, math.pi)]), + (S(0), [Ry(0, pi / 2), Rx(0, pi / 2), Ry(0, -pi / 2)]), + (Y(0), [Ry(0, pi)]), (Ry(0, 0.9), [Ry(0, 0.9)]), - (X(0), [Rx(0, math.pi)]), + (X(0), [Rx(0, pi)]), (Rx(0, 0.123), [Rx(0, 0.123)]), - (H(0), [Ry(0, math.pi / 4), Rx(0, math.pi), Ry(0, -math.pi / 4)]), + (H(0), [Ry(0, pi / 4), Rx(0, pi), Ry(0, -pi / 4)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), [Ry(0, 0.9412144817800217), Rx(0, -0.893533136099803), Ry(0, -1.5568770630164868)], diff --git a/test/decomposer/test_yzy_decomposer.py b/tests/passes/decomposer/test_yzy_decomposer.py similarity index 73% rename from test/decomposer/test_yzy_decomposer.py rename to tests/passes/decomposer/test_yzy_decomposer.py index 7ab2628c..1292341c 100644 --- a/test/decomposer/test_yzy_decomposer.py +++ b/tests/passes/decomposer/test_yzy_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, S, X, Y -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import YZYDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> YZYDecomposer: + +@pytest.fixture +def decomposer() -> YZYDecomposer: return YZYDecomposer() @@ -26,12 +30,12 @@ def test_identity(decomposer: YZYDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (S(0), [Rz(0, math.pi / 2)]), - (Y(0), [Ry(0, math.pi)]), + (S(0), [Rz(0, pi / 2)]), + (Y(0), [Ry(0, pi)]), (Ry(0, 0.9), [Ry(0, 0.9)]), - (X(0), [Ry(0, -math.pi / 2), Rz(0, math.pi), Ry(0, math.pi / 2)]), - (Rx(0, 0.123), [Ry(0, -math.pi / 2), Rz(0, 0.12300000000000022), Ry(0, math.pi / 2)]), - (H(0), [Ry(0, -math.pi / 4), Rz(0, math.pi), Ry(0, math.pi / 4)]), + (X(0), [Ry(0, -pi / 2), Rz(0, pi), Ry(0, pi / 2)]), + (Rx(0, 0.123), [Ry(0, -pi / 2), Rz(0, 0.12300000000000022), Ry(0, pi / 2)]), + (H(0), [Ry(0, -pi / 4), Rz(0, pi), Ry(0, pi / 4)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), [Ry(0, -0.6295818450148737), Rz(0, -0.893533136099803), Ry(0, 0.013919263778408464)], diff --git a/test/decomposer/test_zxz_decomposer.py b/tests/passes/decomposer/test_zxz_decomposer.py similarity index 71% rename from test/decomposer/test_zxz_decomposer.py rename to tests/passes/decomposer/test_zxz_decomposer.py index a2086c7c..a123b19f 100644 --- a/test/decomposer/test_zxz_decomposer.py +++ b/tests/passes/decomposer/test_zxz_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import ZXZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> ZXZDecomposer: + +@pytest.fixture +def decomposer() -> ZXZDecomposer: return ZXZDecomposer() @@ -26,13 +30,13 @@ def test_identity(decomposer: ZXZDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (X(0), [Rx(0, math.pi)]), + (X(0), [Rx(0, pi)]), (Rx(0, 0.9), [Rx(0, 0.9)]), - (Y(0), [Rz(0, -math.pi / 2), Rx(0, math.pi), Rz(0, math.pi / 2)]), - (Ry(0, 0.9), [Rz(0, -math.pi / 2), Rx(0, 0.9000000000000004), Rz(0, math.pi / 2)]), - (Z(0), [Rz(0, math.pi)]), + (Y(0), [Rz(0, -pi / 2), Rx(0, pi), Rz(0, pi / 2)]), + (Ry(0, 0.9), [Rz(0, -pi / 2), Rx(0, 0.9000000000000004), Rz(0, pi / 2)]), + (Z(0), [Rz(0, pi)]), (Rz(0, 0.123), [Rz(0, 0.123)]), - (H(0), [Rz(0, math.pi / 2), Rx(0, math.pi / 2), Rz(0, math.pi / 2)]), + (H(0), [Rz(0, pi / 2), Rx(0, pi / 2), Rz(0, pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), [Rz(0, -1.5521517485841891), Rx(0, -0.6209410696845807), Rz(0, 0.662145687003993)], @@ -49,9 +53,9 @@ def test_zxz_decomposer(decomposer: ZXZDecomposer, gate: Gate, expected_result: @pytest.mark.parametrize( "gate", [ - Ry(0, -math.pi / 2), - BlochSphereRotation(0, axis=[0.0, 1.0, 0.0], angle=-math.pi / 2, phase=0.0), - BlochSphereRotation(0, axis=[0.0, -1.0, 0.0], angle=math.pi / 2, phase=0.0), + Ry(0, -pi / 2), + BlochSphereRotation(0, axis=[0.0, 1.0, 0.0], angle=-pi / 2, phase=0.0), + BlochSphereRotation(0, axis=[0.0, -1.0, 0.0], angle=pi / 2, phase=0.0), ], ids=["Ry(-pi/2)", "BSR_1 of Ry(-pi/2)", "BSR_2 of Ry(-pi/2)"], ) diff --git a/test/decomposer/test_zyz_decomposer.py b/tests/passes/decomposer/test_zyz_decomposer.py similarity index 75% rename from test/decomposer/test_zyz_decomposer.py rename to tests/passes/decomposer/test_zyz_decomposer.py index af773b12..762801fa 100644 --- a/test/decomposer/test_zyz_decomposer.py +++ b/tests/passes/decomposer/test_zyz_decomposer.py @@ -1,17 +1,21 @@ from __future__ import annotations -import math +from math import pi +from typing import TYPE_CHECKING import pytest from opensquirrel import CNOT, CR, H, I, Rx, Ry, Rz, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Gate +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.decomposer import ZYZDecomposer from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement +if TYPE_CHECKING: + from opensquirrel.ir import Gate -@pytest.fixture(name="decomposer") -def decomposer_fixture() -> ZYZDecomposer: + +@pytest.fixture +def decomposer() -> ZYZDecomposer: return ZYZDecomposer() @@ -26,13 +30,13 @@ def test_identity(decomposer: ZYZDecomposer) -> None: [ (CNOT(0, 1), [CNOT(0, 1)]), (CR(2, 3, 2.123), [CR(2, 3, 2.123)]), - (X(0), [Rz(0, math.pi / 2), Ry(0, math.pi), Rz(0, -math.pi / 2)]), - (Rx(0, 0.9), [Rz(0, math.pi / 2), Ry(0, 0.9), Rz(0, -math.pi / 2)]), - (Y(0), [Ry(0, math.pi)]), + (X(0), [Rz(0, pi / 2), Ry(0, pi), Rz(0, -pi / 2)]), + (Rx(0, 0.9), [Rz(0, pi / 2), Ry(0, 0.9), Rz(0, -pi / 2)]), + (Y(0), [Ry(0, pi)]), (Ry(0, 0.9), [Ry(0, 0.9)]), - (Z(0), [Rz(0, math.pi)]), + (Z(0), [Rz(0, pi)]), (Rz(0, 0.123), [Rz(0, 0.123)]), - (H(0), [Rz(0, math.pi), Ry(0, math.pi / 2)]), + (H(0), [Rz(0, pi), Ry(0, pi / 2)]), ( BlochSphereRotation(qubit=0, angle=5.21, axis=(1, 2, 3), phase=0.324), [Rz(0, 0.018644578210710527), Ry(0, -0.6209410696845807), Rz(0, -0.9086506397909061)], diff --git a/test/exporter/test_cqasmv1_exporter.py b/tests/passes/exporter/test_cqasmv1_exporter.py similarity index 79% rename from test/exporter/test_cqasmv1_exporter.py rename to tests/passes/exporter/test_cqasmv1_exporter.py index a1fca593..2303f770 100644 --- a/test/exporter/test_cqasmv1_exporter.py +++ b/tests/passes/exporter/test_cqasmv1_exporter.py @@ -2,7 +2,8 @@ from opensquirrel import Circuit, CircuitBuilder from opensquirrel.exceptions import UnsupportedGateError -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate, MatrixGate +from opensquirrel.ir import Gate +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate, MatrixGate from opensquirrel.passes.exporter import ExportFormat @@ -42,7 +43,7 @@ def test_cqasm_v3_to_cqasm_v1() -> None: cnot q[0], q[1] wait q[0], 3 wait q[1], 3 -rx q[0], 5.123 +rx q[0], -1.1601853 measure_z q[0] measure_z q[1] """ @@ -50,8 +51,8 @@ def test_cqasm_v3_to_cqasm_v1() -> None: def test_version_statement() -> None: - qc = Circuit.from_string("""version 3.0""") - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = Circuit.from_string("""version 3.0""") + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -61,8 +62,8 @@ def test_version_statement() -> None: def test_qubit_statement() -> None: builder = CircuitBuilder(3) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -74,8 +75,8 @@ def test_qubit_statement() -> None: def test_circuit_to_string_after_circuit_modification() -> None: builder = CircuitBuilder(3) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -86,8 +87,8 @@ def test_circuit_to_string_after_circuit_modification() -> None: builder.H(0) builder.CNOT(0, 1) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -103,8 +104,8 @@ def test_circuit_to_string_after_circuit_modification() -> None: def test_float_precision() -> None: builder = CircuitBuilder(3) builder.Rx(0, 1.6546514861321684321654) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -123,8 +124,8 @@ def test_measure() -> None: builder.measure(0, 1) builder.measure(1, 0) builder.measure(1, 1) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -144,8 +145,8 @@ def test_init() -> None: builder = CircuitBuilder(1, 1) builder.init(0) builder.H(0) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -162,8 +163,8 @@ def test_reset() -> None: builder = CircuitBuilder(1, 1) builder.H(0) builder.reset(0) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -186,8 +187,8 @@ def test_all_instructions() -> None: builder.S(0).Sdag(0).T(0).Tdag(0) builder.CZ(0, 1).CNOT(1, 0).SWAP(0, 1) builder.measure(0, 0).measure(1, 1) - qc = builder.to_circuit() - cqasm_v1_string = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = builder.to_circuit() + cqasm_v1_string = circuit.export(fmt=ExportFormat.CQASM_V1) assert ( cqasm_v1_string == """version 1.0 @@ -225,17 +226,17 @@ def test_all_instructions() -> None: @pytest.mark.parametrize( "gate", [ - BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23), - ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23)), + BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23, phase=0.0), + ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23, phase=0.0)), MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]), ], ) def test_anonymous_gates(gate: Gate) -> None: builder = CircuitBuilder(2) builder.ir.add_gate(gate) - with pytest.raises(UnsupportedGateError, match="not supported"): # noqa: PT012 - qc = builder.to_circuit() - qc.export(fmt=ExportFormat.CQASM_V1) + with pytest.raises(UnsupportedGateError, match="not supported"): + circuit = builder.to_circuit() + circuit.export(fmt=ExportFormat.CQASM_V1) @pytest.mark.parametrize( @@ -283,6 +284,6 @@ def test_anonymous_gates(gate: Gate) -> None: ], ) def test_barrier_groups(program: str, expected_output: str) -> None: - qc = Circuit.from_string(program) - output = qc.export(fmt=ExportFormat.CQASM_V1) + circuit = Circuit.from_string(program) + output = circuit.export(fmt=ExportFormat.CQASM_V1) assert output == expected_output diff --git a/tests/passes/exporter/test_quantify_scheduler_exporter.py b/tests/passes/exporter/test_quantify_scheduler_exporter.py new file mode 100644 index 00000000..f30d4e5a --- /dev/null +++ b/tests/passes/exporter/test_quantify_scheduler_exporter.py @@ -0,0 +1,104 @@ +from __future__ import annotations + +import importlib +import sys +import unittest.mock +from collections.abc import Generator +from math import degrees, isclose, pi +from typing import TYPE_CHECKING, Any +from unittest.mock import MagicMock + +import pytest + +from opensquirrel import CircuitBuilder, H +from opensquirrel.common import ATOL +from opensquirrel.exceptions import ExporterError +from opensquirrel.ir.semantics import BlochSphereRotation + +if TYPE_CHECKING: + from opensquirrel.ir import Gate + + +class FloatEq(float): + def __eq__(self, other: Any) -> bool: + return isclose(self, other, abs_tol=ATOL) + + +@pytest.fixture +def mock_qs() -> Generator[MagicMock, None, None]: + mock_qs = MagicMock() + sys.modules["quantify_scheduler"] = mock_qs + sys.modules.pop("opensquirrel.passes.exporter.quantify_scheduler_exporter", None) + yield mock_qs + sys.modules.pop("quantify_scheduler", None) + sys.modules.pop("opensquirrel.passes.exporter.quantify_scheduler_exporter", None) + + +def test_export(mock_qs: MagicMock) -> None: + quantify_scheduler_exporter = importlib.import_module("opensquirrel.passes.exporter.quantify_scheduler_exporter") + from opensquirrel.passes.exporter.quantify_scheduler_exporter import FIXED_POINT_DEG_PRECISION + + builder = CircuitBuilder(3, 3) + builder.X(0) + builder.CZ(0, 1) + builder.reset(0) + builder.Rz(1, 2.34) + builder.Ry(2, 1.23) + builder.measure(0, 0) + builder.measure(1, 1) + builder.measure(2, 2) + circuit = builder.to_circuit() + + quantify_scheduler_exporter.export(circuit) + + mock_qs.Schedule.assert_called_with("Exported OpenSquirrel circuit") + + mock_qs.operations.gate_library.Rxy.assert_has_calls( + [ + unittest.mock.call(theta=FloatEq(degrees(pi)), phi=FloatEq(0), qubit="q[0]"), + unittest.mock.call( + theta=FloatEq(round(degrees(1.23), FIXED_POINT_DEG_PRECISION)), + phi=FloatEq(degrees(pi / 2)), + qubit="q[2]", + ), + ] + ) + mock_qs.operations.gate_library.Reset.assert_called_once_with("q[0]") + mock_qs.operations.gate_library.CZ.assert_called_once_with(qC="q[0]", qT="q[1]") + mock_qs.operations.gate_library.Rz.assert_called_once_with( + theta=FloatEq(round(degrees(2.34), FIXED_POINT_DEG_PRECISION)), + qubit="q[1]", + ) + + +@pytest.mark.parametrize( + "gate", + [H(0), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34)], + ids=["H", "BSR"], +) +def test_gates_not_supported(mock_qs: MagicMock, gate: Gate) -> None: + quantify_scheduler_exporter = importlib.import_module("opensquirrel.passes.exporter.quantify_scheduler_exporter") + + builder = CircuitBuilder(3) + builder.ir.add_gate(gate) # or parameterize as before + circuit = builder.to_circuit() + + with pytest.raises(ExporterError, match="cannot export circuit: "): + quantify_scheduler_exporter.export(circuit) + + +def test_quantify_scheduler_not_installed(monkeypatch: pytest.MonkeyPatch) -> None: + # Simulate quantify_scheduler not being installed + monkeypatch.setitem(sys.modules, "quantify_scheduler", None) + sys.modules.pop("opensquirrel.passes.exporter.quantify_scheduler_exporter", None) + + empty_circuit = CircuitBuilder(1).to_circuit() + + with pytest.raises( + ModuleNotFoundError, + match="quantify-scheduler is not installed, or cannot be installed on your system", + ): + quantify_scheduler_exporter = importlib.import_module( + "opensquirrel.passes.exporter.quantify_scheduler_exporter" + ) + quantify_scheduler_exporter.export(empty_circuit) diff --git a/tests/passes/mapper/test_general_mapper.py b/tests/passes/mapper/test_general_mapper.py new file mode 100644 index 00000000..52f83e1c --- /dev/null +++ b/tests/passes/mapper/test_general_mapper.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.passes.mapper import HardcodedMapper +from opensquirrel.passes.mapper.general_mapper import Mapper +from opensquirrel.passes.mapper.mapping import Mapping + +if TYPE_CHECKING: + from opensquirrel.ir import IR + + +class TestMapper: + def test_implementation(self) -> None: + class Mapper2(Mapper): + def __init__(self, qubit_register_size: int, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._qubit_register = qubit_register_size + + def map(self, ir: IR, qubit_register_size: int) -> Mapping: + return Mapping(list(range(self._qubit_register))) + + Mapper2(qubit_register_size=1) + + +class TestMapQubits: + @pytest.fixture + def circuit(self) -> Circuit: + builder = CircuitBuilder(3, 1) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + builder.measure(0, 0) + return builder.to_circuit() + + @pytest.fixture + def remapped_circuit(self) -> Circuit: + builder = CircuitBuilder(3, 1) + builder.H(1) + builder.CNOT(1, 0) + builder.CNOT(0, 2) + builder.measure(1, 0) + return builder.to_circuit() + + def test_circuit_map(self, circuit: Circuit, remapped_circuit: Circuit) -> None: + mapper = HardcodedMapper(mapping=Mapping([1, 0, 2])) + circuit.map(mapper=mapper) + assert circuit == remapped_circuit diff --git a/test/mapper/test_mapping.py b/tests/passes/mapper/test_mapping.py similarity index 100% rename from test/mapper/test_mapping.py rename to tests/passes/mapper/test_mapping.py diff --git a/tests/passes/mapper/test_mip_mapper.py b/tests/passes/mapper/test_mip_mapper.py new file mode 100644 index 00000000..e8b7c842 --- /dev/null +++ b/tests/passes/mapper/test_mip_mapper.py @@ -0,0 +1,114 @@ +# Tests for the MIPMapper pass + +import pytest + +from opensquirrel import CircuitBuilder +from opensquirrel.circuit import Circuit +from opensquirrel.passes.mapper import MIPMapper +from opensquirrel.passes.mapper.mapping import Mapping + + +@pytest.fixture +def mapper1() -> MIPMapper: + connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} + + return MIPMapper(connectivity=connectivity) + + +@pytest.fixture +def mapper2() -> MIPMapper: + connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} + return MIPMapper(connectivity=connectivity) + + +@pytest.fixture +def mapper3() -> MIPMapper: + connectivity = {"0": [2], "1": [0, 3, 4], "2": [0, 5], "3": [1, 5, 2], "4": [2, 5], "5": [4, 6], "6": [3]} + timeout = 0.000001 + return MIPMapper(timeout=timeout, connectivity=connectivity) + + +@pytest.fixture +def circuit1() -> Circuit: + builder = CircuitBuilder(5) + builder.H(0) + builder.CNOT(0, 1) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(2, 4) + builder.CNOT(3, 4) + return builder.to_circuit() + + +@pytest.fixture +def circuit2() -> Circuit: + builder = CircuitBuilder(7) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(0, 3) + builder.H(2) + builder.CNOT(1, 2) + builder.CNOT(1, 3) + builder.CNOT(2, 3) + builder.CNOT(3, 4) + builder.CNOT(0, 4) + return builder.to_circuit() + + +@pytest.fixture +def circuit3() -> Circuit: + builder = CircuitBuilder(7) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(0, 2) + builder.CNOT(1, 3) + builder.CNOT(2, 4) + builder.CNOT(3, 5) + builder.CNOT(4, 6) + return builder.to_circuit() + + +def test_mip_mapper_simple_connectivity(mapper1: MIPMapper, circuit1: Circuit) -> None: + expected_mapping = Mapping([4, 3, 2, 0, 1]) + mapping = mapper1.map(circuit1.ir, circuit1.qubit_register_size) + assert mapping == expected_mapping + + +def test_mip_mapper_complex_connectivity(mapper2: MIPMapper, circuit2: Circuit) -> None: + expected_mapping = Mapping([3, 4, 2, 5, 1, 0, 6]) + mapping = mapper2.map(circuit2.ir, circuit2.qubit_register_size) + assert mapping == expected_mapping + + +def test_more_logical_qubits_than_physical(mapper1: MIPMapper, circuit3: Circuit) -> None: + with pytest.raises(RuntimeError, match=r"Number of virtual qubits (.*) exceeds number of physical qubits (.*)"): + mapper1.map(circuit3.ir, circuit3.qubit_register_size) + + +def test_timeout(mapper3: MIPMapper, circuit2: Circuit) -> None: + with pytest.raises(RuntimeError, match="MIP solver failed"): + # timeout used: 0.000001 + mapper3.map(circuit2.ir, circuit2.qubit_register_size) + + +def test_map_method(mapper1: MIPMapper, circuit1: Circuit) -> None: + initial_circuit = str(circuit1) + circuit1.map(mapper=mapper1) + assert str(circuit1) != initial_circuit + + +def test_fewer_virtual_than_physical_qubits(mapper1: MIPMapper) -> None: + builder = CircuitBuilder(3) + builder.H(0) + builder.CNOT(0, 1) + builder.CNOT(1, 2) + circuit = builder.to_circuit() + + mapping = mapper1.map(circuit.ir, circuit.qubit_register_size) + + assert len(mapping) == 3 + + physical_qubits = [mapping[i] for i in range(3)] + assert all(0 <= physical_qubit <= 4 for physical_qubit in physical_qubits) + + assert len(set(physical_qubits)) == 3 diff --git a/test/mapper/test_qubit_remapper.py b/tests/passes/mapper/test_qubit_remapper.py similarity index 100% rename from test/mapper/test_qubit_remapper.py rename to tests/passes/mapper/test_qubit_remapper.py diff --git a/tests/passes/mapper/test_simple_mappers.py b/tests/passes/mapper/test_simple_mappers.py new file mode 100644 index 00000000..813bbfa0 --- /dev/null +++ b/tests/passes/mapper/test_simple_mappers.py @@ -0,0 +1,123 @@ +# Tests for the simple mapper passes +from __future__ import annotations + +import random + +import pytest + +from opensquirrel import Circuit, CircuitBuilder +from opensquirrel.passes.mapper import HardcodedMapper, IdentityMapper, RandomMapper +from opensquirrel.passes.mapper.mapping import Mapping +from opensquirrel.utils import check_mapper + + +class TestIdentityMapper: + @pytest.fixture + def mapper(self) -> IdentityMapper: + return IdentityMapper() + + @pytest.fixture + def circuit(self) -> Circuit: + builder = CircuitBuilder(3) + builder.H(0) + return builder.to_circuit() + + def test_compliance(self, mapper: IdentityMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: IdentityMapper, circuit: Circuit) -> None: + mapping = mapper.map(circuit.ir, circuit.qubit_register_size) + assert mapping == Mapping([0, 1, 2]) + + def test_map_method(self, mapper: IdentityMapper, circuit: Circuit) -> None: + initial_circuit = str(circuit) + circuit.map(mapper=mapper) + assert str(circuit) == initial_circuit + + +class TestHardcodedMapper: + @pytest.fixture + def mapper(self) -> HardcodedMapper: + mapping = Mapping([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) + return HardcodedMapper(mapping=mapping) + + @pytest.fixture + def circuit(self) -> Circuit: + builder = CircuitBuilder(10) + builder.H(0) + builder.H(1) + builder.H(2) + builder.H(3) + builder.H(4) + builder.H(5) + builder.H(6) + builder.H(7) + builder.H(8) + builder.H(9) + return builder.to_circuit() + + def test_compliance(self, mapper: HardcodedMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: HardcodedMapper, circuit: Circuit) -> None: + mapping = mapper.map(circuit.ir, circuit.qubit_register_size) + assert mapping == Mapping([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) + + def test_map_method(self, mapper: HardcodedMapper, circuit: Circuit) -> None: + circuit.map(mapper=mapper) + + assert ( + str(circuit) + == """version 3.0 + +qubit[10] q + +H q[1] +H q[2] +H q[3] +H q[4] +H q[5] +H q[6] +H q[7] +H q[8] +H q[9] +H q[0] +""" + ) + + +class TestRandomMapper: + @pytest.fixture + def mapper(self) -> RandomMapper: + return RandomMapper() + + @pytest.fixture + def circuit(self) -> Circuit: + builder = CircuitBuilder(5) + builder.H(0) + return builder.to_circuit() + + def test_compliance(self, mapper: RandomMapper) -> None: + check_mapper(mapper) + + def test_get_mapping(self, mapper: RandomMapper, circuit: Circuit) -> None: + mapping = mapper.map(circuit.ir, circuit.qubit_register_size) + assert len(mapping) == 5 + + def test_map_method(self, mapper: RandomMapper, circuit: Circuit) -> None: + circuit.map(mapper=mapper) + assert str(circuit) is not None + + @pytest.mark.parametrize("seed, qubit_register_size", [(42, 5), (123, 10), (456, 20)]) # noqa: PT006 + def test_mapping_uniqueness(self, seed: int, qubit_register_size: int) -> None: + random.seed(seed) + mapper = RandomMapper(seed=seed) + + builder = CircuitBuilder(qubit_register_size) + builder.H(0) + circuit = builder.to_circuit() + + original_mapping = Mapping(list(range(qubit_register_size))) + new_mapping = mapper.map(circuit.ir, circuit.qubit_register_size) + + assert new_mapping != original_mapping diff --git a/test/merger/test_general_merger.py b/tests/passes/merger/test_general_merger.py similarity index 80% rename from test/merger/test_general_merger.py rename to tests/passes/merger/test_general_merger.py index 13887687..d4a03a05 100644 --- a/test/merger/test_general_merger.py +++ b/tests/passes/merger/test_general_merger.py @@ -1,48 +1,48 @@ -import math +from math import pi import pytest from opensquirrel import Circuit, CircuitBuilder, H, I, Rx, Ry, X, Y, Z -from opensquirrel.ir import BlochSphereRotation, Float +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.merger.general_merger import compose_bloch_sphere_rotations, rearrange_barriers def test_compose_bloch_sphere_rotations_same_axis() -> None: - a = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.4) - b = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=-0.3) + a = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.4, phase=0.2) + b = BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=-0.3, phase=-0.15) composed = compose_bloch_sphere_rotations(a, b) - assert composed == BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.1) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 2, 3), angle=0.1, phase=0.05) def test_compose_bloch_sphere_rotations_different_axis() -> None: # Visualizing this in 3D is difficult... - a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=math.pi / 2) - b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-math.pi / 2) - c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=math.pi / 2) + a = BlochSphereRotation(qubit=123, axis=(1, 0, 0), angle=pi / 2, phase=pi / 4) + b = BlochSphereRotation(qubit=123, axis=(0, 0, 1), angle=-pi / 2, phase=pi / 4) + c = BlochSphereRotation(qubit=123, axis=(0, 1, 0), angle=pi / 2, phase=pi / 4) composed = compose_bloch_sphere_rotations(compose_bloch_sphere_rotations(c, b), a) - assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=math.pi) + assert composed == BlochSphereRotation(qubit=123, axis=(1, 1, 0), angle=pi, phase=3 * pi / 4) @pytest.mark.parametrize( ("bsr_a", "bsr_b", "expected_result"), [ - (Y(0), X(0), BlochSphereRotation(0, axis=(0, 0, 1), angle=math.pi, phase=math.pi)), - (X(0), Y(0), BlochSphereRotation(0, axis=(0, 0, -1), angle=math.pi, phase=math.pi)), - (Z(0), Y(0), BlochSphereRotation(0, axis=(1, 0, 0), angle=math.pi, phase=math.pi)), - (Y(0), Z(0), BlochSphereRotation(0, axis=(-1, 0, 0), angle=math.pi, phase=math.pi)), - (Z(0), X(0), BlochSphereRotation(0, axis=(0, -1, 0), angle=math.pi, phase=math.pi)), - (X(0), Z(0), BlochSphereRotation(0, axis=(0, 1, 0), angle=math.pi, phase=math.pi)), + (Y(0), X(0), BlochSphereRotation(0, axis=(0, 0, 1), angle=pi, phase=pi)), + (X(0), Y(0), BlochSphereRotation(0, axis=(0, 0, -1), angle=pi, phase=pi)), + (Z(0), Y(0), BlochSphereRotation(0, axis=(1, 0, 0), angle=pi, phase=pi)), + (Y(0), Z(0), BlochSphereRotation(0, axis=(-1, 0, 0), angle=pi, phase=pi)), + (Z(0), X(0), BlochSphereRotation(0, axis=(0, -1, 0), angle=pi, phase=pi)), + (X(0), Z(0), BlochSphereRotation(0, axis=(0, 1, 0), angle=pi, phase=pi)), ( - Rx(0, theta=math.pi), - Ry(0, theta=-math.pi / 2), - BlochSphereRotation(0, axis=(0.70711, 0.0, 0.70711), angle=math.pi, phase=0.0), + Rx(0, theta=pi), + Ry(0, theta=-pi / 2), + BlochSphereRotation(0, axis=(0.70711, 0.0, 0.70711), angle=pi, phase=0.0), ), - (I(0), Rx(0, theta=math.pi), Rx(0, theta=math.pi)), - (Rx(0, theta=math.pi), I(0), Rx(0, theta=math.pi)), + (I(0), Rx(0, theta=pi), Rx(0, theta=pi)), + (Rx(0, theta=pi), I(0), Rx(0, theta=pi)), (X(0), X(0), I(0)), (H(0), H(0), I(0)), - (Rx(0, theta=math.pi), Rx(0, theta=math.pi), I(0)), - (Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi / 2), Rx(0, theta=math.pi)), + (Rx(0, theta=pi), Rx(0, theta=pi), I(0)), + (Rx(0, theta=pi / 2), Rx(0, theta=pi / 2), Rx(0, theta=pi)), ], ids=[ "[bsr_a = Y, bsr_b = X] X * Y = iZ", @@ -70,7 +70,7 @@ def test_compose_bloch_sphere_rotations( ("circuit", "expected_result"), [ ( - CircuitBuilder(2).H(0).barrier(0).H(1).barrier(1).H(0).Rx(0, Float(math.pi / 3)).barrier(0).to_circuit(), + CircuitBuilder(2).H(0).barrier(0).H(1).barrier(1).H(0).Rx(0, pi / 3).barrier(0).to_circuit(), """version 3.0 qubit[2] q diff --git a/test/merger/test_single_qubit_gates_merger.py b/tests/passes/merger/test_single_qubit_gates_merger.py similarity index 80% rename from test/merger/test_single_qubit_gates_merger.py rename to tests/passes/merger/test_single_qubit_gates_merger.py index 053804a3..9b7d102a 100644 --- a/test/merger/test_single_qubit_gates_merger.py +++ b/tests/passes/merger/test_single_qubit_gates_merger.py @@ -2,15 +2,15 @@ import pytest -from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.ir import BlochSphereRotation, Float, Rn +from opensquirrel import Circuit, CircuitBuilder, Rn +from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.passes.merger import SingleQubitGatesMerger from opensquirrel.passes.merger.general_merger import rearrange_barriers -from test.ir_equality_test_base import modify_circuit_and_check +from tests.ir.ir_equality_test_base import modify_circuit_and_check -@pytest.fixture(name="merger") -def merger_fixture() -> SingleQubitGatesMerger: +@pytest.fixture +def merger() -> SingleQubitGatesMerger: return SingleQubitGatesMerger() @@ -63,7 +63,7 @@ def test_merge_different_qubits(merger: SingleQubitGatesMerger) -> None: builder2 = CircuitBuilder(4) builder2.ir.add_gate(Rn(0, 1, 0, 1, math.pi, 0)) # this is Hadamard with 0 phase builder2.Rz(1, 1.2345) - builder2.Ry(2, Float(4.234)) + builder2.Ry(2, 4.234) expected_circuit = builder2.to_circuit() modify_circuit_and_check(circuit, merger.merge, expected_circuit) @@ -80,7 +80,7 @@ def test_merge_and_flush(merger: SingleQubitGatesMerger) -> None: circuit = builder1.to_circuit() builder2 = CircuitBuilder(4) - builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi)) # this is Hadamard with 0 phase + builder2.ir.add_gate(BlochSphereRotation(0, axis=(1, 0, 1), angle=math.pi, phase=0.0)) builder2.Rz(1, -1.0) builder2.CNOT(0, 1) builder2.Ry(0, 3.234) @@ -93,13 +93,13 @@ def test_merge_y90_x_to_h(merger: SingleQubitGatesMerger) -> None: builder = CircuitBuilder(1) builder.Ry(0, math.pi / 2) builder.X(0) - qc = builder.to_circuit() + circuit = builder.to_circuit() builder2 = CircuitBuilder(1) builder2.H(0) - expected_qc = builder2.to_circuit() + expected_circuit = builder2.to_circuit() - modify_circuit_and_check(qc, merger.merge, expected_qc) + modify_circuit_and_check(circuit, merger.merge, expected_circuit) def test_no_merge_across_measure(merger: SingleQubitGatesMerger) -> None: @@ -110,16 +110,16 @@ def test_no_merge_across_measure(merger: SingleQubitGatesMerger) -> None: builder.H(1) builder.measure(0, 1) builder.H(1) - qc = builder.to_circuit() + circuit = builder.to_circuit() builder2 = CircuitBuilder(2, 2) builder2.H(0) builder2.measure(0, 0) builder2.H(0) builder2.measure(0, 1) - expected_qc = builder2.to_circuit() + expected_circuit = builder2.to_circuit() - modify_circuit_and_check(qc, merger.merge, expected_qc) + modify_circuit_and_check(circuit, merger.merge, expected_circuit) def test_no_merge_across_reset(merger: SingleQubitGatesMerger) -> None: @@ -130,16 +130,16 @@ def test_no_merge_across_reset(merger: SingleQubitGatesMerger) -> None: builder.H(1) builder.reset(0) builder.H(1) - qc = builder.to_circuit() + circuit = builder.to_circuit() builder2 = CircuitBuilder(2) builder2.H(0) builder2.reset(0) builder2.H(0) builder2.reset(0) - expected_qc = builder2.to_circuit() + expected_circuit = builder2.to_circuit() - modify_circuit_and_check(qc, merger.merge, expected_qc) + modify_circuit_and_check(circuit, merger.merge, expected_circuit) def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: @@ -150,15 +150,15 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: builder.H(1) builder.wait(0, 3) builder.H(1) - qc = builder.to_circuit() + circuit = builder.to_circuit() builder2 = CircuitBuilder(2) builder2.H(0) builder2.wait(0, 3) builder2.H(0) builder2.wait(0, 3) - expected_qc = builder2.to_circuit() - modify_circuit_and_check(qc, merger.merge, expected_qc) + expected_circuit = builder2.to_circuit() + modify_circuit_and_check(circuit, merger.merge, expected_circuit) @pytest.mark.parametrize( @@ -168,15 +168,15 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: ( CircuitBuilder(2) .H(1) - .Rz(1, Float(2.332)) + .Rz(1, 2.332) .H(0) - .Rx(0, Float(1.423)) + .Rx(0, 1.423) .barrier(0) .barrier(1) .H(1) - .Rz(1, Float(2.332)) + .Rz(1, 2.332) .H(0) - .Rx(1, Float(1.423)) + .Rx(1, 1.423) .barrier(0) .barrier(1) .to_circuit() @@ -198,13 +198,13 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: ( CircuitBuilder(3) .H(0) - .Ry(0, Float(2)) + .Ry(0, 2) .barrier(2) .barrier(0) .barrier(1) .H(0) .H(1) - .Ry(1, Float(2)) + .Ry(1, 2) .barrier(1) .H(2) .barrier(2) @@ -229,17 +229,7 @@ def test_no_merge_across_wait(merger: SingleQubitGatesMerger) -> None: """, ), ( - CircuitBuilder(2) - .H(0) - .Ry(0, Float(2)) - .barrier(1) - .barrier(0) - .barrier(1) - .H(0) - .H(1) - .Ry(1, Float(2)) - .barrier(1) - .to_circuit(), + CircuitBuilder(2).H(0).Ry(0, 2).barrier(1).barrier(0).barrier(1).H(0).H(1).Ry(1, 2).barrier(1).to_circuit(), """version 3.0 qubit[2] q diff --git a/test/router/test_astar_router.py b/tests/passes/router/test_astar_router.py similarity index 54% rename from test/router/test_astar_router.py rename to tests/passes/router/test_astar_router.py index 6629323e..788cff55 100644 --- a/test/router/test_astar_router.py +++ b/tests/passes/router/test_astar_router.py @@ -1,27 +1,26 @@ # Tests for the AStarRouter class import pytest -from opensquirrel import CircuitBuilder +from opensquirrel import SWAP, CircuitBuilder from opensquirrel.circuit import Circuit -from opensquirrel.ir import SWAP from opensquirrel.passes.router import AStarRouter from opensquirrel.passes.router.heuristics import DistanceMetric -@pytest.fixture(name="router1") -def router_fixture1() -> AStarRouter: +@pytest.fixture +def router1() -> AStarRouter: connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} return AStarRouter(connectivity, distance_metric=DistanceMetric.MANHATTAN) -@pytest.fixture(name="router2") -def router_fixture2() -> AStarRouter: +@pytest.fixture +def router2() -> AStarRouter: connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} return AStarRouter(connectivity, distance_metric=DistanceMetric.EUCLIDEAN) -@pytest.fixture(name="router3") -def router_fixture3() -> AStarRouter: +@pytest.fixture +def router3() -> AStarRouter: connectivity = { "0": [1, 2, 5], "1": [0, 3, 6], @@ -37,8 +36,19 @@ def router_fixture3() -> AStarRouter: return AStarRouter(connectivity, distance_metric=DistanceMetric.CHEBYSHEV) -@pytest.fixture(name="circuit1") -def circuit_fixture1() -> Circuit: +@pytest.fixture +def router4() -> AStarRouter: + connectivity = { + "0": [1], + "1": [0, 2], + "2": [1, 3], + "3": [2], + } + return AStarRouter(connectivity, distance_metric=DistanceMetric.MANHATTAN) + + +@pytest.fixture +def circuit1() -> Circuit: builder = CircuitBuilder(5) builder.CNOT(0, 1) builder.CNOT(1, 2) @@ -48,8 +58,8 @@ def circuit_fixture1() -> Circuit: return builder.to_circuit() -@pytest.fixture(name="circuit2") -def circuit_fixture2() -> Circuit: +@pytest.fixture +def circuit2() -> Circuit: builder = CircuitBuilder(7) builder.CNOT(0, 6) builder.CNOT(1, 5) @@ -62,8 +72,8 @@ def circuit_fixture2() -> Circuit: return builder.to_circuit() -@pytest.fixture(name="circuit3") -def circuit_fixture3() -> Circuit: +@pytest.fixture +def circuit3() -> Circuit: builder = CircuitBuilder(10) builder.CNOT(0, 9) builder.CNOT(1, 8) @@ -82,9 +92,17 @@ def circuit_fixture3() -> Circuit: return builder.to_circuit() +@pytest.fixture +def circuit4() -> Circuit: + builder = CircuitBuilder(4) + builder.CNOT(0, 3) + builder.CNOT(1, 2) + return builder.to_circuit() + + @pytest.mark.parametrize( "router, circuit, expected_swap_count", # noqa: PT006 - [("router1", "circuit1", 4), ("router2", "circuit2", 8), ("router3", "circuit3", 15)], + [("router1", "circuit1", 3), ("router2", "circuit2", 15), ("router3", "circuit3", 13)], ) def test_router( router: AStarRouter, circuit: Circuit, expected_swap_count: int, request: pytest.FixtureRequest @@ -94,3 +112,31 @@ def test_router( circuit.route(router=router) swap_count = sum(1 for statement in circuit.ir.statements if isinstance(statement, SWAP)) assert swap_count == expected_swap_count + + +def test_route_on_circuit(router4: AStarRouter, circuit4: Circuit) -> None: + circuit4.route(router=router4) + swap_count = sum(1 for statement in circuit4.ir.statements if isinstance(statement, SWAP)) + assert swap_count == 2 + + +def test_route_indices_propagation(router4: AStarRouter, circuit4: Circuit) -> None: + circuit4.route(router=router4) + + builder = CircuitBuilder(4) + builder.SWAP(0, 1) + builder.SWAP(1, 2) + builder.CNOT(2, 3) + builder.CNOT(0, 1) + expected_circuit = builder.to_circuit() + + actual_statements = circuit4.ir.statements + expected_statements = expected_circuit.ir.statements + + assert len(actual_statements) == len(expected_statements) + + for actual, expected in zip(actual_statements, expected_statements): + assert type(actual) is type(expected) + actual_indices = [q.index for q in actual.get_qubit_operands()] # type: ignore[attr-defined] + expected_indices = [q.index for q in expected.get_qubit_operands()] # type: ignore[attr-defined] + assert actual_indices == expected_indices diff --git a/test/router/test_shortest_path_router.py b/tests/passes/router/test_shortest_path_router.py similarity index 53% rename from test/router/test_shortest_path_router.py rename to tests/passes/router/test_shortest_path_router.py index 3fe33c08..6261c361 100644 --- a/test/router/test_shortest_path_router.py +++ b/tests/passes/router/test_shortest_path_router.py @@ -1,26 +1,25 @@ # Tests for the ShortestPathRouter class import pytest -from opensquirrel import CircuitBuilder +from opensquirrel import SWAP, CircuitBuilder from opensquirrel.circuit import Circuit -from opensquirrel.ir import SWAP from opensquirrel.passes.router import ShortestPathRouter -@pytest.fixture(name="router1") -def router_fixture1() -> ShortestPathRouter: +@pytest.fixture +def router1() -> ShortestPathRouter: connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} return ShortestPathRouter(connectivity) -@pytest.fixture(name="router2") -def router_fixture2() -> ShortestPathRouter: +@pytest.fixture +def router2() -> ShortestPathRouter: connectivity = {"0": [1, 2], "1": [0, 3], "2": [0, 4], "3": [1, 5], "4": [2, 5], "5": [3, 4, 6], "6": [5]} return ShortestPathRouter(connectivity) -@pytest.fixture(name="router3") -def router_fixture3() -> ShortestPathRouter: +@pytest.fixture +def router3() -> ShortestPathRouter: connectivity = { "0": [1, 2, 5], "1": [0, 3, 6], @@ -36,8 +35,19 @@ def router_fixture3() -> ShortestPathRouter: return ShortestPathRouter(connectivity) -@pytest.fixture(name="circuit1") -def circuit_fixture1() -> Circuit: +@pytest.fixture +def router4() -> ShortestPathRouter: + connectivity = { + "0": [1], + "1": [0, 2], + "2": [1, 3], + "3": [2], + } + return ShortestPathRouter(connectivity) + + +@pytest.fixture +def circuit1() -> Circuit: builder = CircuitBuilder(5) builder.CNOT(0, 1) builder.CNOT(1, 2) @@ -47,8 +57,8 @@ def circuit_fixture1() -> Circuit: return builder.to_circuit() -@pytest.fixture(name="circuit2") -def circuit_fixture2() -> Circuit: +@pytest.fixture +def circuit2() -> Circuit: builder = CircuitBuilder(7) builder.CNOT(0, 6) builder.CNOT(1, 5) @@ -61,8 +71,8 @@ def circuit_fixture2() -> Circuit: return builder.to_circuit() -@pytest.fixture(name="circuit3") -def circuit_fixture3() -> Circuit: +@pytest.fixture +def circuit3() -> Circuit: builder = CircuitBuilder(10) builder.CNOT(0, 9) builder.CNOT(1, 8) @@ -81,9 +91,17 @@ def circuit_fixture3() -> Circuit: return builder.to_circuit() +@pytest.fixture +def circuit4() -> Circuit: + builder = CircuitBuilder(4) + builder.CNOT(0, 3) + builder.CNOT(1, 2) + return builder.to_circuit() + + @pytest.mark.parametrize( "router, circuit, expected_swap_count", # noqa: PT006 - [("router1", "circuit1", 4), ("router2", "circuit2", 8), ("router3", "circuit3", 15)], + [("router1", "circuit1", 3), ("router2", "circuit2", 14), ("router3", "circuit3", 10)], ) def test_router( router: ShortestPathRouter, circuit: Circuit, expected_swap_count: int, request: pytest.FixtureRequest @@ -93,3 +111,31 @@ def test_router( circuit.route(router=router) swap_count = sum(1 for statement in circuit.ir.statements if isinstance(statement, SWAP)) assert swap_count == expected_swap_count + + +def test_route_on_circuit(router4: ShortestPathRouter, circuit4: Circuit) -> None: + circuit4.route(router=router4) + swap_count = sum(1 for statement in circuit4.ir.statements if isinstance(statement, SWAP)) + assert swap_count == 2 + + +def test_route_indices_propagation(router4: ShortestPathRouter, circuit4: Circuit) -> None: + circuit4.route(router=router4) + + builder = CircuitBuilder(4) + builder.SWAP(0, 1) + builder.SWAP(1, 2) + builder.CNOT(2, 3) + builder.CNOT(0, 1) + expected_circuit = builder.to_circuit() + + actual_statements = circuit4.ir.statements + expected_statements = expected_circuit.ir.statements + + assert len(actual_statements) == len(expected_statements) + + for actual, expected in zip(actual_statements, expected_statements): + assert type(actual) is type(expected) + actual_indices = [q.index for q in actual.get_qubit_operands()] # type: ignore[attr-defined] + expected_indices = [q.index for q in expected.get_qubit_operands()] # type: ignore[attr-defined] + assert actual_indices == expected_indices diff --git a/test/validator/test_routing_validator.py b/tests/passes/validator/test_interaction_validator.py similarity index 66% rename from test/validator/test_routing_validator.py rename to tests/passes/validator/test_interaction_validator.py index 4f8b7e91..e04fd0ff 100644 --- a/test/validator/test_routing_validator.py +++ b/tests/passes/validator/test_interaction_validator.py @@ -5,13 +5,13 @@ from opensquirrel import CircuitBuilder from opensquirrel.circuit import Circuit from opensquirrel.ir import AsmDeclaration -from opensquirrel.passes.validator import RoutingValidator +from opensquirrel.passes.validator import InteractionValidator -@pytest.fixture(name="validator") -def router_fixture() -> RoutingValidator: +@pytest.fixture +def validator() -> InteractionValidator: connectivity = {"0": [1, 2], "1": [0, 2, 3], "2": [0, 1, 4], "3": [1, 4], "4": [2, 3]} - return RoutingValidator(connectivity) + return InteractionValidator(connectivity) @pytest.fixture @@ -41,26 +41,26 @@ def circuit2() -> Circuit: return builder.to_circuit() -def test_routing_checker_possible_1to1_mapping(validator: RoutingValidator, circuit1: Circuit) -> None: +def test_routing_checker_possible_1to1_mapping(validator: InteractionValidator, circuit1: Circuit) -> None: try: validator.validate(circuit1.ir) except ValueError: pytest.fail("route() raised ValueError unexpectedly") -def test_routing_checker_impossible_1to1_mapping(validator: RoutingValidator, circuit2: Circuit) -> None: +def test_routing_checker_impossible_1to1_mapping(validator: InteractionValidator, circuit2: Circuit) -> None: with pytest.raises( ValueError, match=r"the following qubit interactions in the circuit prevent a 1-to-1 mapping:.*" ): validator.validate(circuit2.ir) -def test_ignore_asm(validator: RoutingValidator) -> None: +def test_ignore_asm(validator: InteractionValidator) -> None: builder = CircuitBuilder(2) builder.H(0) builder.asm("backend_name", r"backend_code") builder.CNOT(0, 1) - qc = builder.to_circuit() - validator.validate(qc.ir) + circuit = builder.to_circuit() + validator.validate(circuit.ir) - assert len([statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)]) == 1 + assert len([statement for statement in circuit.ir.statements if isinstance(statement, AsmDeclaration)]) == 1 diff --git a/test/validator/test_primitive_gate_validator.py b/tests/passes/validator/test_primitive_gate_validator.py similarity index 94% rename from test/validator/test_primitive_gate_validator.py rename to tests/passes/validator/test_primitive_gate_validator.py index 54fe365a..5d9abd5e 100644 --- a/test/validator/test_primitive_gate_validator.py +++ b/tests/passes/validator/test_primitive_gate_validator.py @@ -6,8 +6,8 @@ from opensquirrel.passes.validator import PrimitiveGateValidator -@pytest.fixture(name="validator") -def validator_fixture() -> PrimitiveGateValidator: +@pytest.fixture +def validator() -> PrimitiveGateValidator: primitive_gate_set = ["I", "X90", "mX90", "Y90", "mY90", "Rz", "CZ"] return PrimitiveGateValidator(primitive_gate_set) diff --git a/test/reindexer/test_qubit_reindexer.py b/tests/reindexer/test_qubit_reindexer.py similarity index 86% rename from test/reindexer/test_qubit_reindexer.py rename to tests/reindexer/test_qubit_reindexer.py index 58e231cc..ba3b81ba 100644 --- a/test/reindexer/test_qubit_reindexer.py +++ b/tests/reindexer/test_qubit_reindexer.py @@ -1,11 +1,12 @@ from __future__ import annotations -import math +from math import pi import pytest from opensquirrel import Y90, Circuit, CircuitBuilder, X -from opensquirrel.ir import BlochSphereRotation, ControlledGate, Gate, MatrixGate, Measure +from opensquirrel.ir import Gate, Measure +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate, MatrixGate from opensquirrel.reindexer.qubit_reindexer import get_reindexed_circuit @@ -23,7 +24,7 @@ def replacement_gates_1() -> list[Gate]: def replacement_gates_2() -> list[Gate | Measure]: return [ Measure(1, 1), - BlochSphereRotation(3, axis=(0, 0, 1), angle=math.pi), + BlochSphereRotation(3, axis=(0, 0, 1), angle=pi, phase=pi / 2), MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [0, 3]), ControlledGate(1, X(2)), ] @@ -32,7 +33,7 @@ def replacement_gates_2() -> list[Gate | Measure]: def circuit_2_reindexed() -> Circuit: builder = CircuitBuilder(4, 4) builder.measure(0, 0) - builder.ir.add_gate(BlochSphereRotation(2, axis=(0, 0, 1), angle=math.pi)) + builder.ir.add_gate(BlochSphereRotation(2, axis=(0, 0, 1), angle=pi, phase=pi / 2)) builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], [1, 2])) builder.ir.add_gate(ControlledGate(0, X(3))) return builder.to_circuit() diff --git a/test/test_asm_declaration.py b/tests/test_asm_declaration.py similarity index 83% rename from test/test_asm_declaration.py rename to tests/test_asm_declaration.py index 014ee930..2a69dce5 100644 --- a/test/test_asm_declaration.py +++ b/tests/test_asm_declaration.py @@ -1,12 +1,12 @@ import pytest from opensquirrel import Circuit, CircuitBuilder -from opensquirrel.parser.libqasm.parser import Parser from opensquirrel.passes.merger import SingleQubitGatesMerger +from opensquirrel.reader import LibQasmParser def test_empty_raw_text_string() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -17,7 +17,7 @@ def test_empty_raw_text_string() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[1] q @@ -29,7 +29,7 @@ def test_empty_raw_text_string() -> None: def test_single_line() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3 @@ -43,7 +43,7 @@ def test_single_line() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -56,7 +56,7 @@ def test_single_line() -> None: def test_multi_line() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3 @@ -75,7 +75,7 @@ def test_multi_line() -> None: """, ) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -97,7 +97,7 @@ def test_invalid_backend_name() -> None: OSError, match=r"Error at :5:13..16: mismatched input '100' expecting IDENTIFIER", ): - Parser().circuit_from_string( + LibQasmParser().circuit_from_string( """version 3.0 qubit q @@ -113,7 +113,7 @@ def test_invalid_raw_text_string() -> None: OSError, match=r"Error at :5:26..29: mismatched input ''''' expecting RAW_TEXT_STRING", ): - Parser().circuit_from_string( + LibQasmParser().circuit_from_string( """version 3 qubit q @@ -128,9 +128,9 @@ def test_asm_circuit_builder() -> None: builder.H(0) builder.asm("TestBackend", """ a ' " {} () [] b """) builder.CNOT(0, 1) - qc = builder.to_circuit() + circuit = builder.to_circuit() assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q @@ -149,10 +149,10 @@ def test_no_merging_across_asm() -> None: builder.asm("TestBackend", """ a ' " {} () [] b """) builder.H(0) builder.X90(1) - qc = builder.to_circuit() - qc.merge(merger=SingleQubitGatesMerger()) + circuit = builder.to_circuit() + circuit.merge(merger=SingleQubitGatesMerger()) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q diff --git a/test/test_circuit.py b/tests/test_circuit.py similarity index 68% rename from test/test_circuit.py rename to tests/test_circuit.py index ab318127..67423b00 100644 --- a/test/test_circuit.py +++ b/tests/test_circuit.py @@ -14,17 +14,17 @@ def test_asm_filter() -> None: builder.H(0) builder.asm("_TestBackend_2", """backend code""") # relevant name variant 2 builder.to_circuit() - qc = builder.to_circuit() + circuit = builder.to_circuit() - asm_statements = [statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)] - assert len(qc.ir.statements) == 9 + asm_statements = [statement for statement in circuit.ir.statements if isinstance(statement, AsmDeclaration)] + assert len(circuit.ir.statements) == 9 assert len(asm_statements) == 5 relevant_backend_name = "TestBackend" - qc.asm_filter(relevant_backend_name) + circuit.asm_filter(relevant_backend_name) - asm_statements = [statement for statement in qc.ir.statements if isinstance(statement, AsmDeclaration)] - assert len(qc.ir.statements) == 7 + asm_statements = [statement for statement in circuit.ir.statements if isinstance(statement, AsmDeclaration)] + assert len(circuit.ir.statements) == 7 assert len(asm_statements) == 3 for statement in asm_statements: diff --git a/test/test_circuit_builder.py b/tests/test_circuit_builder.py similarity index 100% rename from test/test_circuit_builder.py rename to tests/test_circuit_builder.py diff --git a/test/test_circuit_matrix_calculator.py b/tests/test_circuit_matrix_calculator.py similarity index 100% rename from test/test_circuit_matrix_calculator.py rename to tests/test_circuit_matrix_calculator.py diff --git a/tests/test_parameter_domain.py b/tests/test_parameter_domain.py new file mode 100644 index 00000000..feb34928 --- /dev/null +++ b/tests/test_parameter_domain.py @@ -0,0 +1,91 @@ +from collections.abc import Iterator +from math import pi +from typing import cast + +import pytest + +from opensquirrel import Circuit, CircuitBuilder, Rn, Rx, Ry, Rz, X +from opensquirrel.common import normalize_angle +from opensquirrel.ir import Float, Gate, Instruction +from opensquirrel.ir.semantics import ControlledGate +from opensquirrel.passes.merger import SingleQubitGatesMerger + +AnglesType = Iterator[tuple[float, float]] + +DELTA = 0.001 + + +@pytest.fixture +def angles() -> AnglesType: + input_angles = [pi, -pi, -pi - DELTA, -pi + DELTA, 3 * pi / 2, -3 * pi / 2, 2 * pi] + expected_outputs = [pi, pi, pi - DELTA, -pi + DELTA, -pi / 2, pi / 2, 0.0] + return zip(input_angles, expected_outputs) + + +class TestParsing: + @staticmethod + def _check_expected(circuit: Circuit, expected: float) -> None: + for statement in circuit.ir.statements: + assert getattr(statement, "theta").value == expected # noqa + phi = getattr(statement, "phi", None) + assert phi.value == expected if phi else True + + def test_circuit_from_string(self, angles: AnglesType) -> None: + for angle, expected in angles: + circuit = Circuit.from_string( + f"version 3; qubit[2] q; Rx({angle}) q[0]; Rn(1,1,1,{angle},{angle}) q[0]; CR({angle}) q[0], q[1]" + ) + TestParsing._check_expected(circuit, expected) + + with pytest.raises( + OSError, + match=r"parsing error: Error at :1:26..29: failed to resolve 'CRk' with parameter type" + r" \(float\)", + ): + Circuit.from_string("version 3.0; qubit[2] q; CRk(1.5) q[0], q[1]") + + def test_circuit_builder(self, angles: AnglesType) -> None: + for angle, expected in angles: + builder = CircuitBuilder(2) + builder.Rx(0, angle).Rn(0, 1, 1, 1, angle, angle).CR(0, 1, angle) + circuit = builder.to_circuit() + TestParsing._check_expected(circuit, expected) + + builder = CircuitBuilder(2) + for i, k in enumerate([0, 1, -1, 2, 4]): + builder.CRk(0, 1, k) + theta_expected = cast("Float", cast("Instruction", builder.ir.statements[i]).arguments[-1]) + assert theta_expected.value == normalize_angle(2 * pi / 2**k) + + with pytest.warns(UserWarning, match=r"value of parameter 'k' is not an integer: got instead."): + builder.CRk(0, 1, 1.5) + + @pytest.mark.parametrize( + ("cq_string", "expected"), + [ + ("version 3; qubit q; inv.X q", [Rn(0, 1.0, 0.0, 0.0, pi, -1.5707963)]), + ("version 3; qubit q; pow(1.0/2).Rn(1.0, 0.0, 0.0, 2 * pi, pi) q", [X(0)]), + ("version 3; qubit q; pow(2).X q", [Rn(0, 1.0, 0.0, 0.0, 0.0, pi)]), + ("version 3; qubit q; pow(4).X q", [Rx(0, 0.0)]), + ("version 3; qubit[2] q; ctrl.Rx(-pi) q[0], q[1]", [ControlledGate(0, Rx(1, pi))]), + ], + ids=["inv", "pow-1/2", "pow-2", "pow-4", "ctrl"], + ) + def test_gate_modifiers(self, cq_string: str, expected: list[Gate]) -> None: + circuit = Circuit.from_string(cq_string) + assert circuit.ir.statements == expected + + +class TestMerging: + def test_merge_rotation_gates(self) -> None: + circuit = CircuitBuilder(1).Rx(0, -pi).Rn(0, 1, 0, 0, 0, pi / 2).to_circuit() + circuit.merge(merger=SingleQubitGatesMerger()) + assert circuit.ir.statements[0] == X(0) + + circuit = CircuitBuilder(1).Ry(0, -pi).Ry(0, -DELTA).to_circuit() + circuit.merge(merger=SingleQubitGatesMerger()) + assert circuit.ir.statements[0] == Ry(0, pi - DELTA) + + circuit = CircuitBuilder(1).Rz(0, pi).Rz(0, pi / 2).to_circuit() + circuit.merge(merger=SingleQubitGatesMerger()) + assert circuit.ir.statements[0] == Rz(0, -pi / 2) diff --git a/test/test_registers.py b/tests/test_registers.py similarity index 81% rename from test/test_registers.py rename to tests/test_registers.py index a356f25b..81af6cc2 100644 --- a/test/test_registers.py +++ b/tests/test_registers.py @@ -4,7 +4,7 @@ def test_qubit_variable_b_and_bit_variable_q() -> None: - qc = Circuit.from_string( + circuit = Circuit.from_string( """ version 3.0 @@ -19,10 +19,10 @@ def test_qubit_variable_b_and_bit_variable_q() -> None: q[0] = measure b[0] """, ) - qc.merge(merger=SingleQubitGatesMerger()) - qc.decompose(decomposer=McKayDecomposer()) + circuit.merge(merger=SingleQubitGatesMerger()) + circuit.decompose(decomposer=McKayDecomposer()) assert ( - str(qc) + str(circuit) == """version 3.0 qubit[2] q diff --git a/test/test_replacer.py b/tests/test_replacer.py similarity index 92% rename from test/test_replacer.py rename to tests/test_replacer.py index 0f0b5e39..e98e1fee 100644 --- a/test/test_replacer.py +++ b/tests/test_replacer.py @@ -1,11 +1,15 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import pytest from opensquirrel import CNOT, Y90, CircuitBuilder, H, I, X -from opensquirrel.ir import BlochSphereRotation, Gate -from opensquirrel.passes.decomposer import Decomposer -from opensquirrel.passes.decomposer.general_decomposer import check_gate_replacement, decompose, replace +from opensquirrel.ir.semantics import BlochSphereRotation +from opensquirrel.passes.decomposer.general_decomposer import Decomposer, check_gate_replacement, decompose, replace + +if TYPE_CHECKING: + from opensquirrel.ir import Gate class TestCheckGateReplacement: diff --git a/test/utils/test_matrix_expander.py b/tests/utils/test_matrix_expander.py similarity index 92% rename from test/utils/test_matrix_expander.py rename to tests/utils/test_matrix_expander.py index 413c5803..4b16f3b3 100644 --- a/test/utils/test_matrix_expander.py +++ b/tests/utils/test_matrix_expander.py @@ -1,8 +1,8 @@ -import math +from math import pi import numpy as np -from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate, MatrixGate from opensquirrel.utils import get_matrix @@ -20,7 +20,7 @@ def test_bloch_sphere_rotation() -> None: def test_controlled_gate() -> None: - gate = ControlledGate(2, BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=math.pi, phase=math.pi / 2)) + gate = ControlledGate(2, BlochSphereRotation(qubit=0, axis=(1, 0, 0), angle=pi, phase=pi / 2)) np.testing.assert_almost_equal( get_matrix(gate, 3), [ diff --git a/test/writer/test_writer.py b/tests/writer/test_writer.py similarity index 91% rename from test/writer/test_writer.py rename to tests/writer/test_writer.py index 78b4760a..28b63227 100644 --- a/test/writer/test_writer.py +++ b/tests/writer/test_writer.py @@ -1,5 +1,6 @@ -from opensquirrel import CircuitBuilder, writer -from opensquirrel.ir import BlochSphereRotation, ControlledGate, MatrixGate +from opensquirrel import CircuitBuilder +from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate, MatrixGate +from opensquirrel.writer import writer def test_circuit_without_bits() -> None: @@ -105,8 +106,8 @@ def test_swap() -> None: def test_anonymous_gate() -> None: builder = CircuitBuilder(2, 2) builder.H(0) - builder.ir.add_gate(BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23)) - builder.ir.add_gate(ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23))) + builder.ir.add_gate(BlochSphereRotation(0, axis=(1, 1, 1), angle=1.23, phase=0.0)) + builder.ir.add_gate(ControlledGate(0, BlochSphereRotation(1, axis=(1, 1, 1), angle=1.23, phase=0.0))) builder.ir.add_gate(MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1])) builder.CR(0, 1, 1.234) assert ( diff --git a/tox.ini b/tox.ini index 404e2717..79bfcda6 100644 --- a/tox.ini +++ b/tox.ini @@ -5,30 +5,32 @@ toxworkdir = /var/tmp/opensquirrel/.tox [testenv] skip_install = true -allowlist_externals = poetry +allowlist_externals = uv parallel_show_output = true ignore_errors = true +setenv = + UV_USE_ACTIVE_ENV = 1 commands_pre = - poetry install + uv sync --group export [testenv:lint] description = run linters commands = - poetry run ruff check - poetry run ruff format --check + uv run ruff check + uv run ruff format --check [testenv:type] description = run mypy commands = - poetry run mypy opensquirrel test --strict + uv run mypy opensquirrel tests --strict [testenv:fix] description = run fixing linters commands = - poetry run ruff check --fix - poetry run ruff format + uv run ruff check --fix + uv run ruff format [testenv:test] description = run unit tests commands = - poetry run pytest . -vv + uv run pytest . -vv diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..e2687e43 --- /dev/null +++ b/uv.lock @@ -0,0 +1,3414 @@ +version = 1 +revision = 3 +requires-python = "==3.9.*" + +[[package]] +name = "adaptive" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, + { name = "loky" }, + { name = "scipy" }, + { name = "sortedcollections" }, + { name = "sortedcontainers" }, + { name = "typing-extensions" }, + { name = "versioningit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/6b/42c5e5e5e4698665409ff2fc99ed0e74f52f91039faf33f79af89bf6319c/adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294", size = 112954, upload-time = "2025-03-03T22:38:51.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/7a5458e66104b3526ed8ae99bbdf4d2da860d4c8023bab42e514779ea54a/adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637", size = 125750, upload-time = "2025-03-03T22:38:49.946Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup" }, + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, +] + +[[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/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" }, +] + +[[package]] +name = "arrow" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "types-python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960, upload-time = "2023-09-30T22:11:18.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419, upload-time = "2023-09-30T22:11:16.072Z" }, +] + +[[package]] +name = "asciitree" +version = "0.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e", size = 3951, upload-time = "2016-09-05T19:10:42.681Z" } + +[[package]] +name = "asteval" +version = "1.0.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f0/ad92c4bc565918713f9a4b54f06d06ec370e48079fdb50cf432befabee8b/asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f", size = 52079, upload-time = "2025-01-19T21:44:03.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/ac/19dbba27e891f39feb4170b884da449ee2699ef4ebb88eefeda364bbbbcf/asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc", size = 22406, upload-time = "2025-01-19T21:44:01.323Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, +] + +[[package]] +name = "async-lru" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069, upload-time = "2025-03-16T17:25:35.422Z" }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, +] + +[[package]] +name = "backrefs" +version = "5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "broadbean" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "schema" }, + { name = "versioningit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/c9/c64ec69941544561f503fe092f2f32b9117252b2dd22b90368787d2316a2/broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c", size = 44803, upload-time = "2024-03-06T22:15:44.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/4d/2b3b4b35456176182d45cdf977fdea80bf71be563f4074536ec3436eed9c/broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7", size = 36755, upload-time = "2024-03-06T22:15:42.41Z" }, +] + +[[package]] +name = "cachetools" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/89/817ad5d0411f136c484d535952aef74af9b25e0d99e90cdffbe121e6d628/cachetools-6.1.0.tar.gz", hash = "sha256:b4c4f404392848db3ce7aac34950d17be4d864da4b8b66911008e430bc544587", size = 30714, upload-time = "2025-06-16T18:51:03.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/f0/2ef431fe4141f5e334759d73e81120492b23b2824336883a91ac04ba710b/cachetools-6.1.0-py3-none-any.whl", hash = "sha256:1c7bb3cf9193deaf3508b7c5f2a79986c13ea38965c5adcff1f84519cf39163e", size = 11189, upload-time = "2025-06-16T18:51:01.514Z" }, +] + +[[package]] +name = "certifi" +version = "2025.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, +] + +[[package]] +name = "cf-xarray" +version = "0.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/a1/58cc7f4c72c144fcb720395c244fd36df33ddc0bdd67fbb1c38037cd068c/cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb", size = 506942, upload-time = "2024-07-17T10:07:46.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/ce/d69d52c9962f1245d5648242dc23b334df1f3be073aee0a7dcf841f90cf7/cf_xarray-0.9.4-py3-none-any.whl", hash = "sha256:9f7acf73fe14bed66680bdb135682656ea8451e1f6c59221bc31a912b62ea46a", size = 65950, upload-time = "2024-07-17T10:07:44.511Z" }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220, upload-time = "2024-09-04T20:45:01.577Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605, upload-time = "2024-09-04T20:45:03.837Z" }, + { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910, upload-time = "2024-09-04T20:45:05.315Z" }, + { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200, upload-time = "2024-09-04T20:45:06.903Z" }, + { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565, upload-time = "2024-09-04T20:45:08.975Z" }, + { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635, upload-time = "2024-09-04T20:45:10.64Z" }, + { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218, upload-time = "2024-09-04T20:45:12.366Z" }, + { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486, upload-time = "2024-09-04T20:45:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911, upload-time = "2024-09-04T20:45:15.696Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632, upload-time = "2024-09-04T20:45:17.284Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820, upload-time = "2024-09-04T20:45:18.762Z" }, + { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290, upload-time = "2024-09-04T20:45:20.226Z" }, +] + +[[package]] +name = "cftime" +version = "1.6.4.post1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/c8/1155d1d58003105307c7e5985f422ae5bcb2ca0cbc553cc828f3c5a934a7/cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f", size = 54631, upload-time = "2024-10-22T18:48:34.194Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/42/faa2137f268211ab3977997494cc1fa7f2883578cc2c42c3e8daf27ec375/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652700130dbcca3ae36dbb5b61ff360e62aa09fabcabc42ec521091a14389901", size = 1254873, upload-time = "2024-10-22T18:48:28.813Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e1/365495f6224ed2af76aa46d0a2e2611991486ef1a4655e7b2a48df706899/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a7fb6cc541a027dab37fdeb695f8a2b21cd7d200be606f81b5abc38f2391e2", size = 1290854, upload-time = "2024-10-22T18:48:30.21Z" }, + { url = "https://files.pythonhosted.org/packages/74/ee/9bc0c5d2f2be8305c3eae4b1f7b2fc88f314170c4c5a8cb80634311b68ed/cftime-1.6.4.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc2c0abe2dbd147e1b1e6d0f3de19a5ea8b04956acc204830fd8418066090989", size = 1315314, upload-time = "2024-10-22T18:48:31.63Z" }, + { url = "https://files.pythonhosted.org/packages/33/c3/7bfe4945e2cb42bf88c090dfc2141e7cef5f296ee046738a469d2ce43b6c/cftime-1.6.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:0ee2f5af8643aa1b47b7e388763a1a6e0dc05558cd2902cffb9cbcf954397648", size = 189177, upload-time = "2024-10-22T18:48:32.888Z" }, +] + +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/ca/9a0983dd5c8e9733565cf3db4df2b0a2e9a82659fd8aa2a868ac6e4a991f/charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05", size = 207520, upload-time = "2025-08-09T07:57:11.026Z" }, + { url = "https://files.pythonhosted.org/packages/39/c6/99271dc37243a4f925b09090493fb96c9333d7992c6187f5cfe5312008d2/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e", size = 147307, upload-time = "2025-08-09T07:57:12.4Z" }, + { url = "https://files.pythonhosted.org/packages/e4/69/132eab043356bba06eb333cc2cc60c6340857d0a2e4ca6dc2b51312886b3/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99", size = 160448, upload-time = "2025-08-09T07:57:13.712Z" }, + { url = "https://files.pythonhosted.org/packages/04/9a/914d294daa4809c57667b77470533e65def9c0be1ef8b4c1183a99170e9d/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7", size = 157758, upload-time = "2025-08-09T07:57:14.979Z" }, + { url = "https://files.pythonhosted.org/packages/b0/a8/6f5bcf1bcf63cb45625f7c5cadca026121ff8a6c8a3256d8d8cd59302663/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7", size = 152487, upload-time = "2025-08-09T07:57:16.332Z" }, + { url = "https://files.pythonhosted.org/packages/c4/72/d3d0e9592f4e504f9dea08b8db270821c909558c353dc3b457ed2509f2fb/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19", size = 150054, upload-time = "2025-08-09T07:57:17.576Z" }, + { url = "https://files.pythonhosted.org/packages/20/30/5f64fe3981677fe63fa987b80e6c01042eb5ff653ff7cec1b7bd9268e54e/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312", size = 161703, upload-time = "2025-08-09T07:57:20.012Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ef/dd08b2cac9284fd59e70f7d97382c33a3d0a926e45b15fc21b3308324ffd/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc", size = 159096, upload-time = "2025-08-09T07:57:21.329Z" }, + { url = "https://files.pythonhosted.org/packages/45/8c/dcef87cfc2b3f002a6478f38906f9040302c68aebe21468090e39cde1445/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34", size = 153852, upload-time = "2025-08-09T07:57:22.608Z" }, + { url = "https://files.pythonhosted.org/packages/63/86/9cbd533bd37883d467fcd1bd491b3547a3532d0fbb46de2b99feeebf185e/charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432", size = 99840, upload-time = "2025-08-09T07:57:23.883Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d6/7e805c8e5c46ff9729c49950acc4ee0aeb55efb8b3a56687658ad10c3216/charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca", size = 107438, upload-time = "2025-08-09T07:57:25.287Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/39/069100b84d7418bc358d81669d5748efb14b9cceacd2f9c75f550424132f/cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64", size = 22113, upload-time = "2025-01-14T17:02:05.085Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e", size = 20992, upload-time = "2025-01-14T17:02:02.417Z" }, +] + +[[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 = "columnar" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "toolz" }, + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/0d/a0b2fd781050d29c9df64ac6df30b5f18b775724b79779f56fc5a8298fe9/Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72", size = 11386, upload-time = "2021-12-27T21:58:56.123Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/00/a17a5657bf090b9dffdb310ac273c553a38f9252f60224da9fe62d9b60e9/Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798", size = 11845, upload-time = "2021-12-27T21:58:54.388Z" }, +] + +[[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 = "contourpy" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370, upload-time = "2024-08-27T21:00:03.328Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167, upload-time = "2024-08-27T20:56:10.034Z" }, + { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279, upload-time = "2024-08-27T20:56:15.41Z" }, + { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519, upload-time = "2024-08-27T20:56:21.813Z" }, + { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922, upload-time = "2024-08-27T20:56:26.983Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017, upload-time = "2024-08-27T20:56:42.246Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773, upload-time = "2024-08-27T20:56:58.58Z" }, + { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353, upload-time = "2024-08-27T20:57:02.718Z" }, + { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817, upload-time = "2024-08-27T20:57:06.328Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099, upload-time = "2024-08-27T20:57:28.58Z" }, + { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838, upload-time = "2024-08-27T20:57:32.913Z" }, +] + +[[package]] +name = "coverage" +version = "7.10.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/4e/08b493f1f1d8a5182df0044acc970799b58a8d289608e0d891a03e9d269a/coverage-7.10.4.tar.gz", hash = "sha256:25f5130af6c8e7297fd14634955ba9e1697f47143f289e2a23284177c0061d27", size = 823798, upload-time = "2025-08-17T00:26:43.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/61/4e38d86d31a268778d69bb3fd1fc88e0c7a78ffdee48f2b5d9e028a3dce5/coverage-7.10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48fd4d52600c2a9d5622e52dfae674a7845c5e1dceaf68b88c99feb511fbcfd6", size = 216393, upload-time = "2025-08-17T00:26:22.648Z" }, + { url = "https://files.pythonhosted.org/packages/17/16/5c2fdb1d213f57e0ff107738397aff68582fa90a6575ca165b49eae5a809/coverage-7.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:56217b470d09d69e6b7dcae38200f95e389a77db801cb129101697a4553b18b6", size = 216779, upload-time = "2025-08-17T00:26:24.422Z" }, + { url = "https://files.pythonhosted.org/packages/26/99/3aca6b4028e3667ccfbaef9cfd9dca8d85eb14deee7868373cc48cbee553/coverage-7.10.4-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:44ac3f21a6e28c5ff7f7a47bca5f87885f6a1e623e637899125ba47acd87334d", size = 243214, upload-time = "2025-08-17T00:26:26.468Z" }, + { url = "https://files.pythonhosted.org/packages/0d/33/27a7d2557f85001b2edb6a2f14037851f87ca7d69a4ca79460e1859f4c7f/coverage-7.10.4-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3387739d72c84d17b4d2f7348749cac2e6700e7152026912b60998ee9a40066b", size = 245037, upload-time = "2025-08-17T00:26:28.071Z" }, + { url = "https://files.pythonhosted.org/packages/6d/68/92c0e18d36d34c774cb5053c9413188c27f8b3f9587e315193a30c1695ce/coverage-7.10.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f111ff20d9a6348e0125be892608e33408dd268f73b020940dfa8511ad05503", size = 246809, upload-time = "2025-08-17T00:26:29.828Z" }, + { url = "https://files.pythonhosted.org/packages/03/22/f0618594010903401e782459c100755af3f275ea86d49b0d4f3afa3658d9/coverage-7.10.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:01a852f0a9859734b018a3f483cc962d0b381d48d350b1a0c47d618c73a0c398", size = 244695, upload-time = "2025-08-17T00:26:31.495Z" }, + { url = "https://files.pythonhosted.org/packages/e5/45/e704923a037a4a38a3c13ae6405c31236db2d274307ab28fd1a23b961cad/coverage-7.10.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:225111dd06759ba4e37cee4c0b4f3df2b15c879e9e3c37bf986389300b9917c3", size = 242766, upload-time = "2025-08-17T00:26:33.425Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b7/4dc6f2b41aa907ae330ed841deb49c9487f6ec5072a577fc3a3b284fe855/coverage-7.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2178d4183bd1ba608f0bb12e71e55838ba1b7dbb730264f8b08de9f8ef0c27d0", size = 243723, upload-time = "2025-08-17T00:26:35.688Z" }, + { url = "https://files.pythonhosted.org/packages/b7/62/0e58abc2ce2d9a5b906dd1c08802864f756365843c413aebf0184148ddfb/coverage-7.10.4-cp39-cp39-win32.whl", hash = "sha256:93d175fe81913aee7a6ea430abbdf2a79f1d9fd451610e12e334e4fe3264f563", size = 218927, upload-time = "2025-08-17T00:26:37.725Z" }, + { url = "https://files.pythonhosted.org/packages/a4/3e/4668a5b5601450d9c8aa71cc4f7e6c6c259350e577c758b894443598322a/coverage-7.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:2221a823404bb941c7721cf0ef55ac6ee5c25d905beb60c0bba5e5e85415d353", size = 219838, upload-time = "2025-08-17T00:26:39.786Z" }, + { url = "https://files.pythonhosted.org/packages/bb/78/983efd23200921d9edb6bd40512e1aa04af553d7d5a171e50f9b2b45d109/coverage-7.10.4-py3-none-any.whl", hash = "sha256:065d75447228d05121e5c938ca8f0e91eed60a1eb2d1258d42d5084fecfc3302", size = 208365, upload-time = "2025-08-17T00:26:41.479Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "dask" +version = "2024.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/2e/568a422d907745a3a897a732c83d05a3923d8cfa2511a6abea2a0e19994e/dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee", size = 9895684, upload-time = "2024-08-06T20:23:54.464Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309", size = 1233681, upload-time = "2024-08-06T20:23:42.258Z" }, +] + +[[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.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/d4/722d0bcc7986172ac2ef3c979ad56a1030e3afd44ced136d45f8142b1f4a/debugpy-1.8.16.tar.gz", hash = "sha256:31e69a1feb1cf6b51efbed3f6c9b0ef03bc46ff050679c4be7ea6d2e23540870", size = 1643809, upload-time = "2025-08-06T18:00:02.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/40/acdad5944e508d5e936979ad3e96e56b78ba6d7fa75aaffc4426cb921e12/debugpy-1.8.16-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:135ccd2b1161bade72a7a099c9208811c137a150839e970aeaf121c2467debe8", size = 2086696, upload-time = "2025-08-06T18:00:36.469Z" }, + { url = "https://files.pythonhosted.org/packages/2d/eb/8d6a2cf3b29e272b5dfebe6f384f8457977d4fd7a02dab2cae4d421dbae2/debugpy-1.8.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:211238306331a9089e253fd997213bc4a4c65f949271057d6695953254095376", size = 3557329, upload-time = "2025-08-06T18:00:38.189Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/63b9cc4d3c6980c702911c0f6a9748933ce4e4f16ae0ec4fdef7690f6662/debugpy-1.8.16-cp39-cp39-win32.whl", hash = "sha256:88eb9ffdfb59bf63835d146c183d6dba1f722b3ae2a5f4b9fc03e925b3358922", size = 5235114, upload-time = "2025-08-06T18:00:39.586Z" }, + { url = "https://files.pythonhosted.org/packages/05/cf/80947f57e0ef4d6e33ec9c3a109a542678eba465723bf8b599719238eb93/debugpy-1.8.16-cp39-cp39-win_amd64.whl", hash = "sha256:c2c47c2e52b40449552843b913786499efcc3dbc21d6c49287d939cd0dbc49fd", size = 5266799, upload-time = "2025-08-06T18:00:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/52/57/ecc9ae29fa5b2d90107cd1d9bf8ed19aacb74b2264d986ae9d44fe9bdf87/debugpy-1.8.16-py2.py3-none-any.whl", hash = "sha256:19c9521962475b87da6f673514f7fd610328757ec993bf7ec0d8c96f9a325f9e", size = 5287700, upload-time = "2025-08-06T18:00:42.333Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "deepdiff" +version = "8.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "orderly-set" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/03/65/57d5047a03700ccb3eaab9d86837168701b1527fdd2bd9fe7a212bee83b1/deepdiff-8.6.0.tar.gz", hash = "sha256:6197216c2d777c3106a9989055c230e25848e599b26dcbcdc66226bd8d7fe901", size = 631801, upload-time = "2025-08-08T19:00:27.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/4d/4c9ba906175430d6f1cb40b7aa90673720c2c4b3fcea03a3719b1906f983/deepdiff-8.6.0-py3-none-any.whl", hash = "sha256:db80677a434ac1f84147fd1598e93f1beb06d467e107af45fcf77cf8a681169f", size = 91121, upload-time = "2025-08-08T19:00:25.575Z" }, +] + +[[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 = "dill" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, +] + +[[package]] +name = "docopt-ng" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/50/8d6806cf13138127692ae6ff79ddeb4e25eb3b0bcc3c1bd033e7e04531a9/docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7", size = 32264, upload-time = "2023-05-30T20:46:25.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/4a/c3b77fc1a24510b08918b43a473410c0168f6e657118807015f1f1edceea/docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9", size = 16689, upload-time = "2023-05-30T20:46:45.294Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, +] + +[[package]] +name = "fasteners" +version = "0.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/18/7881a99ba5244bfc82f06017316ffe93217dbbbcfa52b887caa1d4f2a6d3/fasteners-0.20.tar.gz", hash = "sha256:55dce8792a41b56f727ba6e123fcaee77fd87e638a6863cec00007bfea84c8d8", size = 25087, upload-time = "2025-08-11T10:19:37.785Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ac/e5d886f892666d2d1e5cb8c1a41146e1d79ae8896477b1153a21711d3b44/fasteners-0.20-py3-none-any.whl", hash = "sha256:9422c40d1e350e4259f509fb2e608d6bc43c0136f79a00db1b49046029d0b3b7", size = 18702, upload-time = "2025-08-11T10:19:35.716Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, +] + +[[package]] +name = "filelock" +version = "3.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, +] + +[[package]] +name = "fonttools" +version = "4.59.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/7f/29c9c3fe4246f6ad96fee52b88d0dc3a863c7563b0afc959e36d78b965dc/fonttools-4.59.1.tar.gz", hash = "sha256:74995b402ad09822a4c8002438e54940d9f1ecda898d2bb057729d7da983e4cb", size = 3534394, upload-time = "2025-08-14T16:28:14.266Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/df/63d586609002057d3e214f7d45c0c2bf0a5c5030f61d282dc39943546199/fonttools-4.59.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:58a8844f96cff35860647a65345bfca87f47a2494bfb4bef754e58c082511443", size = 4822086, upload-time = "2025-08-14T16:27:58.659Z" }, + { url = "https://files.pythonhosted.org/packages/d2/82/d019c4499202c22fc6d8d122aad1175d2541289be76b8888546ac1f71d4a/fonttools-4.59.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f021cea6e36410874763f4a517a5e2d6ac36ca8f95521f3a9fdaad0fe73dc", size = 4755144, upload-time = "2025-08-14T16:28:00.71Z" }, + { url = "https://files.pythonhosted.org/packages/7d/32/130226b1da79fc67f623707bd20394ea87ca1ea9d858fa0e8e7d38847ce7/fonttools-4.59.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf5fb864f80061a40c1747e0dbc4f6e738de58dd6675b07eb80bd06a93b063c4", size = 4804680, upload-time = "2025-08-14T16:28:02.676Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8c/73a4af65e2318d63719354730a700c21a9e271e74789c83d9d5d77621fcf/fonttools-4.59.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c29ea087843e27a7cffc78406d32a5abf166d92afde7890394e9e079c9b4dbe9", size = 4914623, upload-time = "2025-08-14T16:28:04.917Z" }, + { url = "https://files.pythonhosted.org/packages/a8/af/0763b655c9b713c70a9081a322e5411c4c85222471d0b7d6730cfcccbae9/fonttools-4.59.1-cp39-cp39-win32.whl", hash = "sha256:a960b09ff50c2e87864e83f352e5a90bcf1ad5233df579b1124660e1643de272", size = 1485466, upload-time = "2025-08-14T16:28:07.195Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b2/c2bb086f0525b6c458f2b72b994341f8ae1d5dac556e3073c70b2c973685/fonttools-4.59.1-cp39-cp39-win_amd64.whl", hash = "sha256:e3680884189e2b7c3549f6d304376e64711fd15118e4b1ae81940cb6b1eaa267", size = 1529833, upload-time = "2025-08-14T16:28:09.88Z" }, + { url = "https://files.pythonhosted.org/packages/0f/64/9d606e66d498917cd7a2ff24f558010d42d6fd4576d9dd57f0bd98333f5a/fonttools-4.59.1-py3-none-any.whl", hash = "sha256:647db657073672a8330608970a984d51573557f328030566521bc03415535042", size = 1130094, upload-time = "2025-08-14T16:28:12.048Z" }, +] + +[[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 = "fsspec" +version = "2025.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/02/0835e6ab9cfc03916fe3f78c0956cfcdb6ff2669ffa6651065d5ebf7fc98/fsspec-2025.7.0.tar.gz", hash = "sha256:786120687ffa54b8283d942929540d8bc5ccfa820deb555a2b5d0ed2b737bf58", size = 304432, upload-time = "2025-07-15T16:05:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" }, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "griffe" +version = "1.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/ca/29f36e00c74844ae50d139cf5a8b1751887b2f4d5023af65d460268ad7aa/griffe-1.12.1.tar.gz", hash = "sha256:29f5a6114c0aeda7d9c86a570f736883f8a2c5b38b57323d56b3d1c000565567", size = 411863, upload-time = "2025-08-14T21:08:15.38Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/f2/4fab6c3e5bcaf38a44cc8a974d2752eaad4c129e45d6533d926a30edd133/griffe-1.12.1-py3-none-any.whl", hash = "sha256:2d7c12334de00089c31905424a00abcfd931b45b8b516967f224133903d302cc", size = 138940, upload-time = "2025-08-14T21:08:13.382Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "h5netcdf" +version = "1.6.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h5py" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/a1/e3ca842fd0895fcfb21c754a18fd8cd7362d1625b3a93408c982c38f4ec1/h5netcdf-1.6.4.tar.gz", hash = "sha256:83db7e5eb9b822bed2c79050d6cf8f36ecbd1039f4252bd90fab200edcaaf67d", size = 65832, upload-time = "2025-08-05T06:26:56.707Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/f5/ac71e692aad076d50a0f5f073204346d5f5577daffd21bb4b72c485f8959/h5netcdf-1.6.4-py3-none-any.whl", hash = "sha256:e0018e6a918f2bef2a4aa7b470a952b8a0b5d16a5893d59bea56524cc6207fcf", size = 50683, upload-time = "2025-08-05T06:26:55.644Z" }, +] + +[[package]] +name = "h5py" +version = "3.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/57/dfb3c5c3f1bf5f5ef2e59a22dec4ff1f3d7408b55bfcefcfb0ea69ef21c6/h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4", size = 424323, upload-time = "2025-06-06T14:06:15.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/40/b423b57696514e05aa7bb06150ef96667d0e0006cc6de7ab52c71734ab51/h5py-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:573c33ad056ac7c1ab6d567b6db9df3ffc401045e3f605736218f96c1e0490c6", size = 4326368, upload-time = "2025-06-06T14:06:00.782Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/e088f89f04fdbe57ddf9de377f857158d3daa38cf5d0fb20ef9bd489e313/h5py-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccbe17dc187c0c64178f1a10aa274ed3a57d055117588942b8a08793cc448216", size = 4559686, upload-time = "2025-06-06T14:06:07.416Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e4/fb8032d0e5480b1db9b419b5b50737b61bb3c7187c49d809975d62129fb0/h5py-3.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f025cf30ae738c4c4e38c7439a761a71ccfcce04c2b87b2a2ac64e8c5171d43", size = 2877166, upload-time = "2025-06-06T14:06:13.05Z" }, +] + +[[package]] +name = "hickle" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h5py" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/42/09a543153c1609b656f5c8e33210d6bdd1b7045c0d6e33bc96bb9afbb704/hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e", size = 117601, upload-time = "2024-03-30T09:15:08.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/71/d765d1406e2ca52b81f7ff4be6ce99413cb76d831edabf772c667789ff7b/hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad", size = 107970, upload-time = "2024-03-30T09:15:05.094Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httplib2" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/ad/2371116b22d616c194aa25ec410c9c6c37f23599dcd590502b74db197584/httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81", size = 351116, upload-time = "2023-03-21T22:29:37.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc", size = 96854, upload-time = "2023-03-21T22:29:35.683Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, +] + +[[package]] +name = "ifaddr" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/ac/fb4c578f4a3256561548cd825646680edcadb9440f3f68add95ade1eb791/ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4", size = 10485, upload-time = "2022-06-15T21:40:27.561Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/1f/19ebc343cc71a7ffa78f17018535adc5cbdd87afb31d7c34874680148b32/ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748", size = 12314, upload-time = "2022-06-15T21:40:25.756Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + +[[package]] +name = "ipykernel" +version = "6.30.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260, upload-time = "2025-08-04T15:47:35.018Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484, upload-time = "2025-08-04T15:47:32.622Z" }, +] + +[[package]] +name = "ipython" +version = "8.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "exceptiongroup" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330, upload-time = "2023-11-27T09:58:34.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161, upload-time = "2023-11-27T09:58:30.538Z" }, +] + +[[package]] +name = "ipywidgets" +version = "8.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721, upload-time = "2025-05-05T12:42:03.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806, upload-time = "2025-05-05T12:41:56.833Z" }, +] + +[[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.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, +] + +[[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 = "joblib" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload-time = "2025-05-23T12:04:37.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload-time = "2025-05-23T12:04:35.124Z" }, +] + +[[package]] +name = "json5" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/ae/929aee9619e9eba9015207a9d2c1c54db18311da7eb4dcf6d41ad6f0eb67/json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990", size = 52191, upload-time = "2025-08-12T19:47:42.583Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/e2/05328bd2621be49a6fed9e3030b1e51a2d04537d3f816d211b9cc53c5262/json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5", size = 36119, upload-time = "2025-08-12T19:47:41.131Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, +] + +[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-specifications" +version = "2025.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, +] + +[[package]] +name = "jupyter" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipywidgets" }, + { name = "jupyter-console" }, + { name = "jupyterlab" }, + { name = "nbconvert" }, + { name = "notebook" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959, upload-time = "2024-08-30T07:15:48.299Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657, upload-time = "2024-08-30T07:15:47.045Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, +] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "pyzmq" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363, upload-time = "2023-03-06T14:13:31.02Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510, upload-time = "2023-03-06T14:13:28.229Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +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/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196, upload-time = "2025-02-03T17:23:41.485Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430, upload-time = "2025-02-03T17:23:38.643Z" }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/7c/12f68daf85b469b4896d5e4a629baa33c806d61de75ac5b39d8ef27ec4a2/jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d", size = 69371, upload-time = "2025-07-18T21:35:16.585Z" }, +] + +[[package]] +name = "jupyter-server" +version = "2.16.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" }, + { 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/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177, upload-time = "2025-05-12T16:44:46.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904, upload-time = "2025-05-12T16:44:43.335Z" }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430, upload-time = "2024-03-12T14:37:03.049Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656, upload-time = "2024-03-12T14:37:00.708Z" }, +] + +[[package]] +name = "jupyterlab" +version = "4.4.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru" }, + { name = "httpx" }, + { name = "importlib-metadata" }, + { name = "ipykernel" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyter-lsp" }, + { name = "jupyter-server" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "packaging" }, + { name = "setuptools" }, + { name = "tomli" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/5c/14f0852233d60d30bf0f22a817d6c20ac555d73526cc915274f97c07a2b9/jupyterlab-4.4.6.tar.gz", hash = "sha256:e0b720ff5392846bdbc01745f32f29f4d001c071a4bff94d8b516ba89b5a4157", size = 23040936, upload-time = "2025-08-15T11:44:15.915Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/38/6182d63f39428821e705e86fba61704fc69769a24ca5a9578c2c04986c9a/jupyterlab-4.4.6-py3-none-any.whl", hash = "sha256:e877e930f46dde2e3ee9da36a935c6cd4fdb15aa7440519d0fde696f9fadb833", size = 12268564, upload-time = "2025-08-15T11:44:11.42Z" }, +] + +[[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 = "jupyterlab-server" +version = "2.27.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173, upload-time = "2024-07-16T17:02:04.149Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700, upload-time = "2024-07-16T17:02:01.115Z" }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149, upload-time = "2025-05-05T12:32:31.004Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286, upload-time = "2024-09-04T09:39:44.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966, upload-time = "2024-09-04T09:05:59.855Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044, upload-time = "2024-09-04T09:06:02.16Z" }, + { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879, upload-time = "2024-09-04T09:06:03.908Z" }, + { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751, upload-time = "2024-09-04T09:06:05.58Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990, upload-time = "2024-09-04T09:06:08.126Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122, upload-time = "2024-09-04T09:06:10.345Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126, upload-time = "2024-09-04T09:06:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313, upload-time = "2024-09-04T09:06:14.562Z" }, + { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784, upload-time = "2024-09-04T09:06:16.767Z" }, + { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988, upload-time = "2024-09-04T09:06:18.705Z" }, + { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980, upload-time = "2024-09-04T09:06:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847, upload-time = "2024-09-04T09:06:21.407Z" }, + { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494, upload-time = "2024-09-04T09:06:22.648Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321, upload-time = "2024-09-04T09:06:47.557Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776, upload-time = "2024-09-04T09:06:49.235Z" }, + { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984, upload-time = "2024-09-04T09:06:51.336Z" }, + { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811, upload-time = "2024-09-04T09:06:53.078Z" }, +] + +[[package]] +name = "lark" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, +] + +[[package]] +name = "lazy-loader" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431, upload-time = "2024-04-05T13:03:12.261Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097, upload-time = "2024-04-05T13:03:10.514Z" }, +] + +[[package]] +name = "libqasm" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/c337cfcce696b5feedf9a55459e87cc13db829df65444dfe14f2a18168d0/libqasm-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ad0b673314569a90c0c96e81b18af0bc0ea41a5a3b9822eb508d2e76b37a6ed", size = 1270899, upload-time = "2025-07-28T14:02:45.997Z" }, + { url = "https://files.pythonhosted.org/packages/c0/18/bddc69b5def3ef5a5682580a4e09adc3324fdd60d57e712bc74bea4cd8e9/libqasm-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acd1b45de6385253fe7479d173b4d5ee808baa2cff651810ddd5b56928ca467", size = 1142062, upload-time = "2025-07-28T14:02:52.05Z" }, + { url = "https://files.pythonhosted.org/packages/c0/fd/10d1d11631056e0a9b204b9f833295837cc90f92ab7a2e94d6d2bdcda708/libqasm-1.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac38d6592f755ad6ed21bcd3d7fe7b7cd941746a0595e985cbd778803368d79f", size = 1767766, upload-time = "2025-07-28T14:02:57.573Z" }, + { url = "https://files.pythonhosted.org/packages/29/a1/267eabad6868ac78b9b8d8f5c16de88c6c8a95c2a45d7ba034c6f061aef8/libqasm-1.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c89e8c223ab3eec42fc5d1975410333d644daa94a9f0adc6e24103d43abc86a", size = 1926335, upload-time = "2025-07-28T14:03:04.539Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0e/2df22d1fe01eff56b674e64d5577fc413841c9e043d8e6d0cf9b417305b7/libqasm-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9163a438f0a566e94048d62c824a6728b7328e8a5cc8eb48d93c5ddb289d9ee3", size = 812858, upload-time = "2025-07-28T14:03:10.037Z" }, +] + +[[package]] +name = "lmfit" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asteval" }, + { name = "dill" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "uncertainties" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/e5/a35942aed2de95e228728c34609b51fe3ec9182398eac50d288eef313aa2/lmfit-1.3.4.tar.gz", hash = "sha256:3c22c28c43f717f6c5b4a3bd81e893a2149739c26a592c046f2e33c23cfbe497", size = 630720, upload-time = "2025-07-19T20:09:01.876Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl", hash = "sha256:afce1593b42324d37ae2908249b0c55445e2f4c1a0474ff706a8e2f7b5d949fa", size = 97662, upload-time = "2025-07-19T20:09:00.32Z" }, +] + +[[package]] +name = "locket" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, +] + +[[package]] +name = "loky" +version = "3.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/b1/059b0b3e5d98cb5085cb8611bf6e89bc36999dc056d5470a784bfdc74e49/loky-3.5.5.tar.gz", hash = "sha256:0730c7180a35972532f22fe09be600db9d69fed3552aad0410c570acbb47cf41", size = 101789, upload-time = "2025-05-23T08:58:51.242Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/3e/4c14113f8b9f8109a437f7148cca584147a611e1b0fc5012b87c7db9876b/loky-3.5.5-py3-none-any.whl", hash = "sha256:0cd7655df3579c4d2f5cf9c6c6f222f44a3cffe6a27e29edc10a573c138995af", size = 56038, upload-time = "2025-05-23T08:58:49.335Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/ed/60eb6fa2923602fba988d9ca7c5cdbd7cf25faa795162ed538b527a35411/lxml-6.0.0.tar.gz", hash = "sha256:032e65120339d44cdc3efc326c9f660f5f7205f3a535c1fdbf898b29ea01fb72", size = 4096938, upload-time = "2025-06-26T16:28:19.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/aa/b0a8ee233c00f2f437dbb6e7bd2df115a996d8211b7d03f4ab029b8e3378/lxml-6.0.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:b372d10d17a701b0945f67be58fae4664fd056b85e0ff0fbc1e6c951cdbc0512", size = 5292694, upload-time = "2025-06-26T16:27:34.037Z" }, + { url = "https://files.pythonhosted.org/packages/53/7f/e6f377489b2ac4289418b879c34ed664e5a1174b2a91590936ec4174e773/lxml-6.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a674c0948789e9136d69065cc28009c1b1874c6ea340253db58be7622ce6398f", size = 5009177, upload-time = "2025-06-28T18:47:39.377Z" }, + { url = "https://files.pythonhosted.org/packages/c6/05/ae239e997374680741b768044545251a29abc21ada42248638dbed749a0a/lxml-6.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:edf6e4c8fe14dfe316939711e3ece3f9a20760aabf686051b537a7562f4da91a", size = 5163787, upload-time = "2025-06-28T18:47:42.452Z" }, + { url = "https://files.pythonhosted.org/packages/2a/da/4f27222570d008fd2386e19d6923af6e64c317ee6116bbb2b98247f98f31/lxml-6.0.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:048a930eb4572829604982e39a0c7289ab5dc8abc7fc9f5aabd6fbc08c154e93", size = 5075755, upload-time = "2025-06-26T16:27:36.611Z" }, + { url = "https://files.pythonhosted.org/packages/1f/65/12552caf7b3e3b9b9aba12349370dc53a36d4058e4ed482811f1d262deee/lxml-6.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0b5fa5eda84057a4f1bbb4bb77a8c28ff20ae7ce211588d698ae453e13c6281", size = 5297070, upload-time = "2025-06-26T16:27:39.232Z" }, + { url = "https://files.pythonhosted.org/packages/3e/6a/f053a8369fdf4e3b8127a6ffb079c519167e684e956a1281392c5c3679b6/lxml-6.0.0-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:c352fc8f36f7e9727db17adbf93f82499457b3d7e5511368569b4c5bd155a922", size = 4779864, upload-time = "2025-06-26T16:27:41.713Z" }, + { url = "https://files.pythonhosted.org/packages/df/7b/b2a392ad34ce37a17d1cf3aec303e15125768061cf0e355a92d292d20d37/lxml-6.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8db5dc617cb937ae17ff3403c3a70a7de9df4852a046f93e71edaec678f721d0", size = 5122039, upload-time = "2025-06-26T16:27:44.252Z" }, + { url = "https://files.pythonhosted.org/packages/80/0e/6459ff8ae7d87188e1f99f11691d0f32831caa6429599c3b289de9f08b21/lxml-6.0.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:2181e4b1d07dde53986023482673c0f1fba5178ef800f9ab95ad791e8bdded6a", size = 4805117, upload-time = "2025-06-26T16:27:46.769Z" }, + { url = "https://files.pythonhosted.org/packages/ca/78/4186f573805ff623d28a8736788a3b29eeaf589afdcf0233de2c9bb9fc50/lxml-6.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3c98d5b24c6095e89e03d65d5c574705be3d49c0d8ca10c17a8a4b5201b72f5", size = 5322300, upload-time = "2025-06-26T16:27:49.278Z" }, + { url = "https://files.pythonhosted.org/packages/e8/97/352e07992901473529c8e19dbfdba6430ba6a37f6b46a4d0fa93321f8fee/lxml-6.0.0-cp39-cp39-win32.whl", hash = "sha256:04d67ceee6db4bcb92987ccb16e53bef6b42ced872509f333c04fb58a3315256", size = 3615832, upload-time = "2025-06-26T16:27:51.728Z" }, + { url = "https://files.pythonhosted.org/packages/71/93/8f3b880e2618e548fb0ca157349abb526d81cb4f01ef5ea3a0f22bd4d0df/lxml-6.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e0b1520ef900e9ef62e392dd3d7ae4f5fa224d1dd62897a792cf353eb20b6cae", size = 4038551, upload-time = "2025-06-26T16:27:54.193Z" }, + { url = "https://files.pythonhosted.org/packages/e7/8a/046cbf5b262dd2858c6e65833339100fd5f1c017b37b26bc47c92d4584d7/lxml-6.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:e35e8aaaf3981489f42884b59726693de32dabfc438ac10ef4eb3409961fd402", size = 3684237, upload-time = "2025-06-26T16:27:57.117Z" }, + { url = "https://files.pythonhosted.org/packages/09/8a/1410b9e1ec43f606f9aac0661d09892509d86032e229711798906e1b5e7a/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ae74f7c762270196d2dda56f8dd7309411f08a4084ff2dfcc0b095a218df2e06", size = 4210839, upload-time = "2025-06-28T18:47:50.768Z" }, + { url = "https://files.pythonhosted.org/packages/79/cb/6696ce0d1712c5ae94b18bdf225086a5fb04b23938ac4d2011b323b3860b/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:059c4cbf3973a621b62ea3132934ae737da2c132a788e6cfb9b08d63a0ef73f9", size = 4321235, upload-time = "2025-06-28T18:47:53.338Z" }, + { url = "https://files.pythonhosted.org/packages/f3/98/04997f61d720cf320a0daee66b3096e3a3b57453e15549c14b87058c2acd/lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f090a9bc0ce8da51a5632092f98a7e7f84bca26f33d161a98b57f7fb0004ca", size = 4265071, upload-time = "2025-06-26T16:28:12.367Z" }, + { url = "https://files.pythonhosted.org/packages/e6/86/e5f6fa80154a5f5bf2c1e89d6265892299942edeb115081ca72afe7c7199/lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9da022c14baeec36edfcc8daf0e281e2f55b950249a455776f0d1adeeada4734", size = 4406816, upload-time = "2025-06-26T16:28:14.744Z" }, + { url = "https://files.pythonhosted.org/packages/18/a6/ae69e0e6f5fb6293eb8cbfbf8a259e37d71608bbae3658a768dd26b69f3e/lxml-6.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a55da151d0b0c6ab176b4e761670ac0e2667817a1e0dadd04a01d0561a219349", size = 3515499, upload-time = "2025-06-26T16:28:17.035Z" }, +] + +[[package]] +name = "markdown" +version = "3.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344, upload-time = "2024-10-18T15:21:43.721Z" }, + { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389, upload-time = "2024-10-18T15:21:44.666Z" }, + { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607, upload-time = "2024-10-18T15:21:45.452Z" }, + { url = "https://files.pythonhosted.org/packages/53/8f/f339c98a178f3c1e545622206b40986a4c3307fe39f70ccd3d9df9a9e425/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", size = 20728, upload-time = "2024-10-18T15:21:46.295Z" }, + { url = "https://files.pythonhosted.org/packages/1a/03/8496a1a78308456dbd50b23a385c69b41f2e9661c67ea1329849a598a8f9/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", size = 20826, upload-time = "2024-10-18T15:21:47.134Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cf/0a490a4bd363048c3022f2f475c8c05582179bb179defcee4766fb3dcc18/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", size = 21843, upload-time = "2024-10-18T15:21:48.334Z" }, + { url = "https://files.pythonhosted.org/packages/19/a3/34187a78613920dfd3cdf68ef6ce5e99c4f3417f035694074beb8848cd77/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", size = 21219, upload-time = "2024-10-18T15:21:49.587Z" }, + { url = "https://files.pythonhosted.org/packages/17/d8/5811082f85bb88410ad7e452263af048d685669bbbfb7b595e8689152498/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", size = 20946, upload-time = "2024-10-18T15:21:50.441Z" }, + { url = "https://files.pythonhosted.org/packages/7c/31/bd635fb5989440d9365c5e3c47556cfea121c7803f5034ac843e8f37c2f2/MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", size = 15063, upload-time = "2024-10-18T15:21:51.385Z" }, + { url = "https://files.pythonhosted.org/packages/b3/73/085399401383ce949f727afec55ec3abd76648d04b9f22e1c0e99cb4bec3/MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", size = 15506, upload-time = "2024-10-18T15:21:52.974Z" }, +] + +[[package]] +name = "marshmallow" +version = "3.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "importlib-resources" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529, upload-time = "2024-12-13T05:56:34.184Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838, upload-time = "2024-12-13T05:56:06.792Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492, upload-time = "2024-12-13T05:56:09.964Z" }, + { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500, upload-time = "2024-12-13T05:56:13.55Z" }, + { url = "https://files.pythonhosted.org/packages/57/68/c2feb4667adbf882ffa4b3e0ac9967f848980d9f8b5bebd86644aa67ce6a/matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac", size = 7822962, upload-time = "2024-12-13T05:56:16.358Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1f/e709c6ec7b5321e6568769baa288c7178e60a93a9da9e682b39450da0e29/matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db", size = 8313423, upload-time = "2024-12-13T05:56:26.719Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/5a1f868782cd13f053a679984e222007ecff654a9bfbac6b27a65f4eeb05/matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865", size = 7854624, upload-time = "2024-12-13T05:56:29.359Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "methodtools" +version = "0.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wirerope" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/3b/c21b74ac17befdf17b286494b02221b7a84affb1d410ff86e38ba0e14b13/methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba", size = 3586, upload-time = "2023-02-05T13:17:54.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/4b/6497ffb463b1b75e04b348ef31070606d43e3c503fa295383538ded999c9/methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11", size = 4038, upload-time = "2024-08-23T09:18:03.631Z" }, +] + +[[package]] +name = "mike" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "importlib-resources" }, + { name = "jinja2" }, + { name = "mkdocs" }, + { name = "pyparsing" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "verspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/f7/2933f1a1fb0e0f077d5d6a92c6c7f8a54e6128241f116dff4df8b6050bbf/mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810", size = 38119, upload-time = "2024-08-13T05:02:14.167Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a", size = 33754, upload-time = "2024-08-13T05:02:12.515Z" }, +] + +[[package]] +name = "mistune" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload-time = "2025-03-19T14:27:23.451Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload-time = "2025-05-20T13:09:09.886Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload-time = "2025-05-20T13:09:08.237Z" }, +] + +[[package]] +name = "mkdocs-build-plantuml-plugin" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httplib2" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/09/e2a651a1b98aa2685b8dcd1c8b65e6082254e584d51c9f9cddfb86223159/mkdocs-build-plantuml-plugin-1.9.0.tar.gz", hash = "sha256:b0468a2024741ff5c39d5307e34e54e11225ee0da378ef2bc35ed0e0f1cfc99d", size = 8728, upload-time = "2023-11-10T19:24:38.534Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/2d/31e3941ccc1cb7acb5df12f536658b03e07c0f44ace7067f5e71aedd0189/mkdocs_build_plantuml_plugin-1.9.0-py3-none-any.whl", hash = "sha256:ba738b698b69dfba8fbd49f92336a17cbe9df16c7b4d384b85528058301ec0c3", size = 9129, upload-time = "2023-11-10T19:24:37.173Z" }, +] + +[[package]] +name = "mkdocs-exclude" +version = "1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/b5/3a8e289282c9e8d7003f8a2f53d673d4fdaa81d493dc6966092d9985b6fc/mkdocs-exclude-1.0.2.tar.gz", hash = "sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51", size = 6751, upload-time = "2019-02-20T23:34:12.81Z" } + +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/85/2d634462fd59136197d3126ca431ffb666f412e3db38fd5ce3a60566303e/mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc", size = 7539, upload-time = "2023-04-27T19:48:04.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/0f/1e55b3fd490ad2cecb6e7b31892d27cb9fc4218ec1dab780440ba8579e74/mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea", size = 8380, upload-time = "2023-04-27T19:48:07.059Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mkdocs-glightbox" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/5a/0bc456397ba0acc684b5b1daa4ca232ed717938fd37198251d8bcc4053bf/mkdocs-glightbox-0.4.0.tar.gz", hash = "sha256:392b34207bf95991071a16d5f8916d1d2f2cd5d5bb59ae2997485ccd778c70d9", size = 32010, upload-time = "2024-05-06T14:31:43.063Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/72/b0c2128bb569c732c11ae8e49a777089e77d83c05946062caa19b841e6fb/mkdocs_glightbox-0.4.0-py3-none-any.whl", hash = "sha256:e0107beee75d3eb7380ac06ea2d6eac94c999eaa49f8c3cbab0e7be2ac006ccf", size = 31154, upload-time = "2024-05-06T14:31:41.011Z" }, +] + +[[package]] +name = "mkdocs-literate-nav" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/5f/99aa379b305cd1c2084d42db3d26f6de0ea9bf2cc1d10ed17f61aff35b9a/mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75", size = 17419, upload-time = "2025-03-18T21:53:09.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/84/b5b14d2745e4dd1a90115186284e9ee1b4d0863104011ab46abb7355a1c3/mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630", size = 13261, upload-time = "2025-03-18T21:53:08.1Z" }, +] + +[[package]] +name = "mkdocs-material" +version = "9.6.17" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "backrefs" }, + { name = "click" }, + { name = "colorama" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "mkdocs" }, + { name = "mkdocs-material-extensions" }, + { name = "paginate" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/02/51115cdda743e1551c5c13bdfaaf8c46b959acc57ba914d8ec479dd2fe1f/mkdocs_material-9.6.17.tar.gz", hash = "sha256:48ae7aec72a3f9f501a70be3fbd329c96ff5f5a385b67a1563e5ed5ce064affe", size = 4032898, upload-time = "2025-08-15T16:09:21.412Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/7c/0f0d44c92c8f3068930da495b752244bd59fd87b5b0f9571fa2d2a93aee7/mkdocs_material-9.6.17-py3-none-any.whl", hash = "sha256:221dd8b37a63f52e580bcab4a7e0290e4a6f59bd66190be9c3d40767e05f9417", size = 9229230, upload-time = "2025-08-15T16:09:18.301Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocs-render-swagger-plugin" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/0b/cf5e4e9529a8068d4b2def4b38540f7a5762283bdd5b652ee083b8a7c9c6/mkdocs_render_swagger_plugin-0.1.2-py3-none-any.whl", hash = "sha256:0340d45e12a0f1633a4b8af2eb99ea75469006ddf418ef0f1acd51ed1e4969e4", size = 5988, upload-time = "2024-05-26T19:34:44.442Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, + { name = "mkdocs-autorefs" }, + { name = "pymdown-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/0a/7e4776217d4802009c8238c75c5345e23014a4706a8414a62c0498858183/mkdocstrings-0.30.0.tar.gz", hash = "sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444", size = 106597, upload-time = "2025-07-22T23:48:45.998Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl", hash = "sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2", size = 36579, upload-time = "2025-07-22T23:48:44.152Z" }, +] + +[package.optional-dependencies] +python = [ + { name = "mkdocstrings-python" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffe" }, + { name = "mkdocs-autorefs" }, + { name = "mkdocstrings" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/7c/6dfd8ad59c0eebae167168528ed6cad00116f58ef2327686149f7b25d175/mkdocstrings_python-1.17.0.tar.gz", hash = "sha256:c6295962b60542a9c7468a3b515ce8524616ca9f8c1a38c790db4286340ba501", size = 200408, upload-time = "2025-08-14T21:18:14.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/ac/b1fcc937f4ecd372f3e857162dea67c45c1e2eedbac80447be516e3372bb/mkdocstrings_python-1.17.0-py3-none-any.whl", hash = "sha256:49903fa355dfecc5ad0b891e78ff5d25d30ffd00846952801bbe8331e123d4b0", size = 124778, upload-time = "2025-08-14T21:18:12.821Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "mypy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/cb/673e3d34e5d8de60b3a61f44f80150a738bff568cd6b7efb55742a605e98/mypy-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d1092694f166a7e56c805caaf794e0585cabdbf1df36911c414e4e9abb62ae9", size = 10992466, upload-time = "2025-07-31T07:53:57.574Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d0/fe1895836eea3a33ab801561987a10569df92f2d3d4715abf2cfeaa29cb2/mypy-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79d44f9bfb004941ebb0abe8eff6504223a9c1ac51ef967d1263c6572bbebc99", size = 10117638, upload-time = "2025-07-31T07:53:34.256Z" }, + { url = "https://files.pythonhosted.org/packages/97/f3/514aa5532303aafb95b9ca400a31054a2bd9489de166558c2baaeea9c522/mypy-1.17.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b01586eed696ec905e61bd2568f48740f7ac4a45b3a468e6423a03d3788a51a8", size = 11915673, upload-time = "2025-07-31T07:52:59.361Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c3/c0805f0edec96fe8e2c048b03769a6291523d509be8ee7f56ae922fa3882/mypy-1.17.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43808d9476c36b927fbcd0b0255ce75efe1b68a080154a38ae68a7e62de8f0f8", size = 12649022, upload-time = "2025-07-31T07:53:45.92Z" }, + { url = "https://files.pythonhosted.org/packages/45/3e/d646b5a298ada21a8512fa7e5531f664535a495efa672601702398cea2b4/mypy-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:feb8cc32d319edd5859da2cc084493b3e2ce5e49a946377663cc90f6c15fb259", size = 12895536, upload-time = "2025-07-31T07:53:06.17Z" }, + { url = "https://files.pythonhosted.org/packages/14/55/e13d0dcd276975927d1f4e9e2ec4fd409e199f01bdc671717e673cc63a22/mypy-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d7598cf74c3e16539d4e2f0b8d8c318e00041553d83d4861f87c7a72e95ac24d", size = 9512564, upload-time = "2025-07-31T07:53:12.346Z" }, + { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, +] + +[[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 = "narwhals" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/f0/b0550d9b84759f4d045fd43da2f811e8b23dc2001e38c3254456da7f3adb/narwhals-2.1.2.tar.gz", hash = "sha256:afb9597e76d5b38c2c4b7c37d27a2418b8cc8049a66b8a5aca9581c92ae8f8bf", size = 533772, upload-time = "2025-08-15T08:24:50.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/01/824fff6789ce92a53242d24b6f5f3a982df2f610c51020f934bf878d2a99/narwhals-2.1.2-py3-none-any.whl", hash = "sha256:136b2f533a4eb3245c54254f137c5d14cef5c4668cff67dc6e911a602acd3547", size = 392064, upload-time = "2025-08-15T08:24:48.788Z" }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "importlib-metadata" }, + { 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/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "netcdf4" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "cftime" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/ed/4d27fcfa40ebfdad3d2088a3de7ee48dbff7f35163e815ec1870d2a7398c/netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce", size = 835064, upload-time = "2024-10-22T19:01:25.521Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/26/b6ea7c57b160adb818be27f0967b34cf8381b190d5a61344d25746ab1a7f/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572f71459ef4b30e8554dcc4e1e6f55de515acc82a50968b48fe622244a64548", size = 9208209, upload-time = "2024-10-22T19:01:20.017Z" }, + { url = "https://files.pythonhosted.org/packages/c8/fe/3513828bb4bc48456d0e7971e04ed97632b2c9ebb7713bfdf36e9dfb7770/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f77e72281acc5f331f82271e5f7f014d46f5ca9bcaa5aafe3e46d66cee21320", size = 9062374, upload-time = "2024-10-22T19:01:22.053Z" }, + { url = "https://files.pythonhosted.org/packages/16/9c/b6adff49068fd78f72b9f3147ed3485583c573e6a9eea23f3534b8ed8374/netCDF4-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:d0fa7a9674fae8ae4877e813173c3ff7a6beee166b8730bdc847f517b282ed31", size = 7006633, upload-time = "2024-10-22T19:01:23.998Z" }, +] + +[[package]] +name = "networkx" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928, upload-time = "2023-10-28T08:41:39.364Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772, upload-time = "2023-10-28T08:41:36.945Z" }, +] + +[[package]] +name = "notebook" +version = "7.4.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, + { name = "jupyterlab" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/21/9669982f9569e7478763837e0d35b9fd9f43de0eb5ab5d6ca620b8019cfc/notebook-7.4.5.tar.gz", hash = "sha256:7c2c4ea245913c3ad8ab3e5d36b34a842c06e524556f5c2e1f5d7d08c986615e", size = 13888993, upload-time = "2025-08-05T07:40:56.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/c7/207fd1138bd82435d13b6d8640a240be4d855b8ddb41f6bf31aca5be64df/notebook-7.4.5-py3-none-any.whl", hash = "sha256:351635461aca9dad08cf8946a4216f963e2760cc1bf7b1aaaecb23afc33ec046", size = 14295193, upload-time = "2025-08-05T07:40:52.586Z" }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167, upload-time = "2024-02-14T23:35:18.353Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, +] + +[[package]] +name = "numcodecs" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/1b/1f1d880e29e719c7c6205065d1afbc91114c0d91935ac419faa43e5e08b0/numcodecs-0.12.1.tar.gz", hash = "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e", size = 4091415, upload-time = "2023-10-18T00:47:07.456Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/0f/0442e80d707b5dd2e177a9490c25b89aa6a6c44579de8ec223e78a8884da/numcodecs-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f", size = 7722207, upload-time = "2023-10-18T00:47:04.378Z" }, + { url = "https://files.pythonhosted.org/packages/77/b6/345f8648874a81232bc1a87e55a771430488a832c68f873aa6ed23a1dedf/numcodecs-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136", size = 792870, upload-time = "2023-10-18T00:47:05.879Z" }, +] + +[[package]] +name = "numpy" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, + { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, + { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, + { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" }, + { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" }, + { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" }, + { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" }, + { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" }, + { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" }, +] + +[[package]] +name = "opensquirrel" +version = "0.5.0" +source = { editable = "." } +dependencies = [ + { name = "libqasm" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "scipy" }, +] + +[package.dev-dependencies] +dev = [ + { name = "coverage" }, + { name = "ipython" }, + { name = "mypy" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "ruff" }, + { name = "sympy" }, + { name = "tox" }, +] +docs = [ + { name = "mike" }, + { name = "mkdocs" }, + { name = "mkdocs-build-plantuml-plugin" }, + { name = "mkdocs-exclude" }, + { name = "mkdocs-gen-files" }, + { name = "mkdocs-glightbox" }, + { name = "mkdocs-literate-nav" }, + { name = "mkdocs-material" }, + { name = "mkdocs-material-extensions" }, + { name = "mkdocs-render-swagger-plugin" }, + { name = "mkdocstrings", extra = ["python"] }, + { name = "pymdown-extensions" }, +] +examples = [ + { name = "jupyter" }, +] +export = [ + { name = "pyqt5-qt5", marker = "sys_platform != 'darwin'" }, + { name = "quantify-scheduler", marker = "sys_platform != 'darwin'" }, +] + +[package.metadata] +requires-dist = [ + { name = "libqasm", specifier = "==1.2.1" }, + { name = "networkx", specifier = ">=3.0.0,<4" }, + { name = "numpy", specifier = ">=1.26" }, + { name = "scipy", marker = "python_full_version < '3.10'", specifier = ">=1.11.4" }, + { name = "scipy", marker = "python_full_version >= '3.10'", specifier = ">=1.14,<2.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "coverage", specifier = ">=7.3.2,<8" }, + { name = "ipython", specifier = ">=7.12,<9.0" }, + { name = "mypy", specifier = ">=1.7.0,<2" }, + { name = "pytest", specifier = ">=7.4.3,<9.0.0" }, + { name = "pytest-cov", specifier = ">=4.1,<7.0" }, + { name = "ruff", specifier = ">=0.5,<0.13" }, + { name = "sympy", specifier = ">=1.13.1,<2" }, + { name = "tox", specifier = ">=4.24.1,<5" }, +] +docs = [ + { name = "mike", specifier = ">=2.1.3" }, + { name = "mkdocs", specifier = ">=1.5.3,<2" }, + { name = "mkdocs-build-plantuml-plugin", specifier = "==1.9.0" }, + { name = "mkdocs-exclude", specifier = "==1.0.2" }, + { name = "mkdocs-gen-files", specifier = ">=0.5.0,<0.6" }, + { name = "mkdocs-glightbox", specifier = "==0.4.0" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6.1,<0.7" }, + { name = "mkdocs-material", specifier = ">=9.4.12,<10" }, + { name = "mkdocs-material-extensions", specifier = "==1.3.1" }, + { name = "mkdocs-render-swagger-plugin", specifier = "==0.1.2" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=0.24,<0.31" }, + { name = "pymdown-extensions", specifier = ">=10.7.1,<11" }, +] +examples = [{ name = "jupyter", specifier = ">=1.0.0,<2" }] +export = [ + { name = "pyqt5-qt5", marker = "python_full_version < '3.10' and sys_platform != 'darwin'", specifier = "==5.15.2" }, + { name = "quantify-scheduler", marker = "python_full_version < '3.10' and sys_platform != 'darwin'", specifier = ">=0.18.0,<0.19" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/27/d2/c782c88b8afbf961d6972428821c302bd1e9e7bc361352172f0ca31296e2/opentelemetry_api-1.36.0.tar.gz", hash = "sha256:9a72572b9c416d004d492cbc6e61962c0501eaf945ece9b5a0f56597d8348aa0", size = 64780, upload-time = "2025-07-29T15:12:06.02Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/ee/6b08dde0a022c463b88f55ae81149584b125a42183407dc1045c486cc870/opentelemetry_api-1.36.0-py3-none-any.whl", hash = "sha256:02f20bcacf666e1333b6b1f04e647dc1d5111f86b8e510238fcc56d7762cda8c", size = 65564, upload-time = "2025-07-29T15:11:47.998Z" }, +] + +[[package]] +name = "orderly-set" +version = "5.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/88/39c83c35d5e97cc203e9e77a4f93bf87ec89cf6a22ac4818fdcc65d66584/orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce", size = 27414, upload-time = "2025-07-10T20:10:55.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/27/fb8d7338b4d551900fa3e580acbe7a0cf655d940e164cb5c00ec31961094/orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7", size = 13068, upload-time = "2025-07-10T20:10:54.377Z" }, +] + +[[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 = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload-time = "2025-07-07T19:20:04.079Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/55/66cd2b679f6a27398380eac7574bc24746128f74626a3c02b978ea00e5ce/pandas-2.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da", size = 11763000, upload-time = "2025-07-07T19:19:50.83Z" }, + { url = "https://files.pythonhosted.org/packages/ae/1c/5b9b263c80fd5e231b77df6f78cd7426d1d4ad3a4e858e85b7b3d93d0e9c/pandas-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e", size = 12361395, upload-time = "2025-07-07T19:19:53.714Z" }, + { url = "https://files.pythonhosted.org/packages/f7/74/7e817b31413fbb96366ea327d43d1926a9c48c58074e27e094e2839a0e36/pandas-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7", size = 13225086, upload-time = "2025-07-07T19:19:56.378Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0f/bc0a44b47eba2f22ae4235719a573d552ef7ad76ed3ea39ae62d554e040b/pandas-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88", size = 13871698, upload-time = "2025-07-07T19:19:58.854Z" }, + { url = "https://files.pythonhosted.org/packages/fa/cb/6c32f8fadefa4314b740fbe8f74f6a02423bd1549e7c930826df35ac3c1b/pandas-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d", size = 11357186, upload-time = "2025-07-07T19:20:01.475Z" }, +] + +[package.optional-dependencies] +output-formatting = [ + { name = "jinja2" }, + { name = "tabulate" }, +] + +[[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.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, +] + +[[package]] +name = "partd" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "locket" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "pathvalidate" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262, upload-time = "2025-06-15T09:07:20.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305, upload-time = "2025-06-15T09:07:19.117Z" }, +] + +[[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 = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, + { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, + { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, + { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, +] + +[[package]] +name = "plotly" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a0/64/850de5076f4436410e1ce4f6a69f4313ef6215dfea155f3f6559335cad29/plotly-6.3.0.tar.gz", hash = "sha256:8840a184d18ccae0f9189c2b9a2943923fd5cae7717b723f36eef78f444e5a73", size = 6923926, upload-time = "2025-08-12T20:22:14.127Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/a9/12e2dc726ba1ba775a2c6922d5d5b4488ad60bdab0888c337c194c8e6de8/plotly-6.3.0-py3-none-any.whl", hash = "sha256:7ad806edce9d3cdd882eaebaf97c0c9e252043ed1ed3d382c3e3520ec07806d4", size = 9791257, upload-time = "2025-08-12T20:22:09.205Z" }, +] + +[[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 = "pooch" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353, upload-time = "2024-06-06T16:53:46.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574, upload-time = "2024-06-06T16:53:44.343Z" }, +] + +[[package]] +name = "prometheus-client" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746, upload-time = "2025-06-02T14:29:01.152Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694, upload-time = "2025-06-02T14:29:00.068Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, +] + +[[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 = "pyarrow" +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/a8/197f989b9a75e59b4ca0db6a13c56f19a0ad8a298c68da9cc28145e0bb97/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b4d97e297741796fead24867a8dabf86c87e4584ccc03167e4a811f50fdf74d", size = 41067862, upload-time = "2025-07-18T00:57:07.587Z" }, + { url = "https://files.pythonhosted.org/packages/fa/82/6ecfa89487b35aa21accb014b64e0a6b814cc860d5e3170287bf5135c7d8/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:898afce396b80fdda05e3086b4256f8677c671f7b1d27a6976fa011d3fd0a86e", size = 42747508, upload-time = "2025-07-18T00:57:13.917Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b7/ba252f399bbf3addc731e8643c05532cf32e74cebb5e32f8f7409bc243cf/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4", size = 43345293, upload-time = "2025-07-18T00:57:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0a/a20819795bd702b9486f536a8eeb70a6aa64046fce32071c19ec8230dbaa/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0c4e75d13eb76295a49e0ea056eb18dbd87d81450bfeb8afa19a7e5a75ae2ad7", size = 45060670, upload-time = "2025-07-18T00:57:24.477Z" }, + { url = "https://files.pythonhosted.org/packages/10/15/6b30e77872012bbfe8265d42a01d5b3c17ef0ac0f2fae531ad91b6a6c02e/pyarrow-21.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdc4c17afda4dab2a9c0b79148a43a7f4e1094916b3e18d8975bfd6d6d52241f", size = 26227521, upload-time = "2025-07-18T00:57:29.119Z" }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, +] + +[[package]] +name = "pydantic" +version = "2.11.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/9a/2e70d6388d7cda488ae38f57bc2f7b03ee442fbcf0d75d848304ac7e405b/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb", size = 1898467, upload-time = "2025-04-23T18:32:31.119Z" }, + { url = "https://files.pythonhosted.org/packages/ff/2e/1568934feb43370c1ffb78a77f0baaa5a8b6897513e7a91051af707ffdc4/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7", size = 1983041, upload-time = "2025-04-23T18:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/01/1a/1a1118f38ab64eac2f6269eb8c120ab915be30e387bb561e3af904b12499/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4", size = 2136503, upload-time = "2025-04-23T18:32:35.519Z" }, + { url = "https://files.pythonhosted.org/packages/5c/da/44754d1d7ae0f22d6d3ce6c6b1486fc07ac2c524ed8f6eca636e2e1ee49b/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b", size = 2736079, upload-time = "2025-04-23T18:32:37.659Z" }, + { url = "https://files.pythonhosted.org/packages/4d/98/f43cd89172220ec5aa86654967b22d862146bc4d736b1350b4c41e7c9c03/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3", size = 2006508, upload-time = "2025-04-23T18:32:39.637Z" }, + { url = "https://files.pythonhosted.org/packages/2b/cc/f77e8e242171d2158309f830f7d5d07e0531b756106f36bc18712dc439df/pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a", size = 2113693, upload-time = "2025-04-23T18:32:41.818Z" }, + { url = "https://files.pythonhosted.org/packages/54/7a/7be6a7bd43e0a47c147ba7fbf124fe8aaf1200bc587da925509641113b2d/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782", size = 2074224, upload-time = "2025-04-23T18:32:44.033Z" }, + { url = "https://files.pythonhosted.org/packages/2a/07/31cf8fadffbb03be1cb520850e00a8490c0927ec456e8293cafda0726184/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9", size = 2245403, upload-time = "2025-04-23T18:32:45.836Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8d/bbaf4c6721b668d44f01861f297eb01c9b35f612f6b8e14173cb204e6240/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e", size = 2242331, upload-time = "2025-04-23T18:32:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/bb/93/3cc157026bca8f5006250e74515119fcaa6d6858aceee8f67ab6dc548c16/pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9", size = 1910571, upload-time = "2025-04-23T18:32:49.401Z" }, + { url = "https://files.pythonhosted.org/packages/5b/90/7edc3b2a0d9f0dda8806c04e511a67b0b7a41d2187e2003673a996fb4310/pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3", size = 1956504, upload-time = "2025-04-23T18:32:51.287Z" }, + { url = "https://files.pythonhosted.org/packages/d8/60/bc06fa9027c7006cc6dd21e48dbf39076dc39d9abbaf718a1604973a9670/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d", size = 1892858, upload-time = "2025-04-23T18:33:36.933Z" }, + { url = "https://files.pythonhosted.org/packages/f2/40/9d03997d9518816c68b4dfccb88969756b9146031b61cd37f781c74c9b6a/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535", size = 2068498, upload-time = "2025-04-23T18:33:38.997Z" }, + { url = "https://files.pythonhosted.org/packages/d8/62/d490198d05d2d86672dc269f52579cad7261ced64c2df213d5c16e0aecb1/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d", size = 2108428, upload-time = "2025-04-23T18:33:41.18Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ec/4cd215534fd10b8549015f12ea650a1a973da20ce46430b68fc3185573e8/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6", size = 2069854, upload-time = "2025-04-23T18:33:43.446Z" }, + { url = "https://files.pythonhosted.org/packages/1a/1a/abbd63d47e1d9b0d632fee6bb15785d0889c8a6e0a6c3b5a8e28ac1ec5d2/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca", size = 2237859, upload-time = "2025-04-23T18:33:45.56Z" }, + { url = "https://files.pythonhosted.org/packages/80/1c/fa883643429908b1c90598fd2642af8839efd1d835b65af1f75fba4d94fe/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039", size = 2239059, upload-time = "2025-04-23T18:33:47.735Z" }, + { url = "https://files.pythonhosted.org/packages/d4/29/3cade8a924a61f60ccfa10842f75eb12787e1440e2b8660ceffeb26685e7/pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27", size = 2066661, upload-time = "2025-04-23T18:33:49.995Z" }, +] + +[[package]] +name = "pydap" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "docopt-ng" }, + { name = "importlib-metadata" }, + { name = "importlib-resources" }, + { name = "jinja2" }, + { name = "lxml" }, + { name = "numpy" }, + { name = "requests" }, + { name = "webob" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/77e0556cee5a0ec6462b3e1d5fae943831147018f676d5105fd13a43f819/pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab", size = 4385073, upload-time = "2024-08-16T20:42:35.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/86/78e74c4d1ce2ad79420edf8dbe50034f6e98c35b83f3a55a9c0a83f25114/pydap-3.5-py3-none-any.whl", hash = "sha256:e157aefdbc26657ef531ecea73907bbf09a503499bfefada2f0ad5f3aaff4021", size = 2380842, upload-time = "2024-08-16T20:42:33.563Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pymdown-extensions" +version = "10.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277, upload-time = "2025-07-28T16:19:34.167Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178, upload-time = "2025-07-28T16:19:31.401Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, +] + +[[package]] +name = "pyproject-api" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710, upload-time = "2025-05-12T14:41:58.025Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158, upload-time = "2025-05-12T14:41:56.217Z" }, +] + +[[package]] +name = "pyqt5" +version = "5.15.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyqt5-qt5" }, + { name = "pyqt5-sip" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103, upload-time = "2024-07-19T08:39:40.561Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308, upload-time = "2024-07-19T08:39:46.932Z" }, + { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864, upload-time = "2024-07-19T08:39:53.572Z" }, +] + +[[package]] +name = "pyqt5-qt5" +version = "5.15.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716, upload-time = "2021-03-10T13:57:39.485Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358, upload-time = "2021-03-10T14:01:17.827Z" }, + { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158, upload-time = "2021-03-10T14:05:20.868Z" }, +] + +[[package]] +name = "pyqt5-sip" +version = "12.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/79/086b50414bafa71df494398ad277d72e58229a3d1c1b1c766d12b14c2e6d/pyqt5_sip-12.17.0.tar.gz", hash = "sha256:682dadcdbd2239af9fdc0c0628e2776b820e128bec88b49b8d692fe682f90b4f", size = 104042, upload-time = "2025-02-02T17:13:11.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/63/8a934ea1f759eee60b4e0143e5b109d16560bf67593bfed76cca55799a1a/PyQt5_sip-12.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:32b03e7e77ecd7b4119eba486b0706fa59b490bcceb585f9b6ddec8a582082db", size = 268531, upload-time = "2025-02-02T17:13:06.005Z" }, + { url = "https://files.pythonhosted.org/packages/34/80/0df0cdb7b25a87346a493cedb20f6eeb0301e7fbc02ed23d9077df998291/PyQt5_sip-12.17.0-cp39-cp39-win32.whl", hash = "sha256:5b6c734f4ad28f3defac4890ed747d391d246af279200935d49953bc7d915b8c", size = 49005, upload-time = "2025-02-02T17:13:07.741Z" }, + { url = "https://files.pythonhosted.org/packages/30/f5/2fd274c4fe9513d750eecfbe0c39937a179534446e148d8b9db4255f429a/PyQt5_sip-12.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:855e8f5787d57e26a48d8c3de1220a8e92ab83be8d73966deac62fdae03ea2f9", size = 59076, upload-time = "2025-02-02T17:13:09.643Z" }, +] + +[[package]] +name = "pyqtgraph" +version = "0.13.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/d9/b62d5cddb3caa6e5145664bee5ed90223dee23ca887ed3ee479f2609e40a/pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3", size = 2343380, upload-time = "2024-04-29T02:18:58.467Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/34/5702b3b7cafe99be1d94b42f100e8cc5e6957b761fcb1cf5f72d492851da/pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a", size = 1925473, upload-time = "2024-04-29T02:18:56.206Z" }, +] + +[[package]] +name = "pyserial" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125, upload-time = "2020-11-23T03:59:15.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, +] + +[[package]] +name = "pytest-cov" +version = "6.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, +] + +[[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 = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pyvisa" +version = "1.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/77/577366efd9cff08ddfedcf14f678ff57bb1a6287ccdf157972e6d9e7b494/PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79", size = 234683, upload-time = "2023-11-22T07:33:45.658Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/a0/0e739df84e0fc61abecc6b4b70ad7aea7f5d7ee37ec504baa365c0fec9da/PyVISA-1.14.1-py3-none-any.whl", hash = "sha256:6e4dfc9b6029b4f00d0d4960348c4889c2747aa7f83276950d48a349eab36a45", size = 176651, upload-time = "2023-11-22T07:33:43.496Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837, upload-time = "2025-07-14T20:12:59.59Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187, upload-time = "2025-07-14T20:13:01.419Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162, upload-time = "2025-07-14T20:13:03.544Z" }, +] + +[[package]] +name = "pywinpty" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/df/429cc505dc5f77ab0612c4b60bca2e3dcc81f6c321844ee017d6dc0f4a95/pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1", size = 28551, upload-time = "2025-08-12T20:33:46.506Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/c6/8c73d678dd30a7a3684dab242833c7bb709722cf1ca98f9f2da6f9d15bab/pywinpty-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:007735316170ec1b6e773deadab5fe9ec4074dfdc06f27513fe87b8cfe45237d", size = 2051676, upload-time = "2025-08-12T20:36:14.63Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload-time = "2024-08-06T20:33:25.896Z" }, + { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload-time = "2024-08-06T20:33:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload-time = "2024-08-06T20:33:28.974Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614, upload-time = "2024-08-06T20:33:34.157Z" }, + { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360, upload-time = "2024-08-06T20:33:35.84Z" }, + { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006, upload-time = "2024-08-06T20:33:37.501Z" }, + { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577, upload-time = "2024-08-06T20:33:39.389Z" }, + { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593, upload-time = "2024-08-06T20:33:46.63Z" }, + { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312, upload-time = "2024-08-06T20:33:49.073Z" }, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/5f/557d2032a2f471edbcc227da724c24a1c05887b5cda1e3ae53af98b9e0a5/pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b", size = 281158, upload-time = "2025-08-03T05:05:40.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/9b/c0957041067c7724b310f22c398be46399297c12ed834c3bc42200a2756f/pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd", size = 1305432, upload-time = "2025-08-03T05:03:32.177Z" }, + { url = "https://files.pythonhosted.org/packages/8e/55/bd3a312790858f16b7def3897a0c3eb1804e974711bf7b9dcb5f47e7f82c/pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd", size = 895095, upload-time = "2025-08-03T05:03:33.918Z" }, + { url = "https://files.pythonhosted.org/packages/20/50/fc384631d8282809fb1029a4460d2fe90fa0370a0e866a8318ed75c8d3bb/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a", size = 651826, upload-time = "2025-08-03T05:03:35.818Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0a/2356305c423a975000867de56888b79e44ec2192c690ff93c3109fd78081/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5b6133c8d313bde8bd0d123c169d22525300ff164c2189f849de495e1344577", size = 839751, upload-time = "2025-08-03T05:03:37.265Z" }, + { url = "https://files.pythonhosted.org/packages/d7/1b/81e95ad256ca7e7ccd47f5294c1c6da6e2b64fbace65b84fe8a41470342e/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:58cca552567423f04d06a075f4b473e78ab5bdb906febe56bf4797633f54aa4e", size = 1641359, upload-time = "2025-08-03T05:03:38.799Z" }, + { url = "https://files.pythonhosted.org/packages/50/63/9f50ec965285f4e92c265c8f18344e46b12803666d8b73b65d254d441435/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:4b9d8e26fb600d0d69cc9933e20af08552e97cc868a183d38a5c0d661e40dfbb", size = 2020281, upload-time = "2025-08-03T05:03:40.338Z" }, + { url = "https://files.pythonhosted.org/packages/02/4a/19e3398d0dc66ad2b463e4afa1fc541d697d7bc090305f9dfb948d3dfa29/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2329f0c87f0466dce45bba32b63f47018dda5ca40a0085cc5c8558fea7d9fc55", size = 1877112, upload-time = "2025-08-03T05:03:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/bf/42/c562e9151aa90ed1d70aac381ea22a929d6b3a2ce4e1d6e2e135d34fd9c6/pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb", size = 558177, upload-time = "2025-08-03T05:03:43.979Z" }, + { url = "https://files.pythonhosted.org/packages/40/96/5c50a7d2d2b05b19994bf7336b97db254299353dd9b49b565bb71b485f03/pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686", size = 618923, upload-time = "2025-08-03T05:03:45.438Z" }, + { url = "https://files.pythonhosted.org/packages/13/33/1ec89c8f21c89d21a2eaff7def3676e21d8248d2675705e72554fb5a6f3f/pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed", size = 552358, upload-time = "2025-08-03T05:03:46.887Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f1/cdceaf9b6637570f36eee2dbd25bc5a800637cd9b4103b15fbc4b0658b82/pyzmq-27.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:05a94233fdde585eb70924a6e4929202a747eea6ed308a6171c4f1c715bbe39e", size = 1330651, upload-time = "2025-08-03T05:04:45.583Z" }, + { url = "https://files.pythonhosted.org/packages/74/5c/469d3b9315eb4d5c61c431a4ae8acdb6abb165dfa5ddbc7af639be53891c/pyzmq-27.0.1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c96702e1082eab62ae583d64c4e19c9b848359196697e536a0c57ae9bd165bd5", size = 906524, upload-time = "2025-08-03T05:04:47.904Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c0/c7a12a533a87beb1143f4a9c8f4d6f82775c04eb3ad27f664e0ef00a6189/pyzmq-27.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c9180d1f5b4b73e28b64e63cc6c4c097690f102aa14935a62d5dd7426a4e5b5a", size = 863547, upload-time = "2025-08-03T05:04:49.579Z" }, + { url = "https://files.pythonhosted.org/packages/41/78/50907d004511bd23eae03d951f3ca4e4cc2e7eb5ec8d3df70d89eca3f97c/pyzmq-27.0.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e971d8680003d0af6020713e52f92109b46fedb463916e988814e04c8133578a", size = 666797, upload-time = "2025-08-03T05:04:51.263Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/ec3388888eda39705a4cefb465452a4bca5430a3435803588ced49943fdb/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe632fa4501154d58dfbe1764a0495734d55f84eaf1feda4549a1f1ca76659e9", size = 1655601, upload-time = "2025-08-03T05:04:53.026Z" }, + { url = "https://files.pythonhosted.org/packages/84/50/170a1671a171365dda677886d42c39629a086752696ede70296b8f6224d8/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4c3874344fd5fa6d58bb51919708048ac4cab21099f40a227173cddb76b4c20b", size = 2034120, upload-time = "2025-08-03T05:04:55.323Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0a/f06841495e4ec33ed65588e94aff07f1dcbc6878e1611577f6b97a449068/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ec09073ed67ae236785d543df3b322282acc0bdf6d1b748c3e81f3043b21cb5", size = 1891956, upload-time = "2025-08-03T05:04:57.084Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6b/6ba945a4756e4b1ba69b909d2b040d16aff0f0edd56a60874970b8d47237/pyzmq-27.0.1-cp39-cp39-win32.whl", hash = "sha256:f44e7ea288d022d4bf93b9e79dafcb4a7aea45a3cbeae2116792904931cefccf", size = 567388, upload-time = "2025-08-03T05:04:58.704Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b4/8ffb9cfb363bc9d61c5d8d9f79a7ada572b0865dac9f4a547da901b81d76/pyzmq-27.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffe6b809a97ac6dea524b3b837d5b28743d8c2f121141056d168ff0ba8f614ef", size = 632004, upload-time = "2025-08-03T05:05:00.434Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4b/dd5c4d3bb7261efb30a909d2df447ac77393653e5c34c8a9cd536f429c3e/pyzmq-27.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:fde26267416c8478c95432c81489b53f57b0b5d24cd5c8bfaebf5bbaac4dc90c", size = 559881, upload-time = "2025-08-03T05:05:02.363Z" }, + { url = "https://files.pythonhosted.org/packages/60/8d/c0880acd2d5908eec6fe9b399f0fb630e5f203f8a69f82442d5cb2b2f46c/pyzmq-27.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d97b59cbd8a6c8b23524a8ce237ff9504d987dc07156258aa68ae06d2dd5f34d", size = 835946, upload-time = "2025-08-03T05:05:31.161Z" }, + { url = "https://files.pythonhosted.org/packages/c1/35/6b71409aa6629b3d4917b38961501898827f4fb5ddc680cc8e0cb13987f3/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:27a78bdd384dbbe7b357af95f72efe8c494306b5ec0a03c31e2d53d6763e5307", size = 799870, upload-time = "2025-08-03T05:05:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/16/f6/5d36d8f6571478f32c32f5872abd76eda052746283ca87e24cc5758f7987/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b007e5dcba684e888fbc90554cb12a2f4e492927c8c2761a80b7590209821743", size = 758371, upload-time = "2025-08-03T05:05:34.722Z" }, + { url = "https://files.pythonhosted.org/packages/6f/29/6a7b7f5d47712487d8a3516584a4a484a0147f2537228237397793b2de69/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:95594b2ceeaa94934e3e94dd7bf5f3c3659cf1a26b1fb3edcf6e42dad7e0eaf2", size = 567395, upload-time = "2025-08-03T05:05:36.701Z" }, + { url = "https://files.pythonhosted.org/packages/eb/37/c1f26d13e9d4c3bfce42fead8ff640f6c06a58decde49a6b295b9d52cefd/pyzmq-27.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:70b719a130b81dd130a57ac0ff636dc2c0127c5b35ca5467d1b67057e3c7a4d2", size = 544561, upload-time = "2025-08-03T05:05:38.608Z" }, +] + +[[package]] +name = "qblox-instruments" +version = "0.11.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "ifaddr" }, + { name = "numpy" }, + { name = "qcodes" }, + { name = "spirack" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/33/230219d1c9e969931b0c115635673f3f3c92665cb868c0a4dbcedf5e630a/qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504", size = 1350939, upload-time = "2023-11-13T21:48:24.957Z" } + +[[package]] +name = "qcodes" +version = "0.46.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "broadbean" }, + { name = "cf-xarray" }, + { name = "dask" }, + { name = "h5netcdf" }, + { name = "h5py" }, + { name = "importlib-metadata" }, + { name = "ipykernel" }, + { name = "ipython" }, + { name = "ipywidgets" }, + { name = "jsonschema" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "opentelemetry-api" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyarrow" }, + { name = "pyvisa" }, + { name = "ruamel-yaml" }, + { name = "tabulate" }, + { name = "tornado" }, + { name = "tqdm" }, + { name = "typing-extensions" }, + { name = "uncertainties" }, + { name = "versioningit" }, + { name = "websockets" }, + { name = "wrapt" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/01/45ff13476c95523079950db255da27c6fc5522f65ee12ca45ee8bd9d0bdc/qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99", size = 815980, upload-time = "2024-07-04T09:18:28.822Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/f5/d0e1f1a840dd830886908f50a0beb222e4c2d9693de76f7be5fde94823fc/qcodes-0.46.0-py3-none-any.whl", hash = "sha256:6c7de543ef6048d82fad755a8ef5c4e63f866085314e2fb69f1a839bb39d0eff", size = 976511, upload-time = "2024-07-04T09:18:24.828Z" }, +] + +[[package]] +name = "qcodes-loop" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h5py" }, + { name = "hickle" }, + { name = "ipython" }, + { name = "lazy-loader" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "qcodes" }, + { name = "versioningit" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/0b/818b0120ec1d30488f25c5d658ef3a1dd3b9895df621df09c96907e180df/qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c", size = 102955, upload-time = "2024-08-01T12:21:05.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/9c/d8ef0d68ab157eed180359ebef9cdf8f3037fd1027dd9b296a0a64a5fbfe/qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a", size = 119523, upload-time = "2024-08-01T12:21:03.831Z" }, +] + +[[package]] +name = "quantify-core" +version = "0.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "adaptive" }, + { name = "appnope" }, + { name = "dataclasses-json" }, + { name = "deepdiff" }, + { name = "dill" }, + { name = "filelock" }, + { name = "h5netcdf" }, + { name = "jsonschema" }, + { name = "lmfit" }, + { name = "matplotlib" }, + { name = "methodtools" }, + { name = "numpy" }, + { name = "pyqt5" }, + { name = "pyqtgraph" }, + { name = "qcodes" }, + { name = "qcodes-loop" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "typing-extensions" }, + { name = "uncertainties" }, + { name = "xarray", extra = ["io"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/b3/33232239a59e65d67d158ca6306c4c9131234157d10fb7b39165dafee131/quantify_core-0.9.1.tar.gz", hash = "sha256:7f3dc9677a8ff59cdcfd6311626d10983ea1f585e2adb7ba73e87e636a7fb365", size = 6125832, upload-time = "2025-08-18T11:42:42.362Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/aa/9041e063dce98a73234841623ed190d927b05ac10a599cab78e503f39a09/quantify_core-0.9.1-py3-none-any.whl", hash = "sha256:fad2dd2e8158b351419135e87ca1301b037944f0f101c86957e20866ec70d58c", size = 142244, upload-time = "2025-08-18T11:42:41.029Z" }, +] + +[[package]] +name = "quantify-scheduler" +version = "0.18.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "columnar" }, + { name = "dataclasses-json" }, + { name = "fastjsonschema" }, + { name = "jinja2" }, + { name = "matplotlib" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "pandas", extra = ["output-formatting"] }, + { name = "pathvalidate" }, + { name = "plotly" }, + { name = "pydantic" }, + { name = "qblox-instruments" }, + { name = "qcodes" }, + { name = "quantify-core" }, + { name = "rich", extra = ["jupyter"] }, + { name = "scipy" }, + { name = "xxhash" }, + { name = "zhinst" }, + { name = "zhinst-qcodes" }, + { name = "zhinst-toolkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/94/5bffb75c025b69b2cfeb540d00a4923b80e0ad04e203082810f15669add1/quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910", size = 1354801, upload-time = "2024-04-02T16:45:32.815Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/10/fbb680055c71126eb45f7ba874d1dbe57b527e777c57eb860ad334aea376/quantify_scheduler-0.18.2-py3-none-any.whl", hash = "sha256:761d1e85f53e3744a28a3e56382d162ada2face3b127e83ea0e40a050566a812", size = 337885, upload-time = "2024-04-02T16:45:30.34Z" }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[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 = "rich" +version = "14.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, +] + +[package.optional-dependencies] +jupyter = [ + { name = "ipywidgets" }, +] + +[[package]] +name = "rpds-py" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/d9/991a0dee12d9fc53ed027e26a26a64b151d77252ac477e22666b9688bc16/rpds_py-0.27.0.tar.gz", hash = "sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f", size = 27420, upload-time = "2025-08-07T08:26:39.624Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/2e/82fee0cb7142bc32a9ce586eadd24a945257c016902d575bb377ad5feb10/rpds_py-0.27.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e", size = 371495, upload-time = "2025-08-07T08:25:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b5/b421756c7e5cc1d2bb438a34b16f750363d0d87caf2bfa6f2326423c42e5/rpds_py-0.27.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451", size = 354823, upload-time = "2025-08-07T08:25:25.854Z" }, + { url = "https://files.pythonhosted.org/packages/f9/4a/63337bbabfa38d4094144d0e689758e8452372fd3e45359b806fc1b4c022/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112", size = 381538, upload-time = "2025-08-07T08:25:27.17Z" }, + { url = "https://files.pythonhosted.org/packages/33/8b/14eb61fb9a5bb830d28c548e3e67046fd04cae06c2ce6afe7f30aba7f7f0/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79af163a4b40bbd8cfd7ca86ec8b54b81121d3b213b4435ea27d6568bcba3e9d", size = 396724, upload-time = "2025-08-07T08:25:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/03/54/47faf6aa4040443b108b24ae08e9db6fe6daaa8140b696f905833f325293/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2eff8ee57c5996b0d2a07c3601fb4ce5fbc37547344a26945dd9e5cbd1ed27a", size = 517084, upload-time = "2025-08-07T08:25:29.698Z" }, + { url = "https://files.pythonhosted.org/packages/0b/88/a78dbacc9a96e3ea7e83d9bed8f272754e618c629ed6a9f8e2a506c84419/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7cf9bc4508efb18d8dff6934b602324eb9f8c6644749627ce001d6f38a490889", size = 402397, upload-time = "2025-08-07T08:25:31.21Z" }, + { url = "https://files.pythonhosted.org/packages/6b/88/268c6422c0c3a0f01bf6e79086f6e4dbc6a2e60a6e95413ad17e3392ec0a/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05284439ebe7d9f5f5a668d4d8a0a1d851d16f7d47c78e1fab968c8ad30cab04", size = 383570, upload-time = "2025-08-07T08:25:32.842Z" }, + { url = "https://files.pythonhosted.org/packages/9c/1a/34f5a2459b9752cc08e02c3845c8f570222f7dbd48c7baac4b827701a40e/rpds_py-0.27.0-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:1321bce595ad70e80f97f998db37356b2e22cf98094eba6fe91782e626da2f71", size = 401771, upload-time = "2025-08-07T08:25:34.201Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9b/16979115f2ec783ca06454a141a0f32f082763ef874675c5f756e6e76fcd/rpds_py-0.27.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:737005088449ddd3b3df5a95476ee1c2c5c669f5c30eed909548a92939c0e12d", size = 416215, upload-time = "2025-08-07T08:25:35.559Z" }, + { url = "https://files.pythonhosted.org/packages/81/0b/0305df88fb22db8efe81753ce4ec51b821555448fd94ec77ae4e5dfd57b7/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9b2a4e17bfd68536c3b801800941c95a1d4a06e3cada11c146093ba939d9638d", size = 558573, upload-time = "2025-08-07T08:25:36.935Z" }, + { url = "https://files.pythonhosted.org/packages/84/9a/c48be4da43a556495cf66d6bf71a16e8e3e22ae8e724b678e430521d0702/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dc6b0d5a1ea0318ef2def2b6a55dccf1dcaf77d605672347271ed7b829860765", size = 587956, upload-time = "2025-08-07T08:25:38.338Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/deb1111abde461330c4dad22b14347d064161fb7cb249746a06accc07633/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83", size = 554493, upload-time = "2025-08-07T08:25:39.665Z" }, + { url = "https://files.pythonhosted.org/packages/cb/16/5342d91917f26da91fc193932d9fbf422e2903aaee9bd3c6ecb4875ef17f/rpds_py-0.27.0-cp39-cp39-win32.whl", hash = "sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86", size = 218302, upload-time = "2025-08-07T08:25:41.401Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a3/0346108a47efe41b50d8781688b7fb16b18d252053486c932d10b18977c9/rpds_py-0.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6", size = 229977, upload-time = "2025-08-07T08:25:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/a8/fc/ef6386838e0e91d6ba79b741ccce6ca987e89619aa86f418fecf381eba23/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b", size = 371849, upload-time = "2025-08-07T08:26:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f8/f30394aff811bc0f13fab8d8e4b9f880fcb678234eb0af7d2c4b6232f44f/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d", size = 356437, upload-time = "2025-08-07T08:26:21.899Z" }, + { url = "https://files.pythonhosted.org/packages/87/56/ed704fc668c9abc56d3686b723e4d6f2585597daf4b68b654ade7c97930d/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49", size = 382247, upload-time = "2025-08-07T08:26:23.712Z" }, + { url = "https://files.pythonhosted.org/packages/48/55/6ef2c9b7caae3c1c360d9556a70979e16f21bfb1e94f50f481d224f3b8aa/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc662bc9375a6a394b62dfd331874c434819f10ee3902123200dbcf116963f89", size = 397223, upload-time = "2025-08-07T08:26:25.156Z" }, + { url = "https://files.pythonhosted.org/packages/63/04/8fc2059411daaca733155fc2613cc91dc728d7abe31fd0c0fa4c7ec5ff1a/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299a245537e697f28a7511d01038c310ac74e8ea213c0019e1fc65f52c0dcb23", size = 516308, upload-time = "2025-08-07T08:26:26.585Z" }, + { url = "https://files.pythonhosted.org/packages/a4/d0/b79d3fe07c47bfa989139e692f85371f5a0e1376696b173dabe7ac77b7d1/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be3964f7312ea05ed283b20f87cb533fdc555b2e428cc7be64612c0b2124f08c", size = 401967, upload-time = "2025-08-07T08:26:27.905Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b1/55014f6da5ec8029d1d7d7d2a884b9d7ad7f217e05bb9cb782f06d8209c4/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33ba649a6e55ae3808e4c39e01580dc9a9b0d5b02e77b66bb86ef117922b1264", size = 384584, upload-time = "2025-08-07T08:26:29.251Z" }, + { url = "https://files.pythonhosted.org/packages/86/34/5c5c1a8550ac172dd6cd53925c321363d94b2a1f0b3173743dbbfd87b8ec/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:81f81bbd7cdb4bdc418c09a73809abeda8f263a6bf8f9c7f93ed98b5597af39d", size = 401879, upload-time = "2025-08-07T08:26:30.598Z" }, + { url = "https://files.pythonhosted.org/packages/35/07/009bbc659388c4c5a256f05f56df207633cda2f5d61a8d54c50c427e435e/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11e8e28c0ba0373d052818b600474cfee2fafa6c9f36c8587d217b13ee28ca7d", size = 416908, upload-time = "2025-08-07T08:26:32.074Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cc/8949c13dc5a05d955cb88909bfac4004805974dec7b0d02543de55e43272/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e3acb9c16530362aeaef4e84d57db357002dc5cbfac9a23414c3e73c08301ab2", size = 559105, upload-time = "2025-08-07T08:26:33.53Z" }, + { url = "https://files.pythonhosted.org/packages/ea/40/574da2033b01d6e2e7fa3b021993321565c6634f9d0021707d210ce35b58/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2e307cb5f66c59ede95c00e93cd84190a5b7f3533d7953690b2036780622ba81", size = 588335, upload-time = "2025-08-07T08:26:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/1d/83/72ed1ce357d8c63bde0bba2458a502e7cc4e150e272139161e1d205a9d67/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f09c9d4c26fa79c1bad927efb05aca2391350b8e61c38cbc0d7d3c814e463124", size = 555094, upload-time = "2025-08-07T08:26:36.838Z" }, + { url = "https://files.pythonhosted.org/packages/6f/15/fc639de53b3798340233f37959d252311b30d1834b65a02741e3373407fa/rpds_py-0.27.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af22763a0a1eff106426a6e1f13c4582e0d0ad89c1493ab6c058236174cd6c6a", size = 230031, upload-time = "2025-08-07T08:26:38.332Z" }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload-time = "2025-08-19T11:15:10.694Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702, upload-time = "2025-08-19T11:15:07.696Z" }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload-time = "2024-10-20T10:10:56.22Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/09/932360f30ad1b7b79f08757e0a6fb8c5392a52cdcc182779158fe66d25ac/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45", size = 636120, upload-time = "2024-10-20T10:13:12.84Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2a/5b27602e7a4344c1334e26bf4739746206b7a60a8acdba33a61473468b73/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519", size = 724914, upload-time = "2024-10-20T10:13:14.605Z" }, + { url = "https://files.pythonhosted.org/packages/da/1c/23497017c554fc06ff5701b29355522cff850f626337fff35d9ab352cb18/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7", size = 689072, upload-time = "2024-10-20T10:13:15.939Z" }, + { url = "https://files.pythonhosted.org/packages/68/e6/f3d4ff3223f9ea49c3b7169ec0268e42bd49f87c70c0e3e853895e4a7ae2/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285", size = 667091, upload-time = "2024-10-21T11:26:52.274Z" }, + { url = "https://files.pythonhosted.org/packages/84/62/ead07043527642491e5011b143f44b81ef80f1025a96069b7210e0f2f0f3/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed", size = 699111, upload-time = "2024-10-21T11:26:54.294Z" }, + { url = "https://files.pythonhosted.org/packages/52/b3/fe4d84446f7e4887e3bea7ceff0a7df23790b5ed625f830e79ace88ebefb/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7", size = 666365, upload-time = "2024-12-11T19:58:20.444Z" }, + { url = "https://files.pythonhosted.org/packages/6e/b3/7feb99a00bfaa5c6868617bb7651308afde85e5a0b23cd187fe5de65feeb/ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12", size = 100863, upload-time = "2024-10-20T10:13:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/93/07/de635108684b7a5bb06e432b0930c5a04b6c59efe73bd966d8db3cc208f2/ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b", size = 118653, upload-time = "2024-10-20T10:13:18.289Z" }, +] + +[[package]] +name = "ruff" +version = "0.12.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/45/2e403fa7007816b5fbb324cb4f8ed3c7402a927a0a0cb2b6279879a8bfdc/ruff-0.12.9.tar.gz", hash = "sha256:fbd94b2e3c623f659962934e52c2bea6fc6da11f667a427a368adaf3af2c866a", size = 5254702, upload-time = "2025-08-14T16:08:55.2Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/20/53bf098537adb7b6a97d98fcdebf6e916fcd11b2e21d15f8c171507909cc/ruff-0.12.9-py3-none-linux_armv6l.whl", hash = "sha256:fcebc6c79fcae3f220d05585229463621f5dbf24d79fdc4936d9302e177cfa3e", size = 11759705, upload-time = "2025-08-14T16:08:12.968Z" }, + { url = "https://files.pythonhosted.org/packages/20/4d/c764ee423002aac1ec66b9d541285dd29d2c0640a8086c87de59ebbe80d5/ruff-0.12.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aed9d15f8c5755c0e74467731a007fcad41f19bcce41cd75f768bbd687f8535f", size = 12527042, upload-time = "2025-08-14T16:08:16.54Z" }, + { url = "https://files.pythonhosted.org/packages/8b/45/cfcdf6d3eb5fc78a5b419e7e616d6ccba0013dc5b180522920af2897e1be/ruff-0.12.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5b15ea354c6ff0d7423814ba6d44be2807644d0c05e9ed60caca87e963e93f70", size = 11724457, upload-time = "2025-08-14T16:08:18.686Z" }, + { url = "https://files.pythonhosted.org/packages/72/e6/44615c754b55662200c48bebb02196dbb14111b6e266ab071b7e7297b4ec/ruff-0.12.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d596c2d0393c2502eaabfef723bd74ca35348a8dac4267d18a94910087807c53", size = 11949446, upload-time = "2025-08-14T16:08:21.059Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d1/9b7d46625d617c7df520d40d5ac6cdcdf20cbccb88fad4b5ecd476a6bb8d/ruff-0.12.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b15599931a1a7a03c388b9c5df1bfa62be7ede6eb7ef753b272381f39c3d0ff", size = 11566350, upload-time = "2025-08-14T16:08:23.433Z" }, + { url = "https://files.pythonhosted.org/packages/59/20/b73132f66f2856bc29d2d263c6ca457f8476b0bbbe064dac3ac3337a270f/ruff-0.12.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d02faa2977fb6f3f32ddb7828e212b7dd499c59eb896ae6c03ea5c303575756", size = 13270430, upload-time = "2025-08-14T16:08:25.837Z" }, + { url = "https://files.pythonhosted.org/packages/a2/21/eaf3806f0a3d4c6be0a69d435646fba775b65f3f2097d54898b0fd4bb12e/ruff-0.12.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:17d5b6b0b3a25259b69ebcba87908496e6830e03acfb929ef9fd4c58675fa2ea", size = 14264717, upload-time = "2025-08-14T16:08:27.907Z" }, + { url = "https://files.pythonhosted.org/packages/d2/82/1d0c53bd37dcb582b2c521d352fbf4876b1e28bc0d8894344198f6c9950d/ruff-0.12.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72db7521860e246adbb43f6ef464dd2a532ef2ef1f5dd0d470455b8d9f1773e0", size = 13684331, upload-time = "2025-08-14T16:08:30.352Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2f/1c5cf6d8f656306d42a686f1e207f71d7cebdcbe7b2aa18e4e8a0cb74da3/ruff-0.12.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a03242c1522b4e0885af63320ad754d53983c9599157ee33e77d748363c561ce", size = 12739151, upload-time = "2025-08-14T16:08:32.55Z" }, + { url = "https://files.pythonhosted.org/packages/47/09/25033198bff89b24d734e6479e39b1968e4c992e82262d61cdccaf11afb9/ruff-0.12.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fc83e4e9751e6c13b5046d7162f205d0a7bac5840183c5beebf824b08a27340", size = 12954992, upload-time = "2025-08-14T16:08:34.816Z" }, + { url = "https://files.pythonhosted.org/packages/52/8e/d0dbf2f9dca66c2d7131feefc386523404014968cd6d22f057763935ab32/ruff-0.12.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:881465ed56ba4dd26a691954650de6ad389a2d1fdb130fe51ff18a25639fe4bb", size = 12899569, upload-time = "2025-08-14T16:08:36.852Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b614d7c08515b1428ed4d3f1d4e3d687deffb2479703b90237682586fa66/ruff-0.12.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:43f07a3ccfc62cdb4d3a3348bf0588358a66da756aa113e071b8ca8c3b9826af", size = 11751983, upload-time = "2025-08-14T16:08:39.314Z" }, + { url = "https://files.pythonhosted.org/packages/58/d6/383e9f818a2441b1a0ed898d7875f11273f10882f997388b2b51cb2ae8b5/ruff-0.12.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:07adb221c54b6bba24387911e5734357f042e5669fa5718920ee728aba3cbadc", size = 11538635, upload-time = "2025-08-14T16:08:41.297Z" }, + { url = "https://files.pythonhosted.org/packages/20/9c/56f869d314edaa9fc1f491706d1d8a47747b9d714130368fbd69ce9024e9/ruff-0.12.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f5cd34fabfdea3933ab85d72359f118035882a01bff15bd1d2b15261d85d5f66", size = 12534346, upload-time = "2025-08-14T16:08:43.39Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4b/d8b95c6795a6c93b439bc913ee7a94fda42bb30a79285d47b80074003ee7/ruff-0.12.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f6be1d2ca0686c54564da8e7ee9e25f93bdd6868263805f8c0b8fc6a449db6d7", size = 13017021, upload-time = "2025-08-14T16:08:45.889Z" }, + { url = "https://files.pythonhosted.org/packages/c7/c1/5f9a839a697ce1acd7af44836f7c2181cdae5accd17a5cb85fcbd694075e/ruff-0.12.9-py3-none-win32.whl", hash = "sha256:cc7a37bd2509974379d0115cc5608a1a4a6c4bff1b452ea69db83c8855d53f93", size = 11734785, upload-time = "2025-08-14T16:08:48.062Z" }, + { url = "https://files.pythonhosted.org/packages/fa/66/cdddc2d1d9a9f677520b7cfc490d234336f523d4b429c1298de359a3be08/ruff-0.12.9-py3-none-win_amd64.whl", hash = "sha256:6fb15b1977309741d7d098c8a3cb7a30bc112760a00fb6efb7abc85f00ba5908", size = 12840654, upload-time = "2025-08-14T16:08:50.158Z" }, + { url = "https://files.pythonhosted.org/packages/ac/fd/669816bc6b5b93b9586f3c1d87cd6bc05028470b3ecfebb5938252c47a35/ruff-0.12.9-py3-none-win_arm64.whl", hash = "sha256:63c8c819739d86b96d500cce885956a1a48ab056bbcbc61b747ad494b2485089", size = 11949623, upload-time = "2025-08-14T16:08:52.233Z" }, +] + +[[package]] +name = "schema" +version = "0.7.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/01/0ea2e66bad2f13271e93b729c653747614784d3ebde219679e41ccdceecd/schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807", size = 44245, upload-time = "2024-05-04T10:56:17.318Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/1b/81855a88c6db2b114d5b2e9f96339190d5ee4d1b981d217fa32127bb00e0/schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde", size = 18632, upload-time = "2024-05-04T10:56:13.86Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/dc/d5457e03dc9c971ce2b0d750e33148dd060fefb8b7dc71acd6054e4bb51b/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107", size = 12693173, upload-time = "2025-01-10T08:07:42.713Z" }, + { url = "https://files.pythonhosted.org/packages/79/35/b1d2188967c3204c78fa79c9263668cf1b98060e8e58d1a730fe5b2317bb/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422", size = 13518605, upload-time = "2025-01-10T08:07:46.551Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d8/8d603bdd26601f4b07e2363032b8565ab82eb857f93d86d0f7956fcf4523/scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b", size = 11155078, upload-time = "2025-01-10T08:07:51.376Z" }, +] + +[[package]] +name = "scipy" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720, upload-time = "2024-05-23T03:29:26.079Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927, upload-time = "2024-05-23T03:21:01.95Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538, upload-time = "2024-05-23T03:21:07.634Z" }, + { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190, upload-time = "2024-05-23T03:21:14.41Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244, upload-time = "2024-05-23T03:21:21.827Z" }, + { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637, upload-time = "2024-05-23T03:21:28.729Z" }, + { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440, upload-time = "2024-05-23T03:21:35.888Z" }, +] + +[[package]] +name = "send2trash" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394, upload-time = "2024-04-07T00:01:09.267Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072, upload-time = "2024-04-07T00:01:07.438Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + +[[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 = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sortedcollections" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sortedcontainers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/00/6d749cc1f88e7f95f5442a8abb195fa607094deba9e0475affbfb7fa8c04/sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd", size = 9287, upload-time = "2021-01-18T22:15:16.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/39/c993a7d0c9dbf3aeca5008bdd00e4436ad9b7170527cef0a14634b47001f/sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c", size = 9531, upload-time = "2021-01-18T22:15:15.36Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, +] + +[[package]] +name = "spirack" +version = "0.2.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pyserial" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/f6/50b27f7abf76b282d22748ac3a503f30a78d33f9b0d091a680682079bc9b/spirack-0.2.7.tar.gz", hash = "sha256:2ba7f81ae3ab5b568027499360a178c4d762a20771717c76e06d5c1d3eed2f49", size = 48970, upload-time = "2025-08-05T07:20:40.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/42/0bfeafc3a2d6c1b1e79cc3e8ca63948179a5ae803286493198b9288c4b1d/spirack-0.2.7-py3-none-any.whl", hash = "sha256:009eda5211bb8c913d4b6465dbcd1a99b53e992a1352cd90782084740b21aab6", size = 59506, upload-time = "2025-08-05T07:20:39.844Z" }, +] + +[[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 = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload-time = "2022-10-06T17:21:48.54Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload-time = "2022-10-06T17:21:44.262Z" }, +] + +[[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 = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, +] + +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +] + +[[package]] +name = "toolz" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/0b/d80dfa675bf592f636d1ea0b835eab4ec8df6e9415d8cfd766df54456123/toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02", size = 66790, upload-time = "2024-10-04T16:17:04.001Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236", size = 56383, upload-time = "2024-10-04T16:17:01.533Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, +] + +[[package]] +name = "tox" +version = "4.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "chardet" }, + { name = "colorama" }, + { name = "filelock" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "pluggy" }, + { name = "pyproject-api" }, + { name = "tomli" }, + { name = "typing-extensions" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/01/321c98e3cc584fd101d869c85be2a8236a41a84842bc6af5c078b10c2126/tox-4.28.4.tar.gz", hash = "sha256:b5b14c6307bd8994ff1eba5074275826620325ee1a4f61316959d562bfd70b9d", size = 199692, upload-time = "2025-07-31T21:20:26.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/54/564a33093e41a585e2e997220986182c037bc998abf03a0eb4a7a67c4eff/tox-4.28.4-py3-none-any.whl", hash = "sha256:8d4ad9ee916ebbb59272bb045e154a10fa12e3bbdcf94cc5185cbdaf9b241f99", size = 174058, upload-time = "2025-07-31T21:20:24.836Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20250809" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/53/07dac71db45fb6b3c71c2fd29a87cada2239eac7ecfb318e6ebc7da00a3b/types_python_dateutil-2.9.0.20250809.tar.gz", hash = "sha256:69cbf8d15ef7a75c3801d65d63466e46ac25a0baa678d89d0a137fc31a608cc1", size = 15820, upload-time = "2025-08-09T03:14:14.109Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/5e/67312e679f612218d07fcdbd14017e6d571ce240a5ba1ad734f15a8523cc/types_python_dateutil-2.9.0.20250809-py3-none-any.whl", hash = "sha256:768890cac4f2d7fd9e0feb6f3217fce2abbfdfc0cadd38d11fba325a815e4b9f", size = 17707, upload-time = "2025-08-09T03:14:13.314Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, +] + +[[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 = "typing-inspection" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +] + +[[package]] +name = "uncertainties" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/f926a3faf468b9784bdecb8d9328b531743937ead284b2e8d406d96e8b0f/uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b", size = 143865, upload-time = "2024-07-07T22:37:06.567Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7", size = 58266, upload-time = "2024-07-07T22:37:03.942Z" }, +] + +[[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.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "versioningit" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "packaging" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/f4/bc578cc80989c572231a36cc03cc097091176fa3fb8b4e2af1deb4370eb7/versioningit-3.3.0.tar.gz", hash = "sha256:b91ad7d73e73d21220e69540f20213f2b729a1f9b35c04e9e137eaf28d2214da", size = 220280, upload-time = "2025-06-27T20:13:23.368Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl", hash = "sha256:23b1db3c4756cded9bd6b0ddec6643c261e3d0c471707da3e0b230b81ce53e4b", size = 38439, upload-time = "2025-06-27T20:13:21.927Z" }, +] + +[[package]] +name = "verspec" +version = "0.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/44/8126f9f0c44319b2efc65feaad589cadef4d77ece200ae3c9133d58464d0/verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e", size = 27123, upload-time = "2020-11-30T02:24:09.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31", size = 19640, upload-time = "2020-11-30T02:24:08.387Z" }, +] + +[[package]] +name = "virtualenv" +version = "20.34.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808, upload-time = "2025-08-13T14:24:07.464Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279, upload-time = "2025-08-13T14:24:05.111Z" }, +] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/52/7223011bb760fce8ddc53416beb65b83a3ea6d7d13738dde75eeb2c89679/watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8", size = 96390, upload-time = "2024-11-01T14:06:49.325Z" }, + { url = "https://files.pythonhosted.org/packages/9c/62/d2b21bc4e706d3a9d467561f487c2938cbd881c69f3808c43ac1ec242391/watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a", size = 88386, upload-time = "2024-11-01T14:06:50.536Z" }, + { url = "https://files.pythonhosted.org/packages/ea/22/1c90b20eda9f4132e4603a26296108728a8bfe9584b006bd05dd94548853/watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c", size = 89017, upload-time = "2024-11-01T14:06:51.717Z" }, + { url = "https://files.pythonhosted.org/packages/5b/79/69f2b0e8d3f2afd462029031baafb1b75d11bb62703f0e1022b2e54d49ee/watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa", size = 87903, upload-time = "2024-11-01T14:06:57.052Z" }, + { url = "https://files.pythonhosted.org/packages/e2/2b/dc048dd71c2e5f0f7ebc04dd7912981ec45793a03c0dc462438e0591ba5d/watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e", size = 88381, upload-time = "2024-11-01T14:06:58.193Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, +] + +[[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 = "webob" +version = "1.8.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/0b/1732085540b01f65e4e7999e15864fe14cd18b12a95731a43fd6fd11b26a/webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589", size = 279775, upload-time = "2024-10-24T03:19:20.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/bd/c336448be43d40be28e71f2e0f3caf7ccb28e2755c58f4c02c065bfe3e8e/WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9", size = 115364, upload-time = "2024-10-24T03:19:18.642Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/cb/51ba82e59b3a664df54beed8ad95517c1b4dc1a913730e7a7db778f21291/websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", size = 182094, upload-time = "2025-03-05T20:03:01.827Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0f/bf3788c03fec679bcdaef787518dbe60d12fe5615a544a6d4cf82f045193/websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", size = 181094, upload-time = "2025-03-05T20:03:03.123Z" }, + { url = "https://files.pythonhosted.org/packages/5e/da/9fb8c21edbc719b66763a571afbaf206cb6d3736d28255a46fc2fe20f902/websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", size = 181397, upload-time = "2025-03-05T20:03:04.443Z" }, + { url = "https://files.pythonhosted.org/packages/2e/65/65f379525a2719e91d9d90c38fe8b8bc62bd3c702ac651b7278609b696c4/websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee", size = 181794, upload-time = "2025-03-05T20:03:06.708Z" }, + { url = "https://files.pythonhosted.org/packages/d9/26/31ac2d08f8e9304d81a1a7ed2851c0300f636019a57cbaa91342015c72cc/websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed", size = 181194, upload-time = "2025-03-05T20:03:08.844Z" }, + { url = "https://files.pythonhosted.org/packages/98/72/1090de20d6c91994cd4b357c3f75a4f25ee231b63e03adea89671cc12a3f/websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", size = 181164, upload-time = "2025-03-05T20:03:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/2d/37/098f2e1c103ae8ed79b0e77f08d83b0ec0b241cf4b7f2f10edd0126472e1/websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", size = 176381, upload-time = "2025-03-05T20:03:12.77Z" }, + { url = "https://files.pythonhosted.org/packages/75/8b/a32978a3ab42cebb2ebdd5b05df0696a09f4d436ce69def11893afa301f0/websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", size = 176841, upload-time = "2025-03-05T20:03:14.367Z" }, + { url = "https://files.pythonhosted.org/packages/87/28/bd23c6344b18fb43df40d0700f6d3fffcd7cef14a6995b4f976978b52e62/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", size = 174597, upload-time = "2025-03-05T20:03:32.247Z" }, + { url = "https://files.pythonhosted.org/packages/6d/79/ca288495863d0f23a60f546f0905ae8f3ed467ad87f8b6aceb65f4c013e4/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", size = 174205, upload-time = "2025-03-05T20:03:33.731Z" }, + { url = "https://files.pythonhosted.org/packages/04/e4/120ff3180b0872b1fe6637f6f995bcb009fb5c87d597c1fc21456f50c848/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", size = 174150, upload-time = "2025-03-05T20:03:35.757Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c3/30e2f9c539b8da8b1d76f64012f3b19253271a63413b2d3adb94b143407f/websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123", size = 176877, upload-time = "2025-03-05T20:03:37.199Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428, upload-time = "2025-04-10T13:01:25.628Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload-time = "2025-04-10T13:01:23.086Z" }, +] + +[[package]] +name = "wirerope" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/f1/d0a4c936ba77eb1050da6ea5e7cd80aa36add343d9e5f7f9cf79a206c5b8/wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0", size = 10930, upload-time = "2025-01-16T11:01:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/2d/3557ee32d8268b04ce8aada3212b0d49f2ddcf86dc200f3999a772262dc5/wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6", size = 9166, upload-time = "2025-01-16T11:01:23.507Z" }, +] + +[[package]] +name = "wrapt" +version = "1.17.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/46/dd0791943613885f62619f18ee6107e6133237a6b6ed8a9ecfac339d0b4f/wrapt-1.17.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a", size = 81745, upload-time = "2025-08-12T05:52:49.62Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ec/bb2d19bd1a614cc4f438abac13ae26c57186197920432d2a915183b15a8b/wrapt-1.17.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139", size = 82833, upload-time = "2025-08-12T05:52:27.738Z" }, + { url = "https://files.pythonhosted.org/packages/8d/eb/66579aea6ad36f07617fedca8e282e49c7c9bab64c63b446cfe4f7f47a49/wrapt-1.17.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df", size = 81889, upload-time = "2025-08-12T05:52:29.023Z" }, + { url = "https://files.pythonhosted.org/packages/04/9c/a56b5ac0e2473bdc3fb11b22dd69ff423154d63861cf77911cdde5e38fd2/wrapt-1.17.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b", size = 81344, upload-time = "2025-08-12T05:52:50.869Z" }, + { url = "https://files.pythonhosted.org/packages/93/4c/9bd735c42641d81cb58d7bfb142c58f95c833962d15113026705add41a07/wrapt-1.17.3-cp39-cp39-win32.whl", hash = "sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81", size = 36462, upload-time = "2025-08-12T05:53:19.623Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ea/0b72f29cb5ebc16eb55c57dc0c98e5de76fc97f435fd407f7d409459c0a6/wrapt-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f", size = 38740, upload-time = "2025-08-12T05:53:18.271Z" }, + { url = "https://files.pythonhosted.org/packages/c3/8b/9eae65fb92321e38dbfec7719b87d840a4b92fde83fd1bbf238c5488d055/wrapt-1.17.3-cp39-cp39-win_arm64.whl", hash = "sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f", size = 36806, upload-time = "2025-08-12T05:52:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, +] + +[[package]] +name = "xarray" +version = "2024.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/e8/8ee12706df0d34ad04b3737621a73432458d47bc8abfbd6f049e51ca89c3/xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638", size = 3728663, upload-time = "2024-07-30T08:31:45.48Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/95/233e1f9c939f5ba314297315df709e6a5e823bf3cade7211991b15aa65d2/xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64", size = 1176466, upload-time = "2024-07-30T08:31:43.077Z" }, +] + +[package.optional-dependencies] +io = [ + { name = "cftime" }, + { name = "fsspec" }, + { name = "h5netcdf" }, + { name = "netcdf4" }, + { name = "pooch" }, + { name = "pydap" }, + { name = "scipy" }, + { name = "zarr" }, +] + +[[package]] +name = "xxhash" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241, upload-time = "2024-08-17T09:20:38.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/92/9ac297e3487818f429bcf369c1c6a097edf5b56ed6fc1feff4c1882e87ef/xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f", size = 220644, upload-time = "2024-08-17T09:19:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/86/48/c1426dd3c86fc4a52f983301867463472f6a9013fb32d15991e60c9919b6/xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd", size = 200021, upload-time = "2024-08-17T09:19:52.923Z" }, + { url = "https://files.pythonhosted.org/packages/f3/de/0ab8c79993765c94fc0d0c1a22b454483c58a0161e1b562f58b654f47660/xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc", size = 428217, upload-time = "2024-08-17T09:19:54.349Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b4/332647451ed7d2c021294b7c1e9c144dbb5586b1fb214ad4f5a404642835/xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754", size = 193868, upload-time = "2024-08-17T09:19:55.763Z" }, + { url = "https://files.pythonhosted.org/packages/f4/1c/a42c0a6cac752f84f7b44a90d1a9fa9047cf70bdba5198a304fde7cc471f/xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6", size = 207403, upload-time = "2024-08-17T09:19:57.945Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d7/04e1b0daae9dc9b02c73c1664cc8aa527498c3f66ccbc586eeb25bbe9f14/xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898", size = 215978, upload-time = "2024-08-17T09:19:59.381Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f4/05e15e67505228fc19ee98a79e427b3a0b9695f5567cd66ced5d66389883/xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833", size = 202416, upload-time = "2024-08-17T09:20:01.534Z" }, + { url = "https://files.pythonhosted.org/packages/94/fb/e9028d3645bba5412a09de13ee36df276a567e60bdb31d499dafa46d76ae/xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6", size = 209853, upload-time = "2024-08-17T09:20:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/02/2c/18c6a622429368274739372d2f86c8125413ec169025c7d8ffb051784bba/xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af", size = 413926, upload-time = "2024-08-17T09:20:04.946Z" }, + { url = "https://files.pythonhosted.org/packages/72/bb/5b55c391084a0321c3809632a018b9b657e59d5966289664f85a645942ac/xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606", size = 191156, upload-time = "2024-08-17T09:20:06.318Z" }, + { url = "https://files.pythonhosted.org/packages/86/2b/915049db13401792fec159f57e4f4a5ca7a9768e83ef71d6645b9d0cd749/xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4", size = 30122, upload-time = "2024-08-17T09:20:07.691Z" }, + { url = "https://files.pythonhosted.org/packages/d5/87/382ef7b24917d7cf4c540ee30f29b283bc87ac5893d2f89b23ea3cdf7d77/xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558", size = 30021, upload-time = "2024-08-17T09:20:08.832Z" }, + { url = "https://files.pythonhosted.org/packages/e2/47/d06b24e2d9c3dcabccfd734d11b5bbebfdf59ceac2c61509d8205dd20ac6/xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e", size = 26780, upload-time = "2024-08-17T09:20:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/3c42a1f022ad0d82c852d3cb65493ebac03dcfa8c994465a5fb052b00e3c/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1", size = 36216, upload-time = "2024-08-17T09:20:32.116Z" }, + { url = "https://files.pythonhosted.org/packages/b2/40/8f902ab3bebda228a9b4de69eba988280285a7f7f167b942bc20bb562df9/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f", size = 32042, upload-time = "2024-08-17T09:20:33.562Z" }, + { url = "https://files.pythonhosted.org/packages/db/87/bd06beb8ccaa0e9e577c9b909a49cfa5c5cd2ca46034342d72dd9ce5bc56/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0", size = 40516, upload-time = "2024-08-17T09:20:36.004Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f8/505385e2fbd753ddcaafd5550eabe86f6232cbebabad3b2508d411b19153/xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240", size = 30108, upload-time = "2024-08-17T09:20:37.214Z" }, +] + +[[package]] +name = "zarr" +version = "2.18.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asciitree" }, + { name = "fasteners", marker = "sys_platform != 'emscripten'" }, + { name = "numcodecs" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/00/ac5c518ff1c1b1cc87a62f86ad9d19c647c19d969a91faa40d3b6342ccaa/zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47", size = 3603055, upload-time = "2024-05-26T19:23:24.131Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/bd/8d881d8ca6d80fcb8da2b2f94f8855384daf649499ddfba78ffd1ee2caa3/zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38", size = 210228, upload-time = "2024-05-26T19:23:22.171Z" }, +] + +[[package]] +name = "zhinst" +version = "21.8.20515" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/24/3af8acbc6815c91ec1dd4c339e43897cd44b0a6d21be6e3b66adc236e965/zhinst-21.8.20515-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df5e562f4e928e168be8816e20b5c138e7c70306eb402ad7fc9e8a5eec893613", size = 7672570, upload-time = "2021-09-09T14:10:55.759Z" }, + { url = "https://files.pythonhosted.org/packages/19/29/6d3108917c2bdcbc146fb370d93cc13d3b89f10b9d628e211be8adcc290d/zhinst-21.8.20515-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:db35ebcc5bb5b195de20bbfb71487159adbfc89e35b71412e06dc30c089a59b9", size = 6886563, upload-time = "2021-09-09T14:10:57.559Z" }, + { url = "https://files.pythonhosted.org/packages/b0/24/734641b651e94453171d2a3f392e47842e3d8bbf81b9edb846274bb7d66f/zhinst-21.8.20515-cp39-cp39-win_amd64.whl", hash = "sha256:423966ca97d78dfdb13c4e6bd9eaba6521f84bd7fb812b973dfdb50aeb51c5aa", size = 6366500, upload-time = "2021-09-09T14:11:00.585Z" }, +] + +[[package]] +name = "zhinst-qcodes" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "numpy" }, + { name = "qcodes" }, + { name = "setuptools" }, + { name = "zhinst" }, + { name = "zhinst-toolkit" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/1d/a4bc3a785fe9a494f9540ec3b01ec7d6d7c408f83802e6ba92d231474463/zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae", size = 22481, upload-time = "2021-05-10T08:00:27.985Z" }, +] + +[[package]] +name = "zhinst-toolkit" +version = "0.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "numpy" }, + { name = "setuptools" }, + { name = "zhinst" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/2d/459c53a535a79552a950bbab6ca54d15d4e32f70d4321c7eb434c34bc400/zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9", size = 1728637, upload-time = "2021-02-04T13:57:32.724Z" } + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, +] From 7ed5fe6cf2fb4e60d95cc56c7bbc003874c48ac5 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:08:39 +0200 Subject: [PATCH 08/12] Release 0.6.1 (#621) --- .github/workflows/docs.yml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/tests.yaml | 4 +- CHANGELOG.md | 11 + opensquirrel/circuit.py | 12 + opensquirrel/circuit_builder.py | 17 +- opensquirrel/common.py | 4 +- opensquirrel/ir/expression.py | 107 +- opensquirrel/ir/ir.py | 7 + opensquirrel/ir/semantics/__init__.py | 3 + opensquirrel/ir/semantics/bsr.py | 3 +- opensquirrel/ir/semantics/canonical_gate.py | 105 + opensquirrel/ir/semantics/controlled_gate.py | 3 +- opensquirrel/ir/semantics/matrix_gate.py | 3 +- opensquirrel/passes/mapper/qubit_remapper.py | 1 + opensquirrel/passes/router/general_router.py | 3 +- opensquirrel/utils/matrix_expander.py | 61 +- pyproject.toml | 10 +- tests/ir/semantics/test_bsr.py | 4 +- tests/ir/semantics/test_canonical_gate.py | 41 + tests/ir/test_expression.py | 4 +- tests/passes/mapper/test_mip_mapper.py | 54 + tests/test_circuit.py | 27 + tests/test_circuit_builder.py | 6 +- tests/utils/test_matrix_expander.py | 36 +- tox.ini | 2 +- uv.lock | 2027 +++++++++++++++--- 27 files changed, 2209 insertions(+), 350 deletions(-) create mode 100644 opensquirrel/ir/semantics/canonical_gate.py create mode 100644 tests/ir/semantics/test_canonical_gate.py diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6813c3da..e529e7d1 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.11" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 055f9f5a..1fb80e0c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@master - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.11" - name: Install uv diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 25f5515b..1a2a0a07 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.11" - name: Install uv @@ -46,7 +46,7 @@ jobs: steps: - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install uv diff --git a/CHANGELOG.md b/CHANGELOG.md index b5252a3e..c72e7f85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,17 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. +## [ 0.6.1 ] - [ 2025-10-06 ] + +### Added + +- `instruction_count` property to `Circuit` + +### Fixed + +- Autocompletion for `Circuitbuilder` gates +- Re-mapper properly handles remapping of target qubits + ## [ 0.6.0 ] - [ 2025-08-28 ] ### Added diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py index 7135f949..5cc87864 100644 --- a/opensquirrel/circuit.py +++ b/opensquirrel/circuit.py @@ -1,5 +1,6 @@ from __future__ import annotations +from collections import Counter from collections.abc import Callable from typing import TYPE_CHECKING, Any @@ -145,3 +146,14 @@ def replace(self, gate: type[Gate], replacement_gates_function: Callable[..., li def validate(self, validator: Validator) -> None: """Generic validator pass. It applies the given validator to the circuit.""" validator.validate(self.ir) + + @property + def instruction_count(self) -> dict[str, int]: + """Count the operations in the circuit by name""" + counter: Counter[str] = Counter() + counter.update( + getattr(statement, "name", "unknown") + for statement in self.ir.statements + if not isinstance(statement, AsmDeclaration) + ) + return dict(counter) diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py index 1cd550ce..503d5ff4 100644 --- a/opensquirrel/circuit_builder.py +++ b/opensquirrel/circuit_builder.py @@ -1,6 +1,5 @@ from __future__ import annotations -from collections.abc import Callable from copy import deepcopy from functools import partial from typing import Any @@ -12,6 +11,8 @@ from opensquirrel.ir import IR, AsmDeclaration, Bit, BitLike, Instruction, Qubit, QubitLike from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager +_builder_dynamic_attributes = (*default_instruction_set, "asm") + class CircuitBuilder: """ @@ -42,8 +43,14 @@ def __init__(self, qubit_register_size: int, bit_register_size: int = 0) -> None self.register_manager = RegisterManager(QubitRegister(qubit_register_size), BitRegister(bit_register_size)) self.ir = IR() - def __getattr__(self, attr: Any) -> Callable[..., Self]: - return partial(self._add_statement, attr) + def __dir__(self) -> list[str]: + return super().__dir__() + list(_builder_dynamic_attributes) # type: ignore + + def __getattr__(self, attr: str) -> Any: + if attr in _builder_dynamic_attributes: + return partial(self._add_statement, attr) + # Default behaviour + return self.__getattribute__(attr) def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: """Throw error if qubit index is outside the qubit register range. @@ -53,7 +60,7 @@ def _check_qubit_out_of_bounds_access(self, qubit: QubitLike) -> None: """ index = Qubit(qubit).index if index >= self.register_manager.get_qubit_register_size(): - msg = "qubit index is out of bounds" + msg = f"qubit index {index} is out of bounds" raise IndexError(msg) def _check_bit_out_of_bounds_access(self, bit: BitLike) -> None: @@ -64,7 +71,7 @@ def _check_bit_out_of_bounds_access(self, bit: BitLike) -> None: """ index = Bit(bit).index if index >= self.register_manager.get_bit_register_size(): - msg = "bit index is out of bounds" + msg = f"bit index {index} is out of bounds" raise IndexError(msg) def _check_out_of_bounds_access(self, instruction: Instruction) -> None: diff --git a/opensquirrel/common.py b/opensquirrel/common.py index 58872c52..67f29d3e 100644 --- a/opensquirrel/common.py +++ b/opensquirrel/common.py @@ -7,7 +7,7 @@ from numpy.typing import NDArray if TYPE_CHECKING: - from opensquirrel.ir.expression import Axis + from opensquirrel.ir.expression import BaseAxis ATOL = 0.000_000_1 @@ -67,7 +67,7 @@ def is_identity_matrix_up_to_a_global_phase(matrix: NDArray[np.complex128]) -> b return are_matrices_equivalent_up_to_global_phase(matrix, np.eye(matrix.shape[0], dtype=np.complex128)) -def repr_round(value: float | Axis | NDArray[np.complex128], decimals: int = REPR_DECIMALS) -> str: +def repr_round(value: float | BaseAxis | NDArray[np.complex128], decimals: int = REPR_DECIMALS) -> str: """ Given a numerical value (of type `float`, `Axis`, or `NDArray[np.complex128]`): - rounds it to `REPR_DECIMALS`, diff --git a/opensquirrel/ir/expression.py b/opensquirrel/ir/expression.py index 85d39b6e..6cd8c1f2 100644 --- a/opensquirrel/ir/expression.py +++ b/opensquirrel/ir/expression.py @@ -1,6 +1,6 @@ from __future__ import annotations -from abc import ABC +from abc import ABC, abstractmethod from collections.abc import Sequence from dataclasses import dataclass from typing import Any, Protocol, SupportsFloat, SupportsInt, Union, cast, overload, runtime_checkable @@ -177,25 +177,23 @@ def accept(self, visitor: IRVisitor) -> Any: return visitor.visit_qubit(self) -class Axis(Sequence[np.float64], Expression): - """The ``Axis`` object parses and stores a vector containing 3 elements. - - The input vector is always normalized before it is stored. - """ - +class BaseAxis(Sequence[np.float64], Expression, ABC): _len = 3 def __init__(self, *axis: AxisLike) -> None: - """Init of the ``Axis`` object. + """Init of the ``BaseAxis`` object. axis: An ``AxisLike`` to create the axis from. """ - axis_to_parse = axis[0] if len(axis) == 1 else cast("AxisLike", axis) - self._value = self.normalize(self.parse(axis_to_parse)) + self.value = axis[0] if len(axis) == 1 else cast("AxisLike", axis) + + @staticmethod + @abstractmethod + def parse(axis: AxisLike) -> NDArray[np.float64]: ... @property def value(self) -> NDArray[np.float64]: - """The ``Axis`` data saved as a 1D-Array with 3 elements.""" + """The ``BaseAxis`` data saved as a 1D-Array with 3 elements.""" return self._value @value.setter @@ -206,7 +204,44 @@ def value(self, axis: AxisLike) -> None: axis: An ``AxisLike`` to create the axis from. """ self._value = self.parse(axis) - self._value = self.normalize(self._value) + + @overload + def __getitem__(self, i: int, /) -> np.float64: ... + + @overload + def __getitem__(self, s: slice, /) -> list[np.float64]: ... + + def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: + """Get the item at `index`.""" + return cast("np.float64", self.value[index]) + + def __len__(self) -> int: + """Length of the axis, which is always 3.""" + return self._len + + def __repr__(self) -> str: + """String representation of the ``BaseAxis``.""" + return f"{self.__class__.__name__}{self.value}" + + def __array__(self, dtype: DTypeLike = None, *, copy: bool | None = None) -> NDArray[Any]: + """Convert the ``BaseAxis`` data to an array.""" + return np.array(self.value, dtype=dtype, copy=copy) + + def __eq__(self, other: Any) -> bool: + """Check if `self` is equal to `other`. + + Two ``BaseAxis`` objects are considered equal if their axes are equal. + """ + if not isinstance(other, self.__class__): + return False + return np.array_equal(self, other) + + +class Axis(BaseAxis): + """The ``Axis`` object parses and stores a vector containing 3 elements. + + The input vector is always normalized before it is stored. + """ @staticmethod def parse(axis: AxisLike) -> NDArray[np.float64]: @@ -225,7 +260,7 @@ def parse(axis: AxisLike) -> NDArray[np.float64]: return axis.value try: - axis = np.asarray(axis, dtype=float) + axis = np.asarray(axis, dtype=np.float64) except (ValueError, TypeError) as e: msg = "axis requires an ArrayLike" raise TypeError(msg) from e @@ -236,57 +271,15 @@ def parse(axis: AxisLike) -> NDArray[np.float64]: if np.all(axis == 0): msg = "axis requires at least one element to be non-zero" raise ValueError(msg) - return axis - - @staticmethod - def normalize(axis: NDArray[np.float64]) -> NDArray[np.float64]: - """Normalize a NDArray. - - Args: - axis: NDArray to normalize. - - Returns: - Normalized NDArray. - """ + axis = cast("NDArray[np.float64]", axis) return axis / np.linalg.norm(axis) - @overload - def __getitem__(self, i: int, /) -> np.float64: ... - - @overload - def __getitem__(self, s: slice, /) -> list[np.float64]: ... - - def __getitem__(self, index: int | slice, /) -> np.float64 | list[np.float64]: - """Get the item at `index`.""" - return cast("np.float64", self.value[index]) - - def __len__(self) -> int: - """Length of the axis, which is always 3.""" - return self._len - - def __repr__(self) -> str: - """String representation of the ``Axis``.""" - return f"Axis{self.value}" - - def __array__(self, dtype: DTypeLike = None, *, copy: bool | None = None) -> NDArray[Any]: - """Convert the ``Axis`` data to an array.""" - return np.array(self.value, dtype=dtype, copy=copy) - def accept(self, visitor: IRVisitor) -> Any: """Accept the ``Axis``.""" return visitor.visit_axis(self) - def __eq__(self, other: Any) -> bool: - """Check if `self` is equal to `other`. - - Two ``Axis`` objects are considered equal if their axes are equal. - """ - if not isinstance(other, Axis): - return False - return np.array_equal(self, other) - # Type Aliases BitLike = Union[SupportsInt, Bit] QubitLike = Union[SupportsInt, Qubit] -AxisLike = Union[ArrayLike, Axis] +AxisLike = Union[ArrayLike, BaseAxis] diff --git a/opensquirrel/ir/ir.py b/opensquirrel/ir/ir.py index cd144f7a..2172a092 100644 --- a/opensquirrel/ir/ir.py +++ b/opensquirrel/ir/ir.py @@ -30,6 +30,7 @@ ControlledGate, MatrixGate, ) + from opensquirrel.ir.semantics.canonical_gate import CanonicalAxis, CanonicalGate from opensquirrel.ir.statement import Instruction, Statement @@ -52,6 +53,9 @@ def visit_qubit(self, qubit: Qubit) -> Any: def visit_axis(self, axis: Axis) -> Any: pass + def visit_canonical_axis(self, axis: CanonicalAxis) -> Any: + pass + def visit_statement(self, statement: Statement) -> Any: pass @@ -82,6 +86,9 @@ def visit_bsr_angle_param(self, gate: BsrAngleParam) -> Any: def visit_matrix_gate(self, matrix_gate: MatrixGate) -> Any: pass + def visit_canonical_gate(self, gate: CanonicalGate) -> Any: + pass + def visit_swap(self, gate: SWAP) -> Any: pass diff --git a/opensquirrel/ir/semantics/__init__.py b/opensquirrel/ir/semantics/__init__.py index 26690e10..753202f6 100644 --- a/opensquirrel/ir/semantics/__init__.py +++ b/opensquirrel/ir/semantics/__init__.py @@ -1,4 +1,5 @@ from opensquirrel.ir.semantics.bsr import BlochSphereRotation, BsrAngleParam, BsrFullParams, BsrNoParams +from opensquirrel.ir.semantics.canonical_gate import CanonicalAxis, CanonicalGate from opensquirrel.ir.semantics.controlled_gate import ControlledGate from opensquirrel.ir.semantics.matrix_gate import MatrixGate @@ -7,6 +8,8 @@ "BsrAngleParam", "BsrFullParams", "BsrNoParams", + "CanonicalAxis", + "CanonicalGate", "ControlledGate", "MatrixGate", ] diff --git a/opensquirrel/ir/semantics/bsr.py b/opensquirrel/ir/semantics/bsr.py index 24cabac0..5f24c20a 100644 --- a/opensquirrel/ir/semantics/bsr.py +++ b/opensquirrel/ir/semantics/bsr.py @@ -5,7 +5,8 @@ import numpy as np from opensquirrel.common import ATOL, normalize_angle, repr_round -from opensquirrel.ir import Axis, AxisLike, Bit, Float, Gate, Qubit, QubitLike +from opensquirrel.ir.expression import Axis, AxisLike, Bit, Float, Qubit, QubitLike +from opensquirrel.ir.unitary import Gate if TYPE_CHECKING: from opensquirrel.ir import IRVisitor diff --git a/opensquirrel/ir/semantics/canonical_gate.py b/opensquirrel/ir/semantics/canonical_gate.py new file mode 100644 index 00000000..00a1a505 --- /dev/null +++ b/opensquirrel/ir/semantics/canonical_gate.py @@ -0,0 +1,105 @@ +from typing import Any + +import numpy as np +from numpy.typing import NDArray + +from opensquirrel.common import repr_round +from opensquirrel.ir import AxisLike, IRVisitor, Qubit, QubitLike +from opensquirrel.ir.expression import BaseAxis, Bit, Expression +from opensquirrel.ir.unitary import Gate + + +class CanonicalAxis(BaseAxis): + @staticmethod + def parse(axis: AxisLike) -> NDArray[np.float64]: + """Parse and validate an ``AxisLike``. + + Check if the `axis` can be cast to a 1DArray of length 3, raise an error otherwise. + After casting to an array, the elements of the canonical axis are restricted to the Weyl chamber. + + Args: + axis: ``AxisLike`` to validate and parse. + + Returns: + Parsed axis represented as a 1DArray of length 3. + """ + if isinstance(axis, CanonicalAxis): + return axis.value + + try: + axis = np.asarray(axis, dtype=float) + except (ValueError, TypeError) as e: + msg = "axis requires an ArrayLike" + raise TypeError(msg) from e + axis = axis.flatten() + if len(axis) != 3: + msg = f"axis requires an ArrayLike of length 3, but received an ArrayLike of length {len(axis)}" + raise ValueError(msg) + + return CanonicalAxis.restrict_to_weyl_chamber(axis) + + @staticmethod + def restrict_to_weyl_chamber(axis: NDArray[np.float64]) -> NDArray[np.float64]: + """Restrict the given axis to the Weyl chamber. The six rules that are + (implicitly) used are: + 1. The canonical parameters are periodic with a period of 2 (neglecting + a global phase). + 2. Can(tx, ty, tz) ~ Can(tx - 1, ty, tz) (for any parameter) + 3. Can(tx, ty, tz) ~ Can(tx, -ty, -tz) (for any pair of parameters) + 4. Can(tx, ty, tz) ~ Can(ty, tx, tz) (for any pair of parameters) + 5. Can(tx, ty, 0) ~ Can(1 - tx, ty, 0) + 6. Can(tx, ty, tz) x Can(tx', ty', tz') = Can(tx + tx', ty + ty', tz + tz') + (here x represents matrix multiplication) + + Based on the rules described in Chapter 5 of https://threeplusone.com/pubs/on_gates.pdf + """ + axis = (axis + 1) % 2 - 1 + + while (axis < 0).any(): + axis = np.where(axis < 0, axis - 1, axis) + axis = (axis + 1) % 2 - 1 + + axis = np.sort(axis)[::-1] + n = sum(t > 1 / 2 for t in axis) + if n == 1: + axis[0] = 1 - axis[0] + if n == 2: + axis[0], axis[2] = axis[2], axis[0] + axis[1:] = 1 - axis[1:] + if n == 3: + axis = 1 - axis + return np.sort(axis)[::-1] + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_canonical_axis(self) + + +class CanonicalGate(Gate): + def __init__(self, qubit_0: QubitLike, qubit_1: QubitLike, axis: AxisLike, name: str = "CanonicalGate") -> None: + Gate.__init__(self, name) + self.qubit_0 = Qubit(qubit_0) + self.qubit_1 = Qubit(qubit_1) + self.axis = CanonicalAxis(axis) + + if self._check_repeated_qubit_operands([self.qubit_0, self.qubit_1]): + msg = "the two qubits cannot be the same" + raise ValueError(msg) + + def __repr__(self) -> str: + return f"{self.name}(q0={self.qubit_0}, q1={self.qubit_1}, axis={repr_round(self.axis)})" + + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_canonical_gate(self) + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit_0, self.qubit_1, self.axis) + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit_0, self.qubit_1] + + def get_bit_operands(self) -> list[Bit]: + return [] + + def is_identity(self) -> bool: + return self.axis == CanonicalAxis(0, 0, 0) diff --git a/opensquirrel/ir/semantics/controlled_gate.py b/opensquirrel/ir/semantics/controlled_gate.py index dc97e9fd..ddf7407a 100644 --- a/opensquirrel/ir/semantics/controlled_gate.py +++ b/opensquirrel/ir/semantics/controlled_gate.py @@ -1,8 +1,9 @@ from typing import Any -from opensquirrel.ir import Bit, Gate, IRVisitor, Qubit, QubitLike +from opensquirrel.ir import Bit, IRVisitor, Qubit, QubitLike from opensquirrel.ir.expression import Expression from opensquirrel.ir.semantics import BlochSphereRotation +from opensquirrel.ir.unitary import Gate class ControlledGate(Gate): diff --git a/opensquirrel/ir/semantics/matrix_gate.py b/opensquirrel/ir/semantics/matrix_gate.py index f2929ce9..ea627850 100644 --- a/opensquirrel/ir/semantics/matrix_gate.py +++ b/opensquirrel/ir/semantics/matrix_gate.py @@ -7,7 +7,8 @@ from numpy.typing import ArrayLike, DTypeLike from opensquirrel.common import ATOL, repr_round -from opensquirrel.ir import Bit, Gate, Qubit, QubitLike +from opensquirrel.ir import Bit, Qubit, QubitLike +from opensquirrel.ir.unitary import Gate if TYPE_CHECKING: from opensquirrel.ir import IRVisitor diff --git a/opensquirrel/passes/mapper/qubit_remapper.py b/opensquirrel/passes/mapper/qubit_remapper.py index b74a7bea..062cbb9d 100644 --- a/opensquirrel/passes/mapper/qubit_remapper.py +++ b/opensquirrel/passes/mapper/qubit_remapper.py @@ -93,6 +93,7 @@ def visit_swap(self, gate: SWAP) -> MatrixGate: def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: controlled_gate.control_qubit.accept(self) + controlled_gate.target_qubit.accept(self) self.visit_bloch_sphere_rotation(controlled_gate.target_gate) return controlled_gate diff --git a/opensquirrel/passes/router/general_router.py b/opensquirrel/passes/router/general_router.py index 8fb756b6..80c3ff7e 100644 --- a/opensquirrel/passes/router/general_router.py +++ b/opensquirrel/passes/router/general_router.py @@ -5,7 +5,8 @@ class Router(ABC): - def __init__(self, **kwargs: Any) -> None: ... + def __init__(self, **kwargs: Any) -> None: + """Generic router class""" @abstractmethod def route(self, ir: IR) -> IR: diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py index 9ddcce0d..6147e833 100644 --- a/opensquirrel/utils/matrix_expander.py +++ b/opensquirrel/utils/matrix_expander.py @@ -3,6 +3,7 @@ import cmath import math from collections.abc import Iterable +from math import pi from typing import TYPE_CHECKING, Any import numpy as np @@ -16,6 +17,7 @@ Qubit, QubitLike, ) +from opensquirrel.ir.semantics.canonical_gate import CanonicalAxis, CanonicalGate if TYPE_CHECKING: from opensquirrel import ( @@ -179,7 +181,7 @@ def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: # 0, 0, 1, 0 # which corresponds to control being q[1] and target being q[0], # since qubit #i corresponds to the i-th least significant bit. - qubit_operands = list(reversed(gate.operands)) + qubit_operands = list(reversed(gate.get_qubit_operands())) if any(q.index >= self.qubit_register_size for q in qubit_operands): msg = "index out of range" @@ -211,6 +213,29 @@ def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: def visit_swap(self, gate: SWAP) -> NDArray[np.complex128]: return self.visit_matrix_gate(gate) + def visit_canonical_gate(self, gate: CanonicalGate) -> Any: + qubit_operands = list(reversed(gate.get_qubit_operands())) + + if any(q.index >= self.qubit_register_size for q in qubit_operands): + msg = "index out of range" + raise IndexError(msg) + + m = can2(gate.axis) + + expanded_matrix = np.zeros((1 << self.qubit_register_size, 1 << self.qubit_register_size), dtype=m.dtype) + + for expanded_matrix_column in range(expanded_matrix.shape[1]): + small_matrix_col = get_reduced_ket(expanded_matrix_column, qubit_operands) + + for small_matrix_row, value in enumerate(m[:, small_matrix_col]): + expanded_matrix_row = expand_ket(expanded_matrix_column, small_matrix_row, qubit_operands) + expanded_matrix[expanded_matrix_row][expanded_matrix_column] = value + + if expanded_matrix.shape != (1 << self.qubit_register_size, 1 << self.qubit_register_size): + msg = "expended matrix has incorrect shape" + raise ValueError(msg) + return expanded_matrix + X = np.array([[0, 1], [1, 0]]) Y = np.array([[0, -1j], [1j, 0]]) @@ -227,6 +252,40 @@ def can1(axis: AxisLike, angle: float, phase: float = 0) -> NDArray[np.complex12 return np.asarray(result, dtype=np.complex128) +def can2(canonical_axis: AxisLike) -> NDArray[np.complex128]: + tx, ty, tz = CanonicalAxis(canonical_axis) + + return np.array( + [ + [ + cmath.exp(-1j * (pi / 2) * tz) * math.cos((pi / 2) * (tx - ty)), + 0, + 0, + -1j * cmath.exp(-1j * (pi / 2) * tz) * math.sin((pi / 2) * (tx - ty)), + ], + [ + 0, + cmath.exp(1j * (pi / 2) * tz) * math.cos((pi / 2) * (tx + ty)), + -1j * cmath.exp(1j * (pi / 2) * tz) * math.sin((pi / 2) * (tx + ty)), + 0, + ], + [ + 0, + -1j * cmath.exp(1j * (pi / 2) * tz) * math.sin((pi / 2) * (tx + ty)), + cmath.exp(1j * (pi / 2) * tz) * math.cos((pi / 2) * (tx + ty)), + 0, + ], + [ + -1j * cmath.exp(-1j * (pi / 2) * tz) * math.sin((pi / 2) * (tx - ty)), + 0, + 0, + cmath.exp(-1j * (pi / 2) * tz) * math.cos((pi / 2) * (tx - ty)), + ], + ], + dtype=np.complex128, + ) + + def get_matrix(gate: Gate, qubit_register_size: int) -> NDArray[np.complex128]: """ Compute the unitary matrix corresponding to the gate applied to those qubit operands, taken among any number of diff --git a/pyproject.toml b/pyproject.toml index 17aa411c..94f84cbb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "opensquirrel" -version = "0.6.0" +version = "0.6.1" description = "A quantum circuit transformation and manipulation tool" authors = [ { name = "Quantum Inspire", email = "support@quantum-inspire.com" }, @@ -38,9 +38,9 @@ Repository = "https://github.com/QuTech-Delft/OpenSquirrel" dev = [ "coverage>=7.3.2,<8", "pytest>=7.4.3,<9.0.0", - "pytest-cov>=4.1,<7.0", + "pytest-cov>=4.1,<8.0", "mypy>=1.7.0,<2", - "ruff>=0.5,<0.13", + "ruff>=0.5,<0.14", "tox>=4.24.1,<5", "sympy>=1.13.1,<2", "IPython>=7.12,<9.0", @@ -54,7 +54,7 @@ docs = [ "mkdocs>=1.5.3,<2", "mkdocstrings[python]>=0.24,<0.31", "mkdocs-exclude==1.0.2", - "mkdocs-glightbox==0.4.0", + "mkdocs-glightbox==0.5.1", "mkdocs_gen_files>=0.5.0,<0.6", "mkdocs-material>=9.4.12,<10", "mkdocs-material-extensions==1.3.1", @@ -78,7 +78,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [tool.pytest.ini_options] -addopts = "-v --cov --cov-report term-missing:skip-covered --cov-report xml" +addopts = "-v" [tool.coverage.run] branch = true diff --git a/tests/ir/semantics/test_bsr.py b/tests/ir/semantics/test_bsr.py index 1690f9dc..0abba6d6 100644 --- a/tests/ir/semantics/test_bsr.py +++ b/tests/ir/semantics/test_bsr.py @@ -17,9 +17,7 @@ X, ) from opensquirrel.common import ATOL -from opensquirrel.ir import ( - Qubit, -) +from opensquirrel.ir import Qubit from opensquirrel.ir.semantics import BlochSphereRotation diff --git a/tests/ir/semantics/test_canonical_gate.py b/tests/ir/semantics/test_canonical_gate.py new file mode 100644 index 00000000..c7dc13f0 --- /dev/null +++ b/tests/ir/semantics/test_canonical_gate.py @@ -0,0 +1,41 @@ +import numpy as np +import numpy.testing +import pytest +from numpy.typing import NDArray + +from opensquirrel.ir.semantics import CanonicalAxis, CanonicalGate +from opensquirrel.ir.unitary import Gate + + +class TestCanonicalAxis: + @pytest.mark.parametrize( + ("axis", "restricted_axis"), + [ + (np.array([1, 1, 1], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), + (np.array([-1, -1, -1], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), + (np.array([1, 0, 0], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), + (np.array([3 / 4, 1 / 4, 0], dtype=np.float64), np.array([1 / 4, 1 / 4, 0], dtype=np.float64)), + (np.array([5 / 8, 3 / 8, 0], dtype=np.float64), np.array([3 / 8, 3 / 8, 0], dtype=np.float64)), + (np.array([3 / 4, 3 / 4, 3 / 4], dtype=np.float64), np.array([1 / 4, 1 / 4, 1 / 4], dtype=np.float64)), + (np.array([1 / 2, 3 / 4, 3 / 4], dtype=np.float64), np.array([1 / 2, 1 / 4, 1 / 4], dtype=np.float64)), + (np.array([64 / 2, 32 / 4, 33 / 4], dtype=np.float64), np.array([1 / 4, 0, 0], dtype=np.float64)), + ], + ) + def test_restrict_to_weyl_chamber(self, axis: NDArray[np.float64], restricted_axis: NDArray[np.float64]) -> None: + numpy.testing.assert_array_almost_equal(CanonicalAxis.restrict_to_weyl_chamber(axis), restricted_axis) + + +class TestCanonicalGate: + @pytest.fixture + def gate(self) -> CanonicalGate: + return CanonicalGate(0, 1, (0, 0, 0)) + + def test_eq(self, gate: CanonicalGate) -> None: + assert gate.is_identity() + + def test_init(self, gate: CanonicalGate) -> None: + assert isinstance(gate, Gate) + assert hasattr(gate, "axis") + assert isinstance(gate.axis, CanonicalAxis) + with pytest.raises(ValueError, match="the two qubits cannot be the same"): + CanonicalGate(0, 0, (0, 0, 0)) diff --git a/tests/ir/test_expression.py b/tests/ir/test_expression.py index e1603447..b958b7f5 100644 --- a/tests/ir/test_expression.py +++ b/tests/ir/test_expression.py @@ -170,6 +170,6 @@ def test_parse(self, axis: AxisLike, expected: Any) -> None: ], ) def test_normalize(self, axis: AxisLike, expected: NDArray[np.float64]) -> None: - obj = Axis.normalize(np.array(axis, dtype=np.float64)) + obj = Axis(np.array(axis, dtype=np.float64)) assert isinstance(expected, np.ndarray) - np.testing.assert_array_almost_equal(obj, expected) + np.testing.assert_array_almost_equal(np.array(obj), expected) diff --git a/tests/passes/mapper/test_mip_mapper.py b/tests/passes/mapper/test_mip_mapper.py index e8b7c842..a4a9da04 100644 --- a/tests/passes/mapper/test_mip_mapper.py +++ b/tests/passes/mapper/test_mip_mapper.py @@ -28,6 +28,18 @@ def mapper3() -> MIPMapper: return MIPMapper(timeout=timeout, connectivity=connectivity) +@pytest.fixture +def mapper4() -> MIPMapper: + connectivity = {"0": [1], "1": [0, 2], "2": [1, 3], "3": [2, 4], "4": [3]} + return MIPMapper(connectivity=connectivity) + + +@pytest.fixture +def mapper5() -> MIPMapper: + connectivity = {"0": [1], "1": [2, 0], "2": [1]} + return MIPMapper(connectivity=connectivity) + + @pytest.fixture def circuit1() -> Circuit: builder = CircuitBuilder(5) @@ -112,3 +124,45 @@ def test_fewer_virtual_than_physical_qubits(mapper1: MIPMapper) -> None: assert all(0 <= physical_qubit <= 4 for physical_qubit in physical_qubits) assert len(set(physical_qubits)) == 3 + + +def test_remap_controlled_gates(mapper4: MIPMapper, mapper5: MIPMapper) -> None: + circuit = Circuit.from_string("""version 3.0; qubit[5] q; bit[2] b; H q[0]; CNOT q[0], q[1]; b = measure q[0, 1]""") + + circuit.map(mapper=mapper4) + + # This first assert needs to be updated, because in this case the MIP mapper should NOT + # remap this circuit at all! + # Issue: https://qutech-sd.atlassian.net/browse/CQT-414 + + assert ( + str(circuit) + == """version 3.0 + +qubit[5] q +bit[2] b + +H q[2] +CNOT q[2], q[3] +b[0] = measure q[2] +b[1] = measure q[3] +""" + ) + + builder = CircuitBuilder(3) + builder.CNOT(0, 1) + builder.CNOT(0, 2) + circuit = builder.to_circuit() + + circuit.map(mapper=mapper5) + + assert ( + str(circuit) + == """version 3.0 + +qubit[3] q + +CNOT q[1], q[0] +CNOT q[1], q[2] +""" + ) diff --git a/tests/test_circuit.py b/tests/test_circuit.py index 67423b00..f490f425 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -29,3 +29,30 @@ def test_asm_filter() -> None: for statement in asm_statements: assert relevant_backend_name in str(statement.backend_name) + + +def test_instruction_count() -> None: + builder = CircuitBuilder(2) + builder.H(0) + builder.CNOT(0, 1) + circuit = builder.to_circuit() + counts = circuit.instruction_count + assert counts == {"H": 1, "CNOT": 1} + + # non-unitaries + builder = CircuitBuilder(2, bit_register_size=2) + builder.barrier(1) + builder.init(0) + builder.measure(0, 0) + circuit = builder.to_circuit() + counts = circuit.instruction_count + assert counts == {"barrier": 1, "init": 1, "measure": 1} + + # asm statements + builder = CircuitBuilder(2) + builder.barrier(0) + builder.asm("asm_name", "asm_code") + builder.barrier(1) + circuit = builder.to_circuit() + counts = circuit.instruction_count + assert counts == {"barrier": 2} diff --git a/tests/test_circuit_builder.py b/tests/test_circuit_builder.py index 7642abad..00a8124c 100644 --- a/tests/test_circuit_builder.py +++ b/tests/test_circuit_builder.py @@ -55,17 +55,17 @@ def test_chain(self) -> None: def test_gate_index_error(self) -> None: builder = CircuitBuilder(2) - with pytest.raises(IndexError, match="qubit index is out of bounds"): + with pytest.raises(IndexError, match="qubit index 12 is out of bounds"): builder.H(0).CNOT(0, 12).to_circuit() def test_measure_index_error(self) -> None: builder = CircuitBuilder(2, 1) - with pytest.raises(IndexError, match="bit index is out of bounds"): + with pytest.raises(IndexError, match="bit index 10 is out of bounds"): builder.H(0).measure(0, 10).to_circuit() def test_unknown_instruction(self) -> None: builder = CircuitBuilder(3) - with pytest.raises(ValueError, match="unknown instruction 'unknown'"): + with pytest.raises(AttributeError, match="has no attribute 'unknown'"): builder.unknown(0) def test_wrong_number_of_arguments(self) -> None: diff --git a/tests/utils/test_matrix_expander.py b/tests/utils/test_matrix_expander.py index 4b16f3b3..43725474 100644 --- a/tests/utils/test_matrix_expander.py +++ b/tests/utils/test_matrix_expander.py @@ -1,8 +1,12 @@ -from math import pi +from math import pi, sqrt +from typing import Any import numpy as np +import pytest +from numpy.typing import NDArray -from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate, MatrixGate +from opensquirrel.ir import AxisLike +from opensquirrel.ir.semantics import BlochSphereRotation, CanonicalGate, ControlledGate, MatrixGate from opensquirrel.utils import get_matrix @@ -59,3 +63,31 @@ def test_matrix_gate() -> None: [0, 0, 0, 0, 0, 0, 0, 1], ], ) + + +@pytest.mark.parametrize( + ("axis", "expected_matrix"), + [ + ((0, 0, 0), np.eye(4)), + ( + (1 / 2, 0, 0), + np.array( + [ + [1 / sqrt(2), 0, 0, -1j / sqrt(2)], + [0, 1 / sqrt(2), -1j / sqrt(2), 0], + [0, -1j / sqrt(2), 1 / sqrt(2), 0], + [-1j / sqrt(2), 0, 0, 1 / sqrt(2)], + ] + ), + ), + ((1 / 2, 1 / 2, 0), np.array([[1, 0, 0, 0], [0, 0, -1j, 0], [0, -1j, 0, 0], [0, 0, 0, 1]])), + ( + (1 / 2, 1 / 2, 1 / 2), + np.exp(-1j * np.pi / 4) * np.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]), + ), + ], +) +def test_canonical_gate(axis: AxisLike, expected_matrix: NDArray[Any]) -> None: + gate = CanonicalGate(0, 1, axis) + + np.testing.assert_almost_equal(get_matrix(gate, 2), expected_matrix) diff --git a/tox.ini b/tox.ini index 79bfcda6..e5301fe7 100644 --- a/tox.ini +++ b/tox.ini @@ -33,4 +33,4 @@ commands = [testenv:test] description = run unit tests commands = - uv run pytest . -vv + uv run pytest . -vv --cov --cov-report=term-missing --cov-report=xml diff --git a/uv.lock b/uv.lock index e2687e43..04ef22aa 100644 --- a/uv.lock +++ b/uv.lock @@ -1,19 +1,25 @@ version = 1 revision = 3 -requires-python = "==3.9.*" +requires-python = ">=3.9.0" +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.11' and python_full_version < '3.14'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] [[package]] name = "adaptive" version = "1.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cloudpickle" }, - { name = "loky" }, - { name = "scipy" }, - { name = "sortedcollections" }, - { name = "sortedcontainers" }, - { name = "typing-extensions" }, - { name = "versioningit" }, + { name = "cloudpickle", marker = "python_full_version < '3.10'" }, + { name = "loky", marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "sortedcollections", marker = "python_full_version < '3.10'" }, + { name = "sortedcontainers", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "versioningit", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/11/6b/42c5e5e5e4698665409ff2fc99ed0e74f52f91039faf33f79af89bf6319c/adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294", size = 112954, upload-time = "2025-03-03T22:38:51.58Z" } wheels = [ @@ -34,10 +40,10 @@ name = "anyio" version = "4.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, { name = "sniffio" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } wheels = [ @@ -58,22 +64,62 @@ name = "argon2-cffi" version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "argon2-cffi-bindings" }, + { name = "argon2-cffi-bindings", version = "21.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "argon2-cffi-bindings", version = "25.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, ] 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 = "21.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", +] +dependencies = [ + { name = "cffi", marker = "python_full_version >= '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911, upload-time = "2021-12-01T08:52:55.68Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658, upload-time = "2021-12-01T09:09:17.016Z" }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583, upload-time = "2021-12-01T09:09:19.546Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168, upload-time = "2021-12-01T09:09:21.445Z" }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709, upload-time = "2021-12-01T09:09:18.182Z" }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613, upload-time = "2021-12-01T09:09:22.741Z" }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583, upload-time = "2021-12-01T09:09:24.177Z" }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475, upload-time = "2021-12-01T09:09:26.673Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698, upload-time = "2021-12-01T09:09:27.87Z" }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817, upload-time = "2021-12-01T09:09:30.267Z" }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104, upload-time = "2021-12-01T09:09:31.335Z" }, +] + [[package]] name = "argon2-cffi-bindings" version = "25.1.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11' and python_full_version < '3.14'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", +] dependencies = [ - { name = "cffi" }, + { name = "cffi", marker = "python_full_version < '3.14'" }, ] 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" }, @@ -84,6 +130,11 @@ wheels = [ { 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]] @@ -128,7 +179,7 @@ name = "async-lru" version = "2.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } wheels = [ @@ -159,6 +210,11 @@ version = "5.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" }, { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, ] @@ -197,10 +253,10 @@ name = "broadbean" version = "0.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "schema" }, - { name = "versioningit" }, + { name = "matplotlib", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "schema", marker = "python_full_version < '3.10'" }, + { name = "versioningit", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/c9/c64ec69941544561f503fe092f2f32b9117252b2dd22b90368787d2316a2/broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c", size = 44803, upload-time = "2024-03-06T22:15:44.076Z" } wheels = [ @@ -230,7 +286,7 @@ name = "cf-xarray" version = "0.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "xarray" }, + { name = "xarray", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/a1/58cc7f4c72c144fcb720395c244fd36df33ddc0bdd67fbb1c38037cd068c/cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb", size = 506942, upload-time = "2024-07-17T10:07:46.518Z" } wheels = [ @@ -246,6 +302,52 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191, upload-time = "2024-09-04T20:43:30.027Z" }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592, upload-time = "2024-09-04T20:43:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024, upload-time = "2024-09-04T20:43:34.186Z" }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188, upload-time = "2024-09-04T20:43:36.286Z" }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571, upload-time = "2024-09-04T20:43:38.586Z" }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687, upload-time = "2024-09-04T20:43:40.084Z" }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211, upload-time = "2024-09-04T20:43:41.526Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325, upload-time = "2024-09-04T20:43:43.117Z" }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784, upload-time = "2024-09-04T20:43:45.256Z" }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564, upload-time = "2024-09-04T20:43:46.779Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804, upload-time = "2024-09-04T20:43:48.186Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299, upload-time = "2024-09-04T20:43:49.812Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220, upload-time = "2024-09-04T20:45:01.577Z" }, { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605, upload-time = "2024-09-04T20:45:03.837Z" }, { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910, upload-time = "2024-09-04T20:45:05.315Z" }, @@ -265,10 +367,26 @@ name = "cftime" version = "1.6.4.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/c8/1155d1d58003105307c7e5985f422ae5bcb2ca0cbc553cc828f3c5a934a7/cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f", size = 54631, upload-time = "2024-10-22T18:48:34.194Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/70/e3/1a56832b13ce0c5f3b798bf7bc60d4550fa1c514e04b613f9b0e48edc535/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d9bdeb9174962c9ca00015190bfd693de6b0ec3ec0b3dbc35c693a4f48efdcc", size = 1252052, upload-time = "2024-10-22T18:47:44.25Z" }, + { url = "https://files.pythonhosted.org/packages/5c/aa/f62ce24417ecb19f5ba1aa1dbe72394d11f11f5e53fc53497ccfaab83d3c/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e735cfd544878eb94d0108ff5a093bd1a332dba90f979a31a357756d609a90d5", size = 1289731, upload-time = "2024-10-22T18:47:46.52Z" }, + { url = "https://files.pythonhosted.org/packages/e4/21/0cf99e16e9953d17cc37286201922d07f17ffc1743dbc50d0c9e6f98ddda/cftime-1.6.4.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dcd1b140bf50da6775c56bd7ca179e84bd258b2f159b53eefd5c514b341f2bf", size = 1317229, upload-time = "2024-10-22T18:47:47.754Z" }, + { url = "https://files.pythonhosted.org/packages/68/0f/95ce359a3bd91a8ec9b79d4961753053c72a5115e820a072d451568684c3/cftime-1.6.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:e60b8f24b20753f7548f410f7510e28b941f336f84bd34e3cfd7874af6e70281", size = 189078, upload-time = "2024-10-22T18:47:48.867Z" }, + { url = "https://files.pythonhosted.org/packages/55/c6/72f8fb5ee057f33ab747ba361f1396d2839a4689669aabd6217bc38430f7/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ebdfd81726b0cfb8b524309224fa952898dfa177c13d5f6af5b18cefbf497d", size = 1379075, upload-time = "2024-10-22T18:47:53.338Z" }, + { url = "https://files.pythonhosted.org/packages/77/81/6b30815698ede50f89013f25e46d66ed3a290b8a2d6b97f95bacbbe1eb5c/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ea0965a4c87739aebd84fe8eed966e5809d10065eeffd35c99c274b6f8da15", size = 1415218, upload-time = "2024-10-22T18:47:54.763Z" }, + { url = "https://files.pythonhosted.org/packages/24/0d/73ab09a32da1478d3ef5f4ab6c59d42f2db2a2383b427c87e05ad81b71ad/cftime-1.6.4.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:800a18aea4e8cb2b206450397cb8a53b154798738af3cdd3c922ce1ca198b0e6", size = 1450704, upload-time = "2024-10-22T18:47:56.035Z" }, + { url = "https://files.pythonhosted.org/packages/79/b1/6551603f8ea31de55913c84e4def3c36670563bdea6e195fcc4b6225ddf7/cftime-1.6.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:5dcfc872f455db1f12eabe3c3ba98e93757cd60ed3526a53246e966ccde46c8a", size = 190200, upload-time = "2024-10-22T18:47:58.036Z" }, + { url = "https://files.pythonhosted.org/packages/9b/60/0db884c76311ecaaf31f628aa9358beae5fcb0fbbdc2eb0b790a93aa258f/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf17a1b36f62e9e73c4c9363dd811e1bbf1170f5ac26d343fb26012ccf482908", size = 1320215, upload-time = "2024-10-22T18:48:02.275Z" }, + { url = "https://files.pythonhosted.org/packages/8d/7d/2d5fc7af06da4f3bdea59a204f741bf7a30bc5019355991b2f083e557e4e/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e18021f421aa26527bad8688c1acf0c85fa72730beb6efce969c316743294f2", size = 1367426, upload-time = "2024-10-22T18:48:03.57Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ab/e8b26d05323fc5629356c82a7f64026248f121ea1361b49df441bbc8f2d7/cftime-1.6.4.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5835b9d622f9304d1c23a35603a0f068739f428d902860f25e6e7e5a1b7cd8ea", size = 1385593, upload-time = "2024-10-22T18:48:04.918Z" }, + { url = "https://files.pythonhosted.org/packages/af/7b/ca72a075a3f660315b031d62d39a3e9cfef71f7929da2621d5120077a75f/cftime-1.6.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:7f50bf0d1b664924aaee636eb2933746b942417d1f8b82ab6c1f6e8ba0da6885", size = 178918, upload-time = "2024-10-22T18:48:06.195Z" }, + { url = "https://files.pythonhosted.org/packages/ca/90/f5b26949899decce262fc76a1e64915b92050473114e0160cd6f7297f854/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da367b23eea7cf4df071c88e014a1600d6c5bbf22e3393a4af409903fa397e28", size = 1318113, upload-time = "2024-10-22T18:48:11.465Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f8/6f13d37abb7ade46e65a08acc31af776a96dde0eb569e05d4c4b01422ba6/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0", size = 1366034, upload-time = "2024-10-22T18:48:13.154Z" }, + { url = "https://files.pythonhosted.org/packages/fa/08/335cb17f3b708f9a24f96ca4abb00889c7aa20b0ae273313e7c11faf1f97/cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4", size = 1390156, upload-time = "2024-10-22T18:48:15.22Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2d/980323fb5ec1ef369604b61ba259a41d0336cc1a85b639ed7bd210bd1290/cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259", size = 178496, upload-time = "2024-10-22T18:48:16.8Z" }, { url = "https://files.pythonhosted.org/packages/0c/42/faa2137f268211ab3977997494cc1fa7f2883578cc2c42c3e8daf27ec375/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652700130dbcca3ae36dbb5b61ff360e62aa09fabcabc42ec521091a14389901", size = 1254873, upload-time = "2024-10-22T18:48:28.813Z" }, { url = "https://files.pythonhosted.org/packages/e2/e1/365495f6224ed2af76aa46d0a2e2611991486ef1a4655e7b2a48df706899/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a7fb6cc541a027dab37fdeb695f8a2b21cd7d200be606f81b5abc38f2391e2", size = 1290854, upload-time = "2024-10-22T18:48:30.21Z" }, { url = "https://files.pythonhosted.org/packages/74/ee/9bc0c5d2f2be8305c3eae4b1f7b2fc88f314170c4c5a8cb80634311b68ed/cftime-1.6.4.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc2c0abe2dbd147e1b1e6d0f3de19a5ea8b04956acc204830fd8418066090989", size = 1315314, upload-time = "2024-10-22T18:48:31.63Z" }, @@ -290,6 +408,61 @@ version = "3.4.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/98/f3b8013223728a99b908c9344da3aa04ee6e3fa235f19409033eda92fb78/charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72", size = 207695, upload-time = "2025-08-09T07:55:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/21/40/5188be1e3118c82dcb7c2a5ba101b783822cfb413a0268ed3be0468532de/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe", size = 147153, upload-time = "2025-08-09T07:55:38.467Z" }, + { url = "https://files.pythonhosted.org/packages/37/60/5d0d74bc1e1380f0b72c327948d9c2aca14b46a9efd87604e724260f384c/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601", size = 160428, upload-time = "2025-08-09T07:55:40.072Z" }, + { url = "https://files.pythonhosted.org/packages/85/9a/d891f63722d9158688de58d050c59dc3da560ea7f04f4c53e769de5140f5/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c", size = 157627, upload-time = "2025-08-09T07:55:41.706Z" }, + { url = "https://files.pythonhosted.org/packages/65/1a/7425c952944a6521a9cfa7e675343f83fd82085b8af2b1373a2409c683dc/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2", size = 152388, upload-time = "2025-08-09T07:55:43.262Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c9/a2c9c2a355a8594ce2446085e2ec97fd44d323c684ff32042e2a6b718e1d/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0", size = 150077, upload-time = "2025-08-09T07:55:44.903Z" }, + { url = "https://files.pythonhosted.org/packages/3b/38/20a1f44e4851aa1c9105d6e7110c9d020e093dfa5836d712a5f074a12bf7/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0", size = 161631, upload-time = "2025-08-09T07:55:46.346Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fa/384d2c0f57edad03d7bec3ebefb462090d8905b4ff5a2d2525f3bb711fac/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0", size = 159210, upload-time = "2025-08-09T07:55:47.539Z" }, + { url = "https://files.pythonhosted.org/packages/33/9e/eca49d35867ca2db336b6ca27617deed4653b97ebf45dfc21311ce473c37/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a", size = 153739, upload-time = "2025-08-09T07:55:48.744Z" }, + { url = "https://files.pythonhosted.org/packages/2a/91/26c3036e62dfe8de8061182d33be5025e2424002125c9500faff74a6735e/charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f", size = 99825, upload-time = "2025-08-09T07:55:50.305Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c6/f05db471f81af1fa01839d44ae2a8bfeec8d2a8b4590f16c4e7393afd323/charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669", size = 107452, upload-time = "2025-08-09T07:55:51.461Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, + { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, + { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, + { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, + { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, + { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, + { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, + { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, { url = "https://files.pythonhosted.org/packages/c2/ca/9a0983dd5c8e9733565cf3db4df2b0a2e9a82659fd8aa2a868ac6e4a991f/charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05", size = 207520, upload-time = "2025-08-09T07:57:11.026Z" }, { url = "https://files.pythonhosted.org/packages/39/c6/99271dc37243a4f925b09090493fb96c9333d7992c6187f5cfe5312008d2/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e", size = 147307, upload-time = "2025-08-09T07:57:12.4Z" }, { url = "https://files.pythonhosted.org/packages/e4/69/132eab043356bba06eb333cc2cc60c6340857d0a2e4ca6dc2b51312886b3/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99", size = 160448, upload-time = "2025-08-09T07:57:13.712Z" }, @@ -339,8 +512,8 @@ name = "columnar" version = "1.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "toolz" }, - { name = "wcwidth" }, + { name = "toolz", marker = "python_full_version < '3.10'" }, + { name = "wcwidth", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/0d/a0b2fd781050d29c9df64ac6df30b5f18b775724b79779f56fc5a8298fe9/Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72", size = 11386, upload-time = "2021-12-27T21:58:56.123Z" } wheels = [ @@ -361,10 +534,48 @@ name = "contourpy" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370, upload-time = "2024-08-27T21:00:03.328Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460, upload-time = "2024-08-27T20:50:22.536Z" }, + { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623, upload-time = "2024-08-27T20:50:28.806Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761, upload-time = "2024-08-27T20:50:35.126Z" }, + { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015, upload-time = "2024-08-27T20:50:40.318Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672, upload-time = "2024-08-27T20:50:55.643Z" }, + { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688, upload-time = "2024-08-27T20:51:11.293Z" }, + { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145, upload-time = "2024-08-27T20:51:15.2Z" }, + { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019, upload-time = "2024-08-27T20:51:19.365Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443, upload-time = "2024-08-27T20:51:33.675Z" }, + { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548, upload-time = "2024-08-27T20:51:39.322Z" }, + { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118, upload-time = "2024-08-27T20:51:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162, upload-time = "2024-08-27T20:51:49.683Z" }, + { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396, upload-time = "2024-08-27T20:52:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297, upload-time = "2024-08-27T20:52:21.843Z" }, + { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808, upload-time = "2024-08-27T20:52:25.163Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181, upload-time = "2024-08-27T20:52:29.13Z" }, + { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177, upload-time = "2024-08-27T20:52:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735, upload-time = "2024-08-27T20:52:51.05Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679, upload-time = "2024-08-27T20:52:58.473Z" }, + { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549, upload-time = "2024-08-27T20:53:06.593Z" }, + { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068, upload-time = "2024-08-27T20:53:23.442Z" }, + { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833, upload-time = "2024-08-27T20:53:39.243Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681, upload-time = "2024-08-27T20:53:43.05Z" }, + { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283, upload-time = "2024-08-27T20:53:47.232Z" }, + { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184, upload-time = "2024-08-27T20:54:00.225Z" }, + { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262, upload-time = "2024-08-27T20:54:05.234Z" }, + { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806, upload-time = "2024-08-27T20:54:09.889Z" }, + { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710, upload-time = "2024-08-27T20:54:14.536Z" }, + { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107, upload-time = "2024-08-27T20:54:29.735Z" }, + { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458, upload-time = "2024-08-27T20:54:45.507Z" }, + { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643, upload-time = "2024-08-27T20:55:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301, upload-time = "2024-08-27T20:55:56.509Z" }, + { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188, upload-time = "2024-08-27T20:55:00.184Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644, upload-time = "2024-08-27T20:55:05.673Z" }, + { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141, upload-time = "2024-08-27T20:55:11.047Z" }, + { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469, upload-time = "2024-08-27T20:55:15.914Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894, upload-time = "2024-08-27T20:55:31.553Z" }, + { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829, upload-time = "2024-08-27T20:55:47.837Z" }, { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167, upload-time = "2024-08-27T20:56:10.034Z" }, { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279, upload-time = "2024-08-27T20:56:15.41Z" }, { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519, upload-time = "2024-08-27T20:56:21.813Z" }, @@ -373,6 +584,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773, upload-time = "2024-08-27T20:56:58.58Z" }, { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353, upload-time = "2024-08-27T20:57:02.718Z" }, { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817, upload-time = "2024-08-27T20:57:06.328Z" }, + { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008, upload-time = "2024-08-27T20:57:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690, upload-time = "2024-08-27T20:57:19.321Z" }, { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099, upload-time = "2024-08-27T20:57:28.58Z" }, { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838, upload-time = "2024-08-27T20:57:32.913Z" }, ] @@ -383,6 +596,82 @@ version = "7.10.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d6/4e/08b493f1f1d8a5182df0044acc970799b58a8d289608e0d891a03e9d269a/coverage-7.10.4.tar.gz", hash = "sha256:25f5130af6c8e7297fd14634955ba9e1697f47143f289e2a23284177c0061d27", size = 823798, upload-time = "2025-08-17T00:26:43.314Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/f4/350759710db50362685f922259c140592dba15eb4e2325656a98413864d9/coverage-7.10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d92d6edb0ccafd20c6fbf9891ca720b39c2a6a4b4a6f9cf323ca2c986f33e475", size = 216403, upload-time = "2025-08-17T00:24:19.083Z" }, + { url = "https://files.pythonhosted.org/packages/29/7e/e467c2bb4d5ecfd166bfd22c405cce4c50de2763ba1d78e2729c59539a42/coverage-7.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7202da14dc0236884fcc45665ffb2d79d4991a53fbdf152ab22f69f70923cc22", size = 216802, upload-time = "2025-08-17T00:24:21.824Z" }, + { url = "https://files.pythonhosted.org/packages/62/ab/2accdd1ccfe63b890e5eb39118f63c155202df287798364868a2884a50af/coverage-7.10.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ada418633ae24ec8d0fcad5efe6fc7aa3c62497c6ed86589e57844ad04365674", size = 243558, upload-time = "2025-08-17T00:24:23.569Z" }, + { url = "https://files.pythonhosted.org/packages/43/04/c14c33d0cfc0f4db6b3504d01a47f4c798563d932a836fd5f2dbc0521d3d/coverage-7.10.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b828e33eca6c3322adda3b5884456f98c435182a44917ded05005adfa1415500", size = 245370, upload-time = "2025-08-17T00:24:24.858Z" }, + { url = "https://files.pythonhosted.org/packages/99/71/147053061f1f51c1d3b3d040c3cb26876964a3a0dca0765d2441411ca568/coverage-7.10.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:802793ba397afcfdbe9f91f89d65ae88b958d95edc8caf948e1f47d8b6b2b606", size = 247228, upload-time = "2025-08-17T00:24:26.167Z" }, + { url = "https://files.pythonhosted.org/packages/cc/92/7ef882205d4d4eb502e6154ee7122c1a1b1ce3f29d0166921e0fb550a5d3/coverage-7.10.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d0b23512338c54101d3bf7a1ab107d9d75abda1d5f69bc0887fd079253e4c27e", size = 245270, upload-time = "2025-08-17T00:24:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/ab/3d/297a20603abcc6c7d89d801286eb477b0b861f3c5a4222730f1c9837be3e/coverage-7.10.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f36b7dcf72d06a8c5e2dd3aca02be2b1b5db5f86404627dff834396efce958f2", size = 243287, upload-time = "2025-08-17T00:24:28.697Z" }, + { url = "https://files.pythonhosted.org/packages/65/f9/b04111438f41f1ddd5dc88706d5f8064ae5bb962203c49fe417fa23a362d/coverage-7.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fce316c367a1dc2c411821365592eeb335ff1781956d87a0410eae248188ba51", size = 244164, upload-time = "2025-08-17T00:24:30.393Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e5/c7d9eb7a9ea66cf92d069077719fb2b07782dcd7050b01a9b88766b52154/coverage-7.10.4-cp310-cp310-win32.whl", hash = "sha256:8c5dab29fc8070b3766b5fc85f8d89b19634584429a2da6d42da5edfadaf32ae", size = 218917, upload-time = "2025-08-17T00:24:31.67Z" }, + { url = "https://files.pythonhosted.org/packages/66/30/4d9d3b81f5a836b31a7428b8a25e6d490d4dca5ff2952492af130153c35c/coverage-7.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:4b0d114616f0fccb529a1817457d5fb52a10e106f86c5fb3b0bd0d45d0d69b93", size = 219822, upload-time = "2025-08-17T00:24:32.89Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ba/2c9817e62018e7d480d14f684c160b3038df9ff69c5af7d80e97d143e4d1/coverage-7.10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:05d5f98ec893d4a2abc8bc5f046f2f4367404e7e5d5d18b83de8fde1093ebc4f", size = 216514, upload-time = "2025-08-17T00:24:34.188Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5a/093412a959a6b6261446221ba9fb23bb63f661a5de70b5d130763c87f916/coverage-7.10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9267efd28f8994b750d171e58e481e3bbd69e44baed540e4c789f8e368b24b88", size = 216914, upload-time = "2025-08-17T00:24:35.881Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1f/2fdf4a71cfe93b07eae845ebf763267539a7d8b7e16b062f959d56d7e433/coverage-7.10.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4456a039fdc1a89ea60823d0330f1ac6f97b0dbe9e2b6fb4873e889584b085fb", size = 247308, upload-time = "2025-08-17T00:24:37.61Z" }, + { url = "https://files.pythonhosted.org/packages/ba/16/33f6cded458e84f008b9f6bc379609a6a1eda7bffe349153b9960803fc11/coverage-7.10.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c2bfbd2a9f7e68a21c5bd191be94bfdb2691ac40d325bac9ef3ae45ff5c753d9", size = 249241, upload-time = "2025-08-17T00:24:38.919Z" }, + { url = "https://files.pythonhosted.org/packages/84/98/9c18e47c889be58339ff2157c63b91a219272503ee32b49d926eea2337f2/coverage-7.10.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab7765f10ae1df7e7fe37de9e64b5a269b812ee22e2da3f84f97b1c7732a0d8", size = 251346, upload-time = "2025-08-17T00:24:40.507Z" }, + { url = "https://files.pythonhosted.org/packages/6d/07/00a6c0d53e9a22d36d8e95ddd049b860eef8f4b9fd299f7ce34d8e323356/coverage-7.10.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a09b13695166236e171ec1627ff8434b9a9bae47528d0ba9d944c912d33b3d2", size = 249037, upload-time = "2025-08-17T00:24:41.904Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0e/1e1b944d6a6483d07bab5ef6ce063fcf3d0cc555a16a8c05ebaab11f5607/coverage-7.10.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5c9e75dfdc0167d5675e9804f04a56b2cf47fb83a524654297000b578b8adcb7", size = 247090, upload-time = "2025-08-17T00:24:43.193Z" }, + { url = "https://files.pythonhosted.org/packages/62/43/2ce5ab8a728b8e25ced077111581290ffaef9efaf860a28e25435ab925cf/coverage-7.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c751261bfe6481caba15ec005a194cb60aad06f29235a74c24f18546d8377df0", size = 247732, upload-time = "2025-08-17T00:24:44.906Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f3/706c4a24f42c1c5f3a2ca56637ab1270f84d9e75355160dc34d5e39bb5b7/coverage-7.10.4-cp311-cp311-win32.whl", hash = "sha256:051c7c9e765f003c2ff6e8c81ccea28a70fb5b0142671e4e3ede7cebd45c80af", size = 218961, upload-time = "2025-08-17T00:24:46.241Z" }, + { url = "https://files.pythonhosted.org/packages/e8/aa/6b9ea06e0290bf1cf2a2765bba89d561c5c563b4e9db8298bf83699c8b67/coverage-7.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:1a647b152f10be08fb771ae4a1421dbff66141e3d8ab27d543b5eb9ea5af8e52", size = 219851, upload-time = "2025-08-17T00:24:48.795Z" }, + { url = "https://files.pythonhosted.org/packages/8b/be/f0dc9ad50ee183369e643cd7ed8f2ef5c491bc20b4c3387cbed97dd6e0d1/coverage-7.10.4-cp311-cp311-win_arm64.whl", hash = "sha256:b09b9e4e1de0d406ca9f19a371c2beefe3193b542f64a6dd40cfcf435b7d6aa0", size = 218530, upload-time = "2025-08-17T00:24:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/781c9e4dd57cabda2a28e2ce5b00b6be416015265851060945a5ed4bd85e/coverage-7.10.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a1f0264abcabd4853d4cb9b3d164adbf1565da7dab1da1669e93f3ea60162d79", size = 216706, upload-time = "2025-08-17T00:24:51.528Z" }, + { url = "https://files.pythonhosted.org/packages/6a/8c/51255202ca03d2e7b664770289f80db6f47b05138e06cce112b3957d5dfd/coverage-7.10.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:536cbe6b118a4df231b11af3e0f974a72a095182ff8ec5f4868c931e8043ef3e", size = 216939, upload-time = "2025-08-17T00:24:53.171Z" }, + { url = "https://files.pythonhosted.org/packages/06/7f/df11131483698660f94d3c847dc76461369782d7a7644fcd72ac90da8fd0/coverage-7.10.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9a4c0d84134797b7bf3f080599d0cd501471f6c98b715405166860d79cfaa97e", size = 248429, upload-time = "2025-08-17T00:24:54.934Z" }, + { url = "https://files.pythonhosted.org/packages/eb/fa/13ac5eda7300e160bf98f082e75f5c5b4189bf3a883dd1ee42dbedfdc617/coverage-7.10.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7c155fc0f9cee8c9803ea0ad153ab6a3b956baa5d4cd993405dc0b45b2a0b9e0", size = 251178, upload-time = "2025-08-17T00:24:56.353Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/f63b56a58ad0bec68a840e7be6b7ed9d6f6288d790760647bb88f5fea41e/coverage-7.10.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5f2ab6e451d4b07855d8bcf063adf11e199bff421a4ba57f5bb95b7444ca62", size = 252313, upload-time = "2025-08-17T00:24:57.692Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b6/79338f1ea27b01266f845afb4485976211264ab92407d1c307babe3592a7/coverage-7.10.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:685b67d99b945b0c221be0780c336b303a7753b3e0ec0d618c795aada25d5e7a", size = 250230, upload-time = "2025-08-17T00:24:59.293Z" }, + { url = "https://files.pythonhosted.org/packages/bc/93/3b24f1da3e0286a4dc5832427e1d448d5296f8287464b1ff4a222abeeeb5/coverage-7.10.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0c079027e50c2ae44da51c2e294596cbc9dbb58f7ca45b30651c7e411060fc23", size = 248351, upload-time = "2025-08-17T00:25:00.676Z" }, + { url = "https://files.pythonhosted.org/packages/de/5f/d59412f869e49dcc5b89398ef3146c8bfaec870b179cc344d27932e0554b/coverage-7.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3749aa72b93ce516f77cf5034d8e3c0dfd45c6e8a163a602ede2dc5f9a0bb927", size = 249788, upload-time = "2025-08-17T00:25:02.354Z" }, + { url = "https://files.pythonhosted.org/packages/cc/52/04a3b733f40a0cc7c4a5b9b010844111dbf906df3e868b13e1ce7b39ac31/coverage-7.10.4-cp312-cp312-win32.whl", hash = "sha256:fecb97b3a52fa9bcd5a7375e72fae209088faf671d39fae67261f37772d5559a", size = 219131, upload-time = "2025-08-17T00:25:03.79Z" }, + { url = "https://files.pythonhosted.org/packages/83/dd/12909fc0b83888197b3ec43a4ac7753589591c08d00d9deda4158df2734e/coverage-7.10.4-cp312-cp312-win_amd64.whl", hash = "sha256:26de58f355626628a21fe6a70e1e1fad95702dafebfb0685280962ae1449f17b", size = 219939, upload-time = "2025-08-17T00:25:05.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/c7/058bb3220fdd6821bada9685eadac2940429ab3c97025ce53549ff423cc1/coverage-7.10.4-cp312-cp312-win_arm64.whl", hash = "sha256:67e8885408f8325198862bc487038a4980c9277d753cb8812510927f2176437a", size = 218572, upload-time = "2025-08-17T00:25:06.897Z" }, + { url = "https://files.pythonhosted.org/packages/46/b0/4a3662de81f2ed792a4e425d59c4ae50d8dd1d844de252838c200beed65a/coverage-7.10.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b8e1d2015d5dfdbf964ecef12944c0c8c55b885bb5c0467ae8ef55e0e151233", size = 216735, upload-time = "2025-08-17T00:25:08.617Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e8/e2dcffea01921bfffc6170fb4406cffb763a3b43a047bbd7923566708193/coverage-7.10.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:25735c299439018d66eb2dccf54f625aceb78645687a05f9f848f6e6c751e169", size = 216982, upload-time = "2025-08-17T00:25:10.384Z" }, + { url = "https://files.pythonhosted.org/packages/9d/59/cc89bb6ac869704d2781c2f5f7957d07097c77da0e8fdd4fd50dbf2ac9c0/coverage-7.10.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:715c06cb5eceac4d9b7cdf783ce04aa495f6aff657543fea75c30215b28ddb74", size = 247981, upload-time = "2025-08-17T00:25:11.854Z" }, + { url = "https://files.pythonhosted.org/packages/aa/23/3da089aa177ceaf0d3f96754ebc1318597822e6387560914cc480086e730/coverage-7.10.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e017ac69fac9aacd7df6dc464c05833e834dc5b00c914d7af9a5249fcccf07ef", size = 250584, upload-time = "2025-08-17T00:25:13.483Z" }, + { url = "https://files.pythonhosted.org/packages/ad/82/e8693c368535b4e5fad05252a366a1794d481c79ae0333ed943472fd778d/coverage-7.10.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bad180cc40b3fccb0f0e8c702d781492654ac2580d468e3ffc8065e38c6c2408", size = 251856, upload-time = "2025-08-17T00:25:15.27Z" }, + { url = "https://files.pythonhosted.org/packages/56/19/8b9cb13292e602fa4135b10a26ac4ce169a7fc7c285ff08bedd42ff6acca/coverage-7.10.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:becbdcd14f685fada010a5f792bf0895675ecf7481304fe159f0cd3f289550bd", size = 250015, upload-time = "2025-08-17T00:25:16.759Z" }, + { url = "https://files.pythonhosted.org/packages/10/e7/e5903990ce089527cf1c4f88b702985bd65c61ac245923f1ff1257dbcc02/coverage-7.10.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0b485ca21e16a76f68060911f97ebbe3e0d891da1dbbce6af7ca1ab3f98b9097", size = 247908, upload-time = "2025-08-17T00:25:18.232Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c9/7d464f116df1df7fe340669af1ddbe1a371fc60f3082ff3dc837c4f1f2ab/coverage-7.10.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6c1d098ccfe8e1e0a1ed9a0249138899948afd2978cbf48eb1cc3fcd38469690", size = 249525, upload-time = "2025-08-17T00:25:20.141Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/722e0cdbf6c19e7235c2020837d4e00f3b07820fd012201a983238cc3a30/coverage-7.10.4-cp313-cp313-win32.whl", hash = "sha256:8630f8af2ca84b5c367c3df907b1706621abe06d6929f5045fd628968d421e6e", size = 219173, upload-time = "2025-08-17T00:25:21.56Z" }, + { url = "https://files.pythonhosted.org/packages/97/7e/aa70366f8275955cd51fa1ed52a521c7fcebcc0fc279f53c8c1ee6006dfe/coverage-7.10.4-cp313-cp313-win_amd64.whl", hash = "sha256:f68835d31c421736be367d32f179e14ca932978293fe1b4c7a6a49b555dff5b2", size = 219969, upload-time = "2025-08-17T00:25:23.501Z" }, + { url = "https://files.pythonhosted.org/packages/ac/96/c39d92d5aad8fec28d4606556bfc92b6fee0ab51e4a548d9b49fb15a777c/coverage-7.10.4-cp313-cp313-win_arm64.whl", hash = "sha256:6eaa61ff6724ca7ebc5326d1fae062d85e19b38dd922d50903702e6078370ae7", size = 218601, upload-time = "2025-08-17T00:25:25.295Z" }, + { url = "https://files.pythonhosted.org/packages/79/13/34d549a6177bd80fa5db758cb6fd3057b7ad9296d8707d4ab7f480b0135f/coverage-7.10.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:702978108876bfb3d997604930b05fe769462cc3000150b0e607b7b444f2fd84", size = 217445, upload-time = "2025-08-17T00:25:27.129Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/433da866359bf39bf595f46d134ff2d6b4293aeea7f3328b6898733b0633/coverage-7.10.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e8f978e8c5521d9c8f2086ac60d931d583fab0a16f382f6eb89453fe998e2484", size = 217676, upload-time = "2025-08-17T00:25:28.641Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d7/2b99aa8737f7801fd95222c79a4ebc8c5dd4460d4bed7ef26b17a60c8d74/coverage-7.10.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:df0ac2ccfd19351411c45e43ab60932b74472e4648b0a9edf6a3b58846e246a9", size = 259002, upload-time = "2025-08-17T00:25:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/08/cf/86432b69d57debaef5abf19aae661ba8f4fcd2882fa762e14added4bd334/coverage-7.10.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:73a0d1aaaa3796179f336448e1576a3de6fc95ff4f07c2d7251d4caf5d18cf8d", size = 261178, upload-time = "2025-08-17T00:25:31.517Z" }, + { url = "https://files.pythonhosted.org/packages/23/78/85176593f4aa6e869cbed7a8098da3448a50e3fac5cb2ecba57729a5220d/coverage-7.10.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:873da6d0ed6b3ffc0bc01f2c7e3ad7e2023751c0d8d86c26fe7322c314b031dc", size = 263402, upload-time = "2025-08-17T00:25:33.339Z" }, + { url = "https://files.pythonhosted.org/packages/88/1d/57a27b6789b79abcac0cc5805b31320d7a97fa20f728a6a7c562db9a3733/coverage-7.10.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c6446c75b0e7dda5daa876a1c87b480b2b52affb972fedd6c22edf1aaf2e00ec", size = 260957, upload-time = "2025-08-17T00:25:34.795Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e5/3e5ddfd42835c6def6cd5b2bdb3348da2e34c08d9c1211e91a49e9fd709d/coverage-7.10.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6e73933e296634e520390c44758d553d3b573b321608118363e52113790633b9", size = 258718, upload-time = "2025-08-17T00:25:36.259Z" }, + { url = "https://files.pythonhosted.org/packages/1a/0b/d364f0f7ef111615dc4e05a6ed02cac7b6f2ac169884aa57faeae9eb5fa0/coverage-7.10.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52073d4b08d2cb571234c8a71eb32af3c6923149cf644a51d5957ac128cf6aa4", size = 259848, upload-time = "2025-08-17T00:25:37.754Z" }, + { url = "https://files.pythonhosted.org/packages/10/c6/bbea60a3b309621162e53faf7fac740daaf083048ea22077418e1ecaba3f/coverage-7.10.4-cp313-cp313t-win32.whl", hash = "sha256:e24afb178f21f9ceb1aefbc73eb524769aa9b504a42b26857243f881af56880c", size = 219833, upload-time = "2025-08-17T00:25:39.252Z" }, + { url = "https://files.pythonhosted.org/packages/44/a5/f9f080d49cfb117ddffe672f21eab41bd23a46179a907820743afac7c021/coverage-7.10.4-cp313-cp313t-win_amd64.whl", hash = "sha256:be04507ff1ad206f4be3d156a674e3fb84bbb751ea1b23b142979ac9eebaa15f", size = 220897, upload-time = "2025-08-17T00:25:40.772Z" }, + { url = "https://files.pythonhosted.org/packages/46/89/49a3fc784fa73d707f603e586d84a18c2e7796707044e9d73d13260930b7/coverage-7.10.4-cp313-cp313t-win_arm64.whl", hash = "sha256:f3e3ff3f69d02b5dad67a6eac68cc9c71ae343b6328aae96e914f9f2f23a22e2", size = 219160, upload-time = "2025-08-17T00:25:42.229Z" }, + { url = "https://files.pythonhosted.org/packages/b5/22/525f84b4cbcff66024d29f6909d7ecde97223f998116d3677cfba0d115b5/coverage-7.10.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a59fe0af7dd7211ba595cf7e2867458381f7e5d7b4cffe46274e0b2f5b9f4eb4", size = 216717, upload-time = "2025-08-17T00:25:43.875Z" }, + { url = "https://files.pythonhosted.org/packages/a6/58/213577f77efe44333a416d4bcb251471e7f64b19b5886bb515561b5ce389/coverage-7.10.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3a6c35c5b70f569ee38dc3350cd14fdd0347a8b389a18bb37538cc43e6f730e6", size = 216994, upload-time = "2025-08-17T00:25:45.405Z" }, + { url = "https://files.pythonhosted.org/packages/17/85/34ac02d0985a09472f41b609a1d7babc32df87c726c7612dc93d30679b5a/coverage-7.10.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:acb7baf49f513554c4af6ef8e2bd6e8ac74e6ea0c7386df8b3eb586d82ccccc4", size = 248038, upload-time = "2025-08-17T00:25:46.981Z" }, + { url = "https://files.pythonhosted.org/packages/47/4f/2140305ec93642fdaf988f139813629cbb6d8efa661b30a04b6f7c67c31e/coverage-7.10.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a89afecec1ed12ac13ed203238b560cbfad3522bae37d91c102e690b8b1dc46c", size = 250575, upload-time = "2025-08-17T00:25:48.613Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b5/41b5784180b82a083c76aeba8f2c72ea1cb789e5382157b7dc852832aea2/coverage-7.10.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:480442727f464407d8ade6e677b7f21f3b96a9838ab541b9a28ce9e44123c14e", size = 251927, upload-time = "2025-08-17T00:25:50.881Z" }, + { url = "https://files.pythonhosted.org/packages/78/ca/c1dd063e50b71f5aea2ebb27a1c404e7b5ecf5714c8b5301f20e4e8831ac/coverage-7.10.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a89bf193707f4a17f1ed461504031074d87f035153239f16ce86dfb8f8c7ac76", size = 249930, upload-time = "2025-08-17T00:25:52.422Z" }, + { url = "https://files.pythonhosted.org/packages/8d/66/d8907408612ffee100d731798e6090aedb3ba766ecf929df296c1a7ee4fb/coverage-7.10.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:3ddd912c2fc440f0fb3229e764feec85669d5d80a988ff1b336a27d73f63c818", size = 247862, upload-time = "2025-08-17T00:25:54.316Z" }, + { url = "https://files.pythonhosted.org/packages/29/db/53cd8ec8b1c9c52d8e22a25434785bfc2d1e70c0cfb4d278a1326c87f741/coverage-7.10.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8a538944ee3a42265e61c7298aeba9ea43f31c01271cf028f437a7b4075592cf", size = 249360, upload-time = "2025-08-17T00:25:55.833Z" }, + { url = "https://files.pythonhosted.org/packages/4f/75/5ec0a28ae4a0804124ea5a5becd2b0fa3adf30967ac656711fb5cdf67c60/coverage-7.10.4-cp314-cp314-win32.whl", hash = "sha256:fd2e6002be1c62476eb862b8514b1ba7e7684c50165f2a8d389e77da6c9a2ebd", size = 219449, upload-time = "2025-08-17T00:25:57.984Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ab/66e2ee085ec60672bf5250f11101ad8143b81f24989e8c0e575d16bb1e53/coverage-7.10.4-cp314-cp314-win_amd64.whl", hash = "sha256:ec113277f2b5cf188d95fb66a65c7431f2b9192ee7e6ec9b72b30bbfb53c244a", size = 220246, upload-time = "2025-08-17T00:25:59.868Z" }, + { url = "https://files.pythonhosted.org/packages/37/3b/00b448d385f149143190846217797d730b973c3c0ec2045a7e0f5db3a7d0/coverage-7.10.4-cp314-cp314-win_arm64.whl", hash = "sha256:9744954bfd387796c6a091b50d55ca7cac3d08767795b5eec69ad0f7dbf12d38", size = 218825, upload-time = "2025-08-17T00:26:01.44Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2e/55e20d3d1ce00b513efb6fd35f13899e1c6d4f76c6cbcc9851c7227cd469/coverage-7.10.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5af4829904dda6aabb54a23879f0f4412094ba9ef153aaa464e3c1b1c9bc98e6", size = 217462, upload-time = "2025-08-17T00:26:03.014Z" }, + { url = "https://files.pythonhosted.org/packages/47/b3/aab1260df5876f5921e2c57519e73a6f6eeacc0ae451e109d44ee747563e/coverage-7.10.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7bba5ed85e034831fac761ae506c0644d24fd5594727e174b5a73aff343a7508", size = 217675, upload-time = "2025-08-17T00:26:04.606Z" }, + { url = "https://files.pythonhosted.org/packages/67/23/1cfe2aa50c7026180989f0bfc242168ac7c8399ccc66eb816b171e0ab05e/coverage-7.10.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d57d555b0719834b55ad35045de6cc80fc2b28e05adb6b03c98479f9553b387f", size = 259176, upload-time = "2025-08-17T00:26:06.159Z" }, + { url = "https://files.pythonhosted.org/packages/9d/72/5882b6aeed3f9de7fc4049874fd7d24213bf1d06882f5c754c8a682606ec/coverage-7.10.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ba62c51a72048bb1ea72db265e6bd8beaabf9809cd2125bbb5306c6ce105f214", size = 261341, upload-time = "2025-08-17T00:26:08.137Z" }, + { url = "https://files.pythonhosted.org/packages/1b/70/a0c76e3087596ae155f8e71a49c2c534c58b92aeacaf4d9d0cbbf2dde53b/coverage-7.10.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0acf0c62a6095f07e9db4ec365cc58c0ef5babb757e54745a1aa2ea2a2564af1", size = 263600, upload-time = "2025-08-17T00:26:11.045Z" }, + { url = "https://files.pythonhosted.org/packages/cb/5f/27e4cd4505b9a3c05257fb7fc509acbc778c830c450cb4ace00bf2b7bda7/coverage-7.10.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1033bf0f763f5cf49ffe6594314b11027dcc1073ac590b415ea93463466deec", size = 261036, upload-time = "2025-08-17T00:26:12.693Z" }, + { url = "https://files.pythonhosted.org/packages/02/d6/cf2ae3a7f90ab226ea765a104c4e76c5126f73c93a92eaea41e1dc6a1892/coverage-7.10.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:92c29eff894832b6a40da1789b1f252305af921750b03ee4535919db9179453d", size = 258794, upload-time = "2025-08-17T00:26:14.261Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b1/39f222eab0d78aa2001cdb7852aa1140bba632db23a5cfd832218b496d6c/coverage-7.10.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:822c4c830989c2093527e92acd97be4638a44eb042b1bdc0e7a278d84a070bd3", size = 259946, upload-time = "2025-08-17T00:26:15.899Z" }, + { url = "https://files.pythonhosted.org/packages/74/b2/49d82acefe2fe7c777436a3097f928c7242a842538b190f66aac01f29321/coverage-7.10.4-cp314-cp314t-win32.whl", hash = "sha256:e694d855dac2e7cf194ba33653e4ba7aad7267a802a7b3fc4347d0517d5d65cd", size = 220226, upload-time = "2025-08-17T00:26:17.566Z" }, + { url = "https://files.pythonhosted.org/packages/06/b0/afb942b6b2fc30bdbc7b05b087beae11c2b0daaa08e160586cf012b6ad70/coverage-7.10.4-cp314-cp314t-win_amd64.whl", hash = "sha256:efcc54b38ef7d5bfa98050f220b415bc5bb3d432bd6350a861cf6da0ede2cdcd", size = 221346, upload-time = "2025-08-17T00:26:19.311Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/e0531c9d1525cb6eac5b5733c76f27f3053ee92665f83f8899516fea6e76/coverage-7.10.4-cp314-cp314t-win_arm64.whl", hash = "sha256:6f3a3496c0fa26bfac4ebc458747b778cff201c8ae94fa05e1391bab0dbc473c", size = 219368, upload-time = "2025-08-17T00:26:21.011Z" }, { url = "https://files.pythonhosted.org/packages/d1/61/4e38d86d31a268778d69bb3fd1fc88e0c7a78ffdee48f2b5d9e028a3dce5/coverage-7.10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48fd4d52600c2a9d5622e52dfae674a7845c5e1dceaf68b88c99feb511fbcfd6", size = 216393, upload-time = "2025-08-17T00:26:22.648Z" }, { url = "https://files.pythonhosted.org/packages/17/16/5c2fdb1d213f57e0ff107738397aff68582fa90a6575ca165b49eae5a809/coverage-7.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:56217b470d09d69e6b7dcae38200f95e389a77db801cb129101697a4553b18b6", size = 216779, upload-time = "2025-08-17T00:26:24.422Z" }, { url = "https://files.pythonhosted.org/packages/26/99/3aca6b4028e3667ccfbaef9cfd9dca8d85eb14deee7868373cc48cbee553/coverage-7.10.4-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:44ac3f21a6e28c5ff7f7a47bca5f87885f6a1e623e637899125ba47acd87334d", size = 243214, upload-time = "2025-08-17T00:26:26.468Z" }, @@ -398,7 +687,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli" }, + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] @@ -415,14 +704,14 @@ name = "dask" version = "2024.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "cloudpickle" }, - { name = "fsspec" }, - { name = "importlib-metadata" }, - { name = "packaging" }, - { name = "partd" }, - { name = "pyyaml" }, - { name = "toolz" }, + { name = "click", marker = "python_full_version < '3.10'" }, + { name = "cloudpickle", marker = "python_full_version < '3.10'" }, + { name = "fsspec", marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "partd", marker = "python_full_version < '3.10'" }, + { name = "pyyaml", marker = "python_full_version < '3.10'" }, + { name = "toolz", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/2e/568a422d907745a3a897a732c83d05a3923d8cfa2511a6abea2a0e19994e/dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee", size = 9895684, upload-time = "2024-08-06T20:23:54.464Z" } wheels = [ @@ -434,8 +723,8 @@ name = "dataclasses-json" version = "0.6.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow" }, - { name = "typing-inspect" }, + { name = "marshmallow", marker = "python_full_version < '3.10'" }, + { name = "typing-inspect", marker = "python_full_version < '3.10'" }, ] 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 = [ @@ -448,6 +737,22 @@ version = "1.8.16" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ca/d4/722d0bcc7986172ac2ef3c979ad56a1030e3afd44ced136d45f8142b1f4a/debugpy-1.8.16.tar.gz", hash = "sha256:31e69a1feb1cf6b51efbed3f6c9b0ef03bc46ff050679c4be7ea6d2e23540870", size = 1643809, upload-time = "2025-08-06T18:00:02.647Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/fd/f1b75ebc61d90882595b81d808efd3573c082e1c3407850d9dccac4ae904/debugpy-1.8.16-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2a3958fb9c2f40ed8ea48a0d34895b461de57a1f9862e7478716c35d76f56c65", size = 2085511, upload-time = "2025-08-06T18:00:05.067Z" }, + { url = "https://files.pythonhosted.org/packages/df/5e/c5c1934352871128b30a1a144a58b5baa546e1b57bd47dbed788bad4431c/debugpy-1.8.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5ca7314042e8a614cc2574cd71f6ccd7e13a9708ce3c6d8436959eae56f2378", size = 3562094, upload-time = "2025-08-06T18:00:06.66Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d5/2ebe42377e5a78dc786afc25e61ee83c5628d63f32dfa41092597d52fe83/debugpy-1.8.16-cp310-cp310-win32.whl", hash = "sha256:8624a6111dc312ed8c363347a0b59c5acc6210d897e41a7c069de3c53235c9a6", size = 5234277, upload-time = "2025-08-06T18:00:08.429Z" }, + { url = "https://files.pythonhosted.org/packages/54/f8/e774ad16a60b9913213dbabb7472074c5a7b0d84f07c1f383040a9690057/debugpy-1.8.16-cp310-cp310-win_amd64.whl", hash = "sha256:fee6db83ea5c978baf042440cfe29695e1a5d48a30147abf4c3be87513609817", size = 5266011, upload-time = "2025-08-06T18:00:10.162Z" }, + { url = "https://files.pythonhosted.org/packages/63/d6/ad70ba8b49b23fa286fb21081cf732232cc19374af362051da9c7537ae52/debugpy-1.8.16-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:67371b28b79a6a12bcc027d94a06158f2fde223e35b5c4e0783b6f9d3b39274a", size = 2184063, upload-time = "2025-08-06T18:00:11.885Z" }, + { url = "https://files.pythonhosted.org/packages/aa/49/7b03e88dea9759a4c7910143f87f92beb494daaae25560184ff4ae883f9e/debugpy-1.8.16-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2abae6dd02523bec2dee16bd6b0781cccb53fd4995e5c71cc659b5f45581898", size = 3134837, upload-time = "2025-08-06T18:00:13.782Z" }, + { url = "https://files.pythonhosted.org/packages/5d/52/b348930316921de7565fbe37a487d15409041713004f3d74d03eb077dbd4/debugpy-1.8.16-cp311-cp311-win32.whl", hash = "sha256:f8340a3ac2ed4f5da59e064aa92e39edd52729a88fbde7bbaa54e08249a04493", size = 5159142, upload-time = "2025-08-06T18:00:15.391Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ef/9aa9549ce1e10cea696d980292e71672a91ee4a6a691ce5f8629e8f48c49/debugpy-1.8.16-cp311-cp311-win_amd64.whl", hash = "sha256:70f5fcd6d4d0c150a878d2aa37391c52de788c3dc680b97bdb5e529cb80df87a", size = 5183117, upload-time = "2025-08-06T18:00:17.251Z" }, + { url = "https://files.pythonhosted.org/packages/61/fb/0387c0e108d842c902801bc65ccc53e5b91d8c169702a9bbf4f7efcedf0c/debugpy-1.8.16-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:b202e2843e32e80b3b584bcebfe0e65e0392920dc70df11b2bfe1afcb7a085e4", size = 2511822, upload-time = "2025-08-06T18:00:18.526Z" }, + { url = "https://files.pythonhosted.org/packages/37/44/19e02745cae22bf96440141f94e15a69a1afaa3a64ddfc38004668fcdebf/debugpy-1.8.16-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64473c4a306ba11a99fe0bb14622ba4fbd943eb004847d9b69b107bde45aa9ea", size = 4230135, upload-time = "2025-08-06T18:00:19.997Z" }, + { url = "https://files.pythonhosted.org/packages/f3/0b/19b1ba5ee4412f303475a2c7ad5858efb99c90eae5ec627aa6275c439957/debugpy-1.8.16-cp312-cp312-win32.whl", hash = "sha256:833a61ed446426e38b0dd8be3e9d45ae285d424f5bf6cd5b2b559c8f12305508", size = 5281271, upload-time = "2025-08-06T18:00:21.281Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e0/bc62e2dc141de53bd03e2c7cb9d7011de2e65e8bdcdaa26703e4d28656ba/debugpy-1.8.16-cp312-cp312-win_amd64.whl", hash = "sha256:75f204684581e9ef3dc2f67687c3c8c183fde2d6675ab131d94084baf8084121", size = 5323149, upload-time = "2025-08-06T18:00:23.033Z" }, + { url = "https://files.pythonhosted.org/packages/62/66/607ab45cc79e60624df386e233ab64a6d8d39ea02e7f80e19c1d451345bb/debugpy-1.8.16-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:85df3adb1de5258dca910ae0bb185e48c98801ec15018a263a92bb06be1c8787", size = 2496157, upload-time = "2025-08-06T18:00:24.361Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a0/c95baae08a75bceabb79868d663a0736655e427ab9c81fb848da29edaeac/debugpy-1.8.16-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee89e948bc236a5c43c4214ac62d28b29388453f5fd328d739035e205365f0b", size = 4222491, upload-time = "2025-08-06T18:00:25.806Z" }, + { url = "https://files.pythonhosted.org/packages/5b/2f/1c8db6ddd8a257c3cd2c46413b267f1d5fa3df910401c899513ce30392d6/debugpy-1.8.16-cp313-cp313-win32.whl", hash = "sha256:cf358066650439847ec5ff3dae1da98b5461ea5da0173d93d5e10f477c94609a", size = 5281126, upload-time = "2025-08-06T18:00:27.207Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ba/c3e154ab307366d6c5a9c1b68de04914e2ce7fa2f50d578311d8cc5074b2/debugpy-1.8.16-cp313-cp313-win_amd64.whl", hash = "sha256:b5aea1083f6f50023e8509399d7dc6535a351cc9f2e8827d1e093175e4d9fa4c", size = 5323094, upload-time = "2025-08-06T18:00:29.03Z" }, { url = "https://files.pythonhosted.org/packages/35/40/acdad5944e508d5e936979ad3e96e56b78ba6d7fa75aaffc4426cb921e12/debugpy-1.8.16-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:135ccd2b1161bade72a7a099c9208811c137a150839e970aeaf121c2467debe8", size = 2086696, upload-time = "2025-08-06T18:00:36.469Z" }, { url = "https://files.pythonhosted.org/packages/2d/eb/8d6a2cf3b29e272b5dfebe6f384f8457977d4fd7a02dab2cae4d421dbae2/debugpy-1.8.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:211238306331a9089e253fd997213bc4a4c65f949271057d6695953254095376", size = 3557329, upload-time = "2025-08-06T18:00:38.189Z" }, { url = "https://files.pythonhosted.org/packages/00/7b/63b9cc4d3c6980c702911c0f6a9748933ce4e4f16ae0ec4fdef7690f6662/debugpy-1.8.16-cp39-cp39-win32.whl", hash = "sha256:88eb9ffdfb59bf63835d146c183d6dba1f722b3ae2a5f4b9fc03e925b3358922", size = 5235114, upload-time = "2025-08-06T18:00:39.586Z" }, @@ -469,7 +774,7 @@ name = "deepdiff" version = "8.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "orderly-set" }, + { name = "orderly-set", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/03/65/57d5047a03700ccb3eaab9d86837168701b1527fdd2bd9fe7a212bee83b1/deepdiff-8.6.0.tar.gz", hash = "sha256:6197216c2d777c3106a9989055c230e25848e599b26dcbcdc66226bd8d7fe901", size = 631801, upload-time = "2025-08-08T19:00:27.563Z" } wheels = [ @@ -517,7 +822,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -566,6 +871,42 @@ version = "4.59.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/11/7f/29c9c3fe4246f6ad96fee52b88d0dc3a863c7563b0afc959e36d78b965dc/fonttools-4.59.1.tar.gz", hash = "sha256:74995b402ad09822a4c8002438e54940d9f1ecda898d2bb057729d7da983e4cb", size = 3534394, upload-time = "2025-08-14T16:28:14.266Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/f6/4a13657c9ca134ac62d9a68e4b3412b95b059537eab459cc1df653f45862/fonttools-4.59.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f9721a564978a10d5c12927f99170d18e9a32e5a727c61eae56f956a4d118b", size = 4846293, upload-time = "2025-08-14T16:26:15.586Z" }, + { url = "https://files.pythonhosted.org/packages/69/e3/9f0c8c30eaea5b2d891bd95b000381b3b2dcaa89b5a064cce25157aba973/fonttools-4.59.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8c8758a7d97848fc8b514b3d9b4cb95243714b2f838dde5e1e3c007375de6214", size = 4776105, upload-time = "2025-08-14T16:26:17.624Z" }, + { url = "https://files.pythonhosted.org/packages/e2/73/1e6a06e2eecdc7b054b035507694b4f480e83b94dcb0d19f8a010d95350a/fonttools-4.59.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2aeb829ad9d41a2ef17cab8bb5d186049ba38a840f10352e654aa9062ec32dc1", size = 4825142, upload-time = "2025-08-14T16:26:19.936Z" }, + { url = "https://files.pythonhosted.org/packages/72/7d/a512521ec44c37bda27d08193e79e48a510a073554c30400ccc600494830/fonttools-4.59.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac216a2980a2d2b3b88c68a24f8a9bfb203e2490e991b3238502ad8f1e7bfed0", size = 4935220, upload-time = "2025-08-14T16:26:22.22Z" }, + { url = "https://files.pythonhosted.org/packages/62/f1/71f9a9c4e5df44d861975538a5c56b58f1662cd32ebbea5a02eb86028fc1/fonttools-4.59.1-cp310-cp310-win32.whl", hash = "sha256:d31dc137ed8ec71dbc446949eba9035926e6e967b90378805dcf667ff57cabb1", size = 2216883, upload-time = "2025-08-14T16:26:24.037Z" }, + { url = "https://files.pythonhosted.org/packages/f9/6d/92b2e3e0350bb3ef88024ae19513c12cee61896220e3df421c47a439af28/fonttools-4.59.1-cp310-cp310-win_amd64.whl", hash = "sha256:5265bc52ed447187d39891b5f21d7217722735d0de9fe81326566570d12851a9", size = 2261310, upload-time = "2025-08-14T16:26:26.184Z" }, + { url = "https://files.pythonhosted.org/packages/a4/cc/fcbb606dd6871f457ac32f281c20bcd6cc77d9fce77b5a4e2b2afab1f500/fonttools-4.59.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39dfd42cc2dc647b2c5469bc7a5b234d9a49e72565b96dd14ae6f11c2c59ef15", size = 5022222, upload-time = "2025-08-14T16:26:32.447Z" }, + { url = "https://files.pythonhosted.org/packages/61/96/c0b1cf2b74d08eb616a80dbf5564351fe4686147291a25f7dce8ace51eb3/fonttools-4.59.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b11bc177a0d428b37890825d7d025040d591aa833f85f8d8878ed183354f47df", size = 4966512, upload-time = "2025-08-14T16:26:34.621Z" }, + { url = "https://files.pythonhosted.org/packages/a4/26/51ce2e3e0835ffc2562b1b11d1fb9dafd0aca89c9041b64a9e903790a761/fonttools-4.59.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b9b4c35b3be45e5bc774d3fc9608bbf4f9a8d371103b858c80edbeed31dd5aa", size = 5001645, upload-time = "2025-08-14T16:26:36.876Z" }, + { url = "https://files.pythonhosted.org/packages/36/11/ef0b23f4266349b6d5ccbd1a07b7adc998d5bce925792aa5d1ec33f593e3/fonttools-4.59.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:01158376b8a418a0bae9625c476cebfcfcb5e6761e9d243b219cd58341e7afbb", size = 5113777, upload-time = "2025-08-14T16:26:39.002Z" }, + { url = "https://files.pythonhosted.org/packages/d0/da/b398fe61ef433da0a0472cdb5d4399124f7581ffe1a31b6242c91477d802/fonttools-4.59.1-cp311-cp311-win32.whl", hash = "sha256:cf7c5089d37787387123f1cb8f1793a47c5e1e3d1e4e7bfbc1cc96e0f925eabe", size = 2215076, upload-time = "2025-08-14T16:26:41.196Z" }, + { url = "https://files.pythonhosted.org/packages/94/bd/e2624d06ab94e41c7c77727b2941f1baed7edb647e63503953e6888020c9/fonttools-4.59.1-cp311-cp311-win_amd64.whl", hash = "sha256:c866eef7a0ba320486ade6c32bfc12813d1a5db8567e6904fb56d3d40acc5116", size = 2262779, upload-time = "2025-08-14T16:26:43.483Z" }, + { url = "https://files.pythonhosted.org/packages/8b/b1/890360a7e3d04a30ba50b267aca2783f4c1364363797e892e78a4f036076/fonttools-4.59.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d601b153e51a5a6221f0d4ec077b6bfc6ac35bfe6c19aeaa233d8990b2b71726", size = 4909215, upload-time = "2025-08-14T16:26:49.682Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ec/2490599550d6c9c97a44c1e36ef4de52d6acf742359eaa385735e30c05c4/fonttools-4.59.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c735e385e30278c54f43a0d056736942023c9043f84ee1021eff9fd616d17693", size = 4951958, upload-time = "2025-08-14T16:26:51.616Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/bd053f6f7634234a9b9805ff8ae4f32df4f2168bee23cafd1271ba9915a9/fonttools-4.59.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1017413cdc8555dce7ee23720da490282ab7ec1cf022af90a241f33f9a49afc4", size = 4894738, upload-time = "2025-08-14T16:26:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a1/3cd12a010d288325a7cfcf298a84825f0f9c29b01dee1baba64edfe89257/fonttools-4.59.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5c6d8d773470a5107052874341ed3c487c16ecd179976d81afed89dea5cd7406", size = 5045983, upload-time = "2025-08-14T16:26:56.153Z" }, + { url = "https://files.pythonhosted.org/packages/a2/af/8a2c3f6619cc43cf87951405337cc8460d08a4e717bb05eaa94b335d11dc/fonttools-4.59.1-cp312-cp312-win32.whl", hash = "sha256:2a2d0d33307f6ad3a2086a95dd607c202ea8852fa9fb52af9b48811154d1428a", size = 2203407, upload-time = "2025-08-14T16:26:58.165Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f2/a19b874ddbd3ebcf11d7e25188ef9ac3f68b9219c62263acb34aca8cde05/fonttools-4.59.1-cp312-cp312-win_amd64.whl", hash = "sha256:0b9e4fa7eaf046ed6ac470f6033d52c052481ff7a6e0a92373d14f556f298dc0", size = 2251561, upload-time = "2025-08-14T16:27:00.646Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8387876a8011caec52d327d5e5bca705d9399ec4b17afb8b431ec50d47c17d23", size = 4889254, upload-time = "2025-08-14T16:27:07.02Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e5/54a6dc811eba018d022ca2e8bd6f2969291f9586ccf9a22a05fc55f91250/fonttools-4.59.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb13823a74b3a9204a8ed76d3d6d5ec12e64cc5bc44914eb9ff1cdac04facd43", size = 4949109, upload-time = "2025-08-14T16:27:09.3Z" }, + { url = "https://files.pythonhosted.org/packages/db/15/b05c72a248a95bea0fd05fbd95acdf0742945942143fcf961343b7a3663a/fonttools-4.59.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e1ca10da138c300f768bb68e40e5b20b6ecfbd95f91aac4cc15010b6b9d65455", size = 4888428, upload-time = "2025-08-14T16:27:11.514Z" }, + { url = "https://files.pythonhosted.org/packages/63/71/c7d6840f858d695adc0c4371ec45e3fb1c8e060b276ba944e2800495aca4/fonttools-4.59.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2beb5bfc4887a3130f8625349605a3a45fe345655ce6031d1bac11017454b943", size = 5032668, upload-time = "2025-08-14T16:27:13.872Z" }, + { url = "https://files.pythonhosted.org/packages/90/54/57be4aca6f1312e2bc4d811200dd822325794e05bdb26eeff0976edca651/fonttools-4.59.1-cp313-cp313-win32.whl", hash = "sha256:419f16d750d78e6d704bfe97b48bba2f73b15c9418f817d0cb8a9ca87a5b94bf", size = 2201832, upload-time = "2025-08-14T16:27:16.126Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1f/1899a6175a5f900ed8730a0d64f53ca1b596ed7609bfda033cf659114258/fonttools-4.59.1-cp313-cp313-win_amd64.whl", hash = "sha256:c536f8a852e8d3fa71dde1ec03892aee50be59f7154b533f0bf3c1174cfd5126", size = 2250673, upload-time = "2025-08-14T16:27:18.033Z" }, + { url = "https://files.pythonhosted.org/packages/17/41/b3ba43f78afb321e2e50232c87304c8d0f5ab39b64389b8286cc39cdb824/fonttools-4.59.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57a3708ca6bfccb790f585fa6d8f29432ec329618a09ff94c16bcb3c55994643", size = 4832020, upload-time = "2025-08-14T16:27:24.214Z" }, + { url = "https://files.pythonhosted.org/packages/67/b1/3af871c7fb325a68938e7ce544ca48bfd2c6bb7b357f3c8252933b29100a/fonttools-4.59.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:729367c91eb1ee84e61a733acc485065a00590618ca31c438e7dd4d600c01486", size = 4930687, upload-time = "2025-08-14T16:27:26.484Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4f/299fc44646b30d9ef03ffaa78b109c7bd32121f0d8f10009ee73ac4514bc/fonttools-4.59.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f8ef66ac6db450193ed150e10b3b45dde7aded10c5d279968bc63368027f62b", size = 4875794, upload-time = "2025-08-14T16:27:28.887Z" }, + { url = "https://files.pythonhosted.org/packages/90/cf/a0a3d763ab58f5f81ceff104ddb662fd9da94248694862b9c6cbd509fdd5/fonttools-4.59.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:075f745d539a998cd92cb84c339a82e53e49114ec62aaea8307c80d3ad3aef3a", size = 4985780, upload-time = "2025-08-14T16:27:30.858Z" }, + { url = "https://files.pythonhosted.org/packages/72/c5/ba76511aaae143d89c29cd32ce30bafb61c477e8759a1590b8483f8065f8/fonttools-4.59.1-cp314-cp314-win32.whl", hash = "sha256:c2b0597522d4c5bb18aa5cf258746a2d4a90f25878cbe865e4d35526abd1b9fc", size = 2205610, upload-time = "2025-08-14T16:27:32.578Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/b250e69d6caf35bc65cddbf608be0662d741c248f2e7503ab01081fc267e/fonttools-4.59.1-cp314-cp314-win_amd64.whl", hash = "sha256:e9ad4ce044e3236f0814c906ccce8647046cc557539661e35211faadf76f283b", size = 2255376, upload-time = "2025-08-14T16:27:34.653Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ff/d14b4c283879e8cb57862d9624a34fe6522b6fcdd46ccbfc58900958794a/fonttools-4.59.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e54437651e1440ee53a95e6ceb6ee440b67a3d348c76f45f4f48de1a5ecab019", size = 4831575, upload-time = "2025-08-14T16:27:41.885Z" }, + { url = "https://files.pythonhosted.org/packages/9c/04/a277d9a584a49d98ca12d3b2c6663bdf333ae97aaa83bd0cdabf7c5a6c84/fonttools-4.59.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6065fdec8ff44c32a483fd44abe5bcdb40dd5e2571a5034b555348f2b3a52cea", size = 5069962, upload-time = "2025-08-14T16:27:44.284Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/3d2ae69d96c4cdee6dfe7598ca5519a1514487700ca3d7c49c5a1ad65308/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42052b56d176f8b315fbc09259439c013c0cb2109df72447148aeda677599612", size = 4942926, upload-time = "2025-08-14T16:27:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d3/c17379e0048d03ce26b38e4ab0e9a98280395b00529e093fe2d663ac0658/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bcd52eaa5c4c593ae9f447c1d13e7e4a00ca21d755645efa660b6999425b3c88", size = 4958678, upload-time = "2025-08-14T16:27:48.555Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/c5543a1540abdfb4d375e3ebeb84de365ab9b153ec14cb7db05f537dd1e7/fonttools-4.59.1-cp314-cp314t-win32.whl", hash = "sha256:02e4fdf27c550dded10fe038a5981c29f81cb9bc649ff2eaa48e80dab8998f97", size = 2266706, upload-time = "2025-08-14T16:27:50.556Z" }, + { url = "https://files.pythonhosted.org/packages/3e/99/85bff6e674226bc8402f983e365f07e76d990e7220ba72bcc738fef52391/fonttools-4.59.1-cp314-cp314t-win_amd64.whl", hash = "sha256:412a5fd6345872a7c249dac5bcce380393f40c1c316ac07f447bc17d51900922", size = 2329994, upload-time = "2025-08-14T16:27:52.36Z" }, { url = "https://files.pythonhosted.org/packages/72/df/63d586609002057d3e214f7d45c0c2bf0a5c5030f61d282dc39943546199/fonttools-4.59.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:58a8844f96cff35860647a65345bfca87f47a2494bfb4bef754e58c082511443", size = 4822086, upload-time = "2025-08-14T16:27:58.659Z" }, { url = "https://files.pythonhosted.org/packages/d2/82/d019c4499202c22fc6d8d122aad1175d2541289be76b8888546ac1f71d4a/fonttools-4.59.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f021cea6e36410874763f4a517a5e2d6ac36ca8f95521f3a9fdaad0fe73dc", size = 4755144, upload-time = "2025-08-14T16:28:00.71Z" }, { url = "https://files.pythonhosted.org/packages/7d/32/130226b1da79fc67f623707bd20394ea87ca1ea9d858fa0e8e7d38847ce7/fonttools-4.59.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf5fb864f80061a40c1747e0dbc4f6e738de58dd6675b07eb80bd06a93b063c4", size = 4804680, upload-time = "2025-08-14T16:28:02.676Z" }, @@ -631,8 +972,8 @@ name = "h5netcdf" version = "1.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py" }, - { name = "packaging" }, + { name = "h5py", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/a1/e3ca842fd0895fcfb21c754a18fd8cd7362d1625b3a93408c982c38f4ec1/h5netcdf-1.6.4.tar.gz", hash = "sha256:83db7e5eb9b822bed2c79050d6cf8f36ecbd1039f4252bd90fab200edcaaf67d", size = 65832, upload-time = "2025-08-05T06:26:56.707Z" } wheels = [ @@ -644,10 +985,22 @@ name = "h5py" version = "3.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5d/57/dfb3c5c3f1bf5f5ef2e59a22dec4ff1f3d7408b55bfcefcfb0ea69ef21c6/h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4", size = 424323, upload-time = "2025-06-06T14:06:15.01Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/cd/3dd38cdb7cc9266dc4d85f27f0261680cb62f553f1523167ad7454e32b11/h5py-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:016e89d3be4c44f8d5e115fab60548e518ecd9efe9fa5c5324505a90773e6f03", size = 4324677, upload-time = "2025-06-06T14:04:23.438Z" }, + { url = "https://files.pythonhosted.org/packages/b1/45/e1a754dc7cd465ba35e438e28557119221ac89b20aaebef48282654e3dc7/h5py-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1223b902ef0b5d90bcc8a4778218d6d6cd0f5561861611eda59fa6c52b922f4d", size = 4557272, upload-time = "2025-06-06T14:04:28.863Z" }, + { url = "https://files.pythonhosted.org/packages/5c/06/f9506c1531645829d302c420851b78bb717af808dde11212c113585fae42/h5py-3.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:852b81f71df4bb9e27d407b43071d1da330d6a7094a588efa50ef02553fa7ce4", size = 2866734, upload-time = "2025-06-06T14:04:33.5Z" }, + { url = "https://files.pythonhosted.org/packages/08/0c/5e6aaf221557314bc15ba0e0da92e40b24af97ab162076c8ae009320a42b/h5py-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c497600c0496548810047257e36360ff551df8b59156d3a4181072eed47d8ad", size = 4298002, upload-time = "2025-06-06T14:04:47.106Z" }, + { url = "https://files.pythonhosted.org/packages/21/d4/d461649cafd5137088fb7f8e78fdc6621bb0c4ff2c090a389f68e8edc136/h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:723a40ee6505bd354bfd26385f2dae7bbfa87655f4e61bab175a49d72ebfc06b", size = 4516618, upload-time = "2025-06-06T14:04:52.467Z" }, + { url = "https://files.pythonhosted.org/packages/db/0c/6c3f879a0f8e891625817637fad902da6e764e36919ed091dc77529004ac/h5py-3.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2744b520440a996f2dae97f901caa8a953afc055db4673a993f2d87d7f38713", size = 2874888, upload-time = "2025-06-06T14:04:56.95Z" }, + { url = "https://files.pythonhosted.org/packages/3f/19/c8bfe8543bfdd7ccfafd46d8cfd96fce53d6c33e9c7921f375530ee1d39a/h5py-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554ef0ced3571366d4d383427c00c966c360e178b5fb5ee5bb31a435c424db0c", size = 4708455, upload-time = "2025-06-06T14:05:11.528Z" }, + { url = "https://files.pythonhosted.org/packages/86/f9/f00de11c82c88bfc1ef22633557bfba9e271e0cb3189ad704183fc4a2644/h5py-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cbd41f4e3761f150aa5b662df991868ca533872c95467216f2bec5fcad84882", size = 4929422, upload-time = "2025-06-06T14:05:18.399Z" }, + { url = "https://files.pythonhosted.org/packages/7a/6d/6426d5d456f593c94b96fa942a9b3988ce4d65ebaf57d7273e452a7222e8/h5py-3.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:bf4897d67e613ecf5bdfbdab39a1158a64df105827da70ea1d90243d796d367f", size = 2862845, upload-time = "2025-06-06T14:05:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ce/3a21d87896bc7e3e9255e0ad5583ae31ae9e6b4b00e0bcb2a67e2b6acdbc/h5py-3.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8cbaf6910fa3983c46172666b0b8da7b7bd90d764399ca983236f2400436eeb", size = 4700675, upload-time = "2025-06-06T14:05:37.38Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ec/86f59025306dcc6deee5fda54d980d077075b8d9889aac80f158bd585f1b/h5py-3.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d90e6445ab7c146d7f7981b11895d70bc1dd91278a4f9f9028bc0c95e4a53f13", size = 4921632, upload-time = "2025-06-06T14:05:43.464Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6d/0084ed0b78d4fd3e7530c32491f2884140d9b06365dac8a08de726421d4a/h5py-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae18e3de237a7a830adb76aaa68ad438d85fe6e19e0d99944a3ce46b772c69b3", size = 2852929, upload-time = "2025-06-06T14:05:47.659Z" }, { url = "https://files.pythonhosted.org/packages/66/40/b423b57696514e05aa7bb06150ef96667d0e0006cc6de7ab52c71734ab51/h5py-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:573c33ad056ac7c1ab6d567b6db9df3ffc401045e3f605736218f96c1e0490c6", size = 4326368, upload-time = "2025-06-06T14:06:00.782Z" }, { url = "https://files.pythonhosted.org/packages/f7/07/e088f89f04fdbe57ddf9de377f857158d3daa38cf5d0fb20ef9bd489e313/h5py-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccbe17dc187c0c64178f1a10aa274ed3a57d055117588942b8a08793cc448216", size = 4559686, upload-time = "2025-06-06T14:06:07.416Z" }, { url = "https://files.pythonhosted.org/packages/b4/e4/fb8032d0e5480b1db9b419b5b50737b61bb3c7187c49d809975d62129fb0/h5py-3.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f025cf30ae738c4c4e38c7439a761a71ccfcce04c2b87b2a2ac64e8c5171d43", size = 2877166, upload-time = "2025-06-06T14:06:13.05Z" }, @@ -658,8 +1011,8 @@ name = "hickle" version = "5.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py" }, - { name = "numpy" }, + { name = "h5py", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/42/09a543153c1609b656f5c8e33210d6bdd1b7045c0d6e33bc96bb9afbb704/hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e", size = 117601, upload-time = "2024-03-30T09:15:08.818Z" } wheels = [ @@ -741,7 +1094,7 @@ name = "importlib-resources" version = "6.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } wheels = [ @@ -788,7 +1141,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "decorator" }, - { name = "exceptiongroup" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "jedi" }, { name = "matplotlib-inline" }, { name = "pexpect", marker = "sys_platform != 'win32'" }, @@ -796,7 +1149,7 @@ dependencies = [ { name = "pygments" }, { name = "stack-data" }, { name = "traitlets" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330, upload-time = "2023-11-27T09:58:34.596Z" } wheels = [ @@ -944,7 +1297,7 @@ name = "jupyter-client" version = "8.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jupyter-core" }, { name = "python-dateutil" }, { name = "pyzmq" }, @@ -1013,7 +1366,7 @@ name = "jupyter-lsp" version = "2.2.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jupyter-server" }, ] sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } @@ -1071,7 +1424,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "ipykernel" }, { name = "jinja2" }, { name = "jupyter-core" }, @@ -1081,7 +1434,7 @@ dependencies = [ { name = "notebook-shim" }, { name = "packaging" }, { name = "setuptools" }, - { name = "tomli" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "tornado" }, { name = "traitlets" }, ] @@ -1105,7 +1458,7 @@ version = "2.27.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "json5" }, { name = "jsonschema" }, @@ -1133,6 +1486,58 @@ version = "1.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286, upload-time = "2024-09-04T09:39:44.302Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109, upload-time = "2024-09-04T09:03:49.281Z" }, + { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814, upload-time = "2024-09-04T09:03:51.444Z" }, + { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881, upload-time = "2024-09-04T09:03:53.357Z" }, + { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972, upload-time = "2024-09-04T09:03:55.082Z" }, + { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787, upload-time = "2024-09-04T09:03:56.588Z" }, + { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212, upload-time = "2024-09-04T09:03:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399, upload-time = "2024-09-04T09:04:00.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688, upload-time = "2024-09-04T09:04:02.216Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493, upload-time = "2024-09-04T09:04:04.571Z" }, + { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191, upload-time = "2024-09-04T09:04:05.969Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644, upload-time = "2024-09-04T09:04:07.408Z" }, + { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877, upload-time = "2024-09-04T09:04:08.869Z" }, + { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347, upload-time = "2024-09-04T09:04:10.106Z" }, + { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260, upload-time = "2024-09-04T09:04:14.878Z" }, + { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589, upload-time = "2024-09-04T09:04:16.514Z" }, + { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080, upload-time = "2024-09-04T09:04:18.322Z" }, + { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049, upload-time = "2024-09-04T09:04:20.266Z" }, + { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376, upload-time = "2024-09-04T09:04:22.419Z" }, + { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231, upload-time = "2024-09-04T09:04:24.526Z" }, + { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634, upload-time = "2024-09-04T09:04:25.899Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024, upload-time = "2024-09-04T09:04:28.523Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484, upload-time = "2024-09-04T09:04:30.547Z" }, + { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078, upload-time = "2024-09-04T09:04:33.218Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645, upload-time = "2024-09-04T09:04:34.371Z" }, + { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022, upload-time = "2024-09-04T09:04:35.786Z" }, + { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536, upload-time = "2024-09-04T09:04:37.525Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296, upload-time = "2024-09-04T09:04:42.886Z" }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450, upload-time = "2024-09-04T09:04:46.284Z" }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168, upload-time = "2024-09-04T09:04:47.91Z" }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308, upload-time = "2024-09-04T09:04:49.465Z" }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186, upload-time = "2024-09-04T09:04:50.949Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877, upload-time = "2024-09-04T09:04:52.388Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204, upload-time = "2024-09-04T09:04:54.385Z" }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461, upload-time = "2024-09-04T09:04:56.307Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358, upload-time = "2024-09-04T09:04:57.922Z" }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119, upload-time = "2024-09-04T09:04:59.332Z" }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367, upload-time = "2024-09-04T09:05:00.804Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884, upload-time = "2024-09-04T09:05:01.924Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528, upload-time = "2024-09-04T09:05:02.983Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145, upload-time = "2024-09-04T09:05:07.919Z" }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448, upload-time = "2024-09-04T09:05:10.01Z" }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750, upload-time = "2024-09-04T09:05:11.598Z" }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175, upload-time = "2024-09-04T09:05:13.22Z" }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963, upload-time = "2024-09-04T09:05:15.925Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220, upload-time = "2024-09-04T09:05:17.434Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463, upload-time = "2024-09-04T09:05:18.997Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842, upload-time = "2024-09-04T09:05:21.299Z" }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635, upload-time = "2024-09-04T09:05:23.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556, upload-time = "2024-09-04T09:05:25.907Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364, upload-time = "2024-09-04T09:05:27.184Z" }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887, upload-time = "2024-09-04T09:05:28.372Z" }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530, upload-time = "2024-09-04T09:05:30.225Z" }, { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966, upload-time = "2024-09-04T09:05:59.855Z" }, { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044, upload-time = "2024-09-04T09:06:02.16Z" }, { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879, upload-time = "2024-09-04T09:06:03.908Z" }, @@ -1146,6 +1551,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980, upload-time = "2024-09-04T09:06:20.106Z" }, { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847, upload-time = "2024-09-04T09:06:21.407Z" }, { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494, upload-time = "2024-09-04T09:06:22.648Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257, upload-time = "2024-09-04T09:06:27.038Z" }, + { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906, upload-time = "2024-09-04T09:06:28.48Z" }, + { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951, upload-time = "2024-09-04T09:06:29.966Z" }, + { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715, upload-time = "2024-09-04T09:06:31.489Z" }, { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321, upload-time = "2024-09-04T09:06:47.557Z" }, { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776, upload-time = "2024-09-04T09:06:49.235Z" }, { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984, upload-time = "2024-09-04T09:06:51.336Z" }, @@ -1166,7 +1575,7 @@ name = "lazy-loader" version = "0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431, upload-time = "2024-04-05T13:03:12.261Z" } wheels = [ @@ -1181,6 +1590,26 @@ dependencies = [ { name = "numpy" }, ] wheels = [ + { url = "https://files.pythonhosted.org/packages/67/28/bbb9fdb69bc129a4ce3bbd2abe1f994bcb3c990a23a74958ee9ff2b67280/libqasm-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6146a6ee22c00542fc15323aaaca7105a2e45653193e73c97096ab86dec0560", size = 1270891, upload-time = "2025-07-28T14:02:40.297Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ec/25b6080c1e98785e5b953236f687e778d7725a28004cdcf9c6b64b904b05/libqasm-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5be0873afccab6ac6a07c396989949fc56cbbfea12e33c8c7497a01f1b1c4413", size = 1142070, upload-time = "2025-07-28T14:02:46.985Z" }, + { url = "https://files.pythonhosted.org/packages/57/b5/f9091c1c72c7fef49342599e846aa62d1f23d4777043a0b3473715072674/libqasm-1.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e113b59ef51e6c52c99dd32b669b7945062a65550ce544ae5ecd8b7f71ee985a", size = 1768091, upload-time = "2025-07-28T14:02:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/1d/29/584b1148d5f5dd1cf4a9cc682abba2e3ef1808604ad871a58ee837ba5d08/libqasm-1.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fe6e94cbe62697c7e44e809a9b5f396c37837f5348735366df099884f78a8a11", size = 1926442, upload-time = "2025-07-28T14:02:58.641Z" }, + { url = "https://files.pythonhosted.org/packages/63/ff/48333e38bd3ed6b17a0cee3e38e795e18c2b14088ce7634ebdcf1ae1e423/libqasm-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:600a7a54c3a60461d554105a9b62538d09aef75856cb0086545bbc93467ff837", size = 812874, upload-time = "2025-07-28T14:03:05.591Z" }, + { url = "https://files.pythonhosted.org/packages/25/20/8a26189e4f4c4d5977cdf41a5ef24341fc879ac5f47e4dbcdaef72448424/libqasm-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04492faa8ef32b5aafb35548f37cd9247acc62cd7b53c4f6362028435b36e1a6", size = 1270890, upload-time = "2025-07-28T14:02:42.162Z" }, + { url = "https://files.pythonhosted.org/packages/83/b3/0038765ce50e5ffef68f4334af690ae1883d57a381a81ce59e69bafcacfa/libqasm-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8a9bf76b3e88a0773476bceac443c79ff4f46d30ca13a97b886a013d76daf49", size = 1142070, upload-time = "2025-07-28T14:02:47.993Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1c/66462640c09dfbc993fc722057e7fabe924d28d18ec61a80547ed6b70d3a/libqasm-1.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8158b75eccb8d2347f3c2ccdf0b14f722d0d478936a2c41275165c77ada0bdd0", size = 1768073, upload-time = "2025-07-28T14:02:54.392Z" }, + { url = "https://files.pythonhosted.org/packages/49/39/cada9ff3a56af495f884c52633929548e2459cd6626eaea81704f822d5ec/libqasm-1.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c310e73f3b6f23acd2d308a46698c52bdee561d59dc0a8e455bf89ded24554a", size = 1926368, upload-time = "2025-07-28T14:03:00.793Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e8/a70987abfb70aa6be0642453cf429eb625f0acc4e275fbeaf0c1e5fb4087/libqasm-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:469e65c26b9da8943b367e66d48a4a8273286fe8ba40c73b088558c9756b291c", size = 812862, upload-time = "2025-07-28T14:03:06.616Z" }, + { url = "https://files.pythonhosted.org/packages/18/55/626a3d712f879962c869123e0ecc03297fd4e23f750c30228ee5d467f911/libqasm-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4bad23d47b7fa04b6975c425b81e4c75080bfe6a8553ab6f6f06f1213f1e2850", size = 1272644, upload-time = "2025-07-28T14:02:43.565Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1e/b5f09546616483db76217d8e55d2f4cb23582f3f7c62ffe94d02fa5ae0ae/libqasm-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f2e53598077a439349a01f365a7fe9f927a9153064ac2bd2efe9f9379dfb383", size = 1142704, upload-time = "2025-07-28T14:02:49.071Z" }, + { url = "https://files.pythonhosted.org/packages/16/b6/07c7e74f788f3ead7797e30101666f91e8efa9dbb37f279d791f6f77dc4e/libqasm-1.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ef94a3295bf28e4569d1178e6bcff8cb62c7b08e711c3360948946293e09dfe", size = 1768550, upload-time = "2025-07-28T14:02:55.425Z" }, + { url = "https://files.pythonhosted.org/packages/3a/20/eb668b9cc354854925fc4a54a9d5372bb45987c522ca03a0d84fa9fe63a9/libqasm-1.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1918872005ecffe837d55758ab5c2039a25e823b527cec14b5e60b694b987cd", size = 1926607, upload-time = "2025-07-28T14:03:01.975Z" }, + { url = "https://files.pythonhosted.org/packages/d3/19/088a391f7a3cab3084a0ec4dce7325fa9a699c8e86068afd61b923aae5dc/libqasm-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:8e14ebbfeaea9441d84b3950f472f5caea0a9ab3790bdd554141fb416899e566", size = 813203, upload-time = "2025-07-28T14:03:07.68Z" }, + { url = "https://files.pythonhosted.org/packages/73/29/3c5db5ec506df20475f4882df37ad8e23bf65eed2c6421a93c9d25cd884b/libqasm-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:832dd91d93af63f41f15bb15e20da895a92502aa9a7d5ddc89c4f1d34a521304", size = 1272644, upload-time = "2025-07-28T14:02:44.934Z" }, + { url = "https://files.pythonhosted.org/packages/85/8b/7cebede9916ee95734f3aa20f6b4e47aba8ac55a04e9170486a5218532f1/libqasm-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a51412e939aa9b5f329dffe050cf2483f81201489e51a6511dddf521c1d7c594", size = 1142704, upload-time = "2025-07-28T14:02:50.678Z" }, + { url = "https://files.pythonhosted.org/packages/32/5f/a92b65d8cbd96fa8201da49c191b521324d62112867d93137e70deef5944/libqasm-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca69e354a22d80c1ca7f6ae2a7dd095cb33fbc0b49de4afdf66463722321165d", size = 1768542, upload-time = "2025-07-28T14:02:56.488Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a1/ea55f32186f785213d82cbc92aae3d54083046dad182f6b7631ec2c636a7/libqasm-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c418cdb7cd84f78ef987c6ca55225f2f8ffdeec4283aeabca427346f40e1f741", size = 1926607, upload-time = "2025-07-28T14:03:03.027Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ef/6d32c19edd4d4f9f446cb0b086e4e6666fc0f2f4f4b8bec382fe0fa2cafc/libqasm-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:dfe354c3bffbb2404fd0e7c91c33845a5c06488771050e9f9ec76c2117752c4d", size = 813224, upload-time = "2025-07-28T14:03:08.71Z" }, { url = "https://files.pythonhosted.org/packages/95/9c/c337cfcce696b5feedf9a55459e87cc13db829df65444dfe14f2a18168d0/libqasm-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ad0b673314569a90c0c96e81b18af0bc0ea41a5a3b9822eb508d2e76b37a6ed", size = 1270899, upload-time = "2025-07-28T14:02:45.997Z" }, { url = "https://files.pythonhosted.org/packages/c0/18/bddc69b5def3ef5a5682580a4e09adc3324fdd60d57e712bc74bea4cd8e9/libqasm-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acd1b45de6385253fe7479d173b4d5ee808baa2cff651810ddd5b56928ca467", size = 1142062, upload-time = "2025-07-28T14:02:52.05Z" }, { url = "https://files.pythonhosted.org/packages/c0/fd/10d1d11631056e0a9b204b9f833295837cc90f92ab7a2e94d6d2bdcda708/libqasm-1.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac38d6592f755ad6ed21bcd3d7fe7b7cd941746a0595e985cbd778803368d79f", size = 1767766, upload-time = "2025-07-28T14:02:57.573Z" }, @@ -1193,11 +1622,11 @@ name = "lmfit" version = "1.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "asteval" }, - { name = "dill" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "uncertainties" }, + { name = "asteval", marker = "python_full_version < '3.10'" }, + { name = "dill", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "uncertainties", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/e5/a35942aed2de95e228728c34609b51fe3ec9182398eac50d288eef313aa2/lmfit-1.3.4.tar.gz", hash = "sha256:3c22c28c43f717f6c5b4a3bd81e893a2149739c26a592c046f2e33c23cfbe497", size = 630720, upload-time = "2025-07-19T20:09:01.876Z" } wheels = [ @@ -1218,7 +1647,7 @@ name = "loky" version = "3.5.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cloudpickle" }, + { name = "cloudpickle", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/b1/059b0b3e5d98cb5085cb8611bf6e89bc36999dc056d5470a784bfdc74e49/loky-3.5.5.tar.gz", hash = "sha256:0730c7180a35972532f22fe09be600db9d69fed3552aad0410c570acbb47cf41", size = 101789, upload-time = "2025-05-23T08:58:51.242Z" } wheels = [ @@ -1231,6 +1660,58 @@ version = "6.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c5/ed/60eb6fa2923602fba988d9ca7c5cdbd7cf25faa795162ed538b527a35411/lxml-6.0.0.tar.gz", hash = "sha256:032e65120339d44cdc3efc326c9f660f5f7205f3a535c1fdbf898b29ea01fb72", size = 4096938, upload-time = "2025-06-26T16:28:19.373Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/a5/378033415ff61d9175c81de23e7ad20a3ffb614df4ffc2ffc86bc6746ffd/lxml-6.0.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2793a627e95d119e9f1e19720730472f5543a6d84c50ea33313ce328d870f2dd", size = 5291361, upload-time = "2025-06-26T16:25:07.901Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a6/19c87c4f3b9362b08dc5452a3c3bce528130ac9105fc8fff97ce895ce62e/lxml-6.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:46b9ed911f36bfeb6338e0b482e7fe7c27d362c52fde29f221fddbc9ee2227e7", size = 5008290, upload-time = "2025-06-28T18:47:13.196Z" }, + { url = "https://files.pythonhosted.org/packages/09/d1/e9b7ad4b4164d359c4d87ed8c49cb69b443225cb495777e75be0478da5d5/lxml-6.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b4790b558bee331a933e08883c423f65bbcd07e278f91b2272489e31ab1e2b4", size = 5163192, upload-time = "2025-06-28T18:47:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/56/d6/b3eba234dc1584744b0b374a7f6c26ceee5dc2147369a7e7526e25a72332/lxml-6.0.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2030956cf4886b10be9a0285c6802e078ec2391e1dd7ff3eb509c2c95a69b76", size = 5076973, upload-time = "2025-06-26T16:25:10.936Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/897142dd9385dcc1925acec0c4afe14cc16d310ce02c41fcd9010ac5d15d/lxml-6.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d23854ecf381ab1facc8f353dcd9adeddef3652268ee75297c1164c987c11dc", size = 5297795, upload-time = "2025-06-26T16:25:14.282Z" }, + { url = "https://files.pythonhosted.org/packages/fb/db/551ad84515c6f415cea70193a0ff11d70210174dc0563219f4ce711655c6/lxml-6.0.0-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:43fe5af2d590bf4691531b1d9a2495d7aab2090547eaacd224a3afec95706d76", size = 4776547, upload-time = "2025-06-26T16:25:17.123Z" }, + { url = "https://files.pythonhosted.org/packages/e0/14/c4a77ab4f89aaf35037a03c472f1ccc54147191888626079bd05babd6808/lxml-6.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74e748012f8c19b47f7d6321ac929a9a94ee92ef12bc4298c47e8b7219b26541", size = 5124904, upload-time = "2025-06-26T16:25:19.485Z" }, + { url = "https://files.pythonhosted.org/packages/70/b4/12ae6a51b8da106adec6a2e9c60f532350a24ce954622367f39269e509b1/lxml-6.0.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:43cfbb7db02b30ad3926e8fceaef260ba2fb7df787e38fa2df890c1ca7966c3b", size = 4805804, upload-time = "2025-06-26T16:25:21.949Z" }, + { url = "https://files.pythonhosted.org/packages/a9/b6/2e82d34d49f6219cdcb6e3e03837ca5fb8b7f86c2f35106fb8610ac7f5b8/lxml-6.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34190a1ec4f1e84af256495436b2d196529c3f2094f0af80202947567fdbf2e7", size = 5323477, upload-time = "2025-06-26T16:25:24.475Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e6/b83ddc903b05cd08a5723fefd528eee84b0edd07bdf87f6c53a1fda841fd/lxml-6.0.0-cp310-cp310-win32.whl", hash = "sha256:5967fe415b1920a3877a4195e9a2b779249630ee49ece22021c690320ff07452", size = 3613840, upload-time = "2025-06-26T16:25:27.345Z" }, + { url = "https://files.pythonhosted.org/packages/40/af/874fb368dd0c663c030acb92612341005e52e281a102b72a4c96f42942e1/lxml-6.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f3389924581d9a770c6caa4df4e74b606180869043b9073e2cec324bad6e306e", size = 3993584, upload-time = "2025-06-26T16:25:29.391Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f4/d296bc22c17d5607653008f6dd7b46afdfda12efd31021705b507df652bb/lxml-6.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:522fe7abb41309e9543b0d9b8b434f2b630c5fdaf6482bee642b34c8c70079c8", size = 3681400, upload-time = "2025-06-26T16:25:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2e/45b7ca8bee304c07f54933c37afe7dd4d39ff61ba2757f519dcc71bc5d44/lxml-6.0.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:d7ae472f74afcc47320238b5dbfd363aba111a525943c8a34a1b657c6be934c3", size = 5221628, upload-time = "2025-06-26T16:25:40.878Z" }, + { url = "https://files.pythonhosted.org/packages/32/23/526d19f7eb2b85da1f62cffb2556f647b049ebe2a5aa8d4d41b1fb2c7d36/lxml-6.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5592401cdf3dc682194727c1ddaa8aa0f3ddc57ca64fd03226a430b955eab6f6", size = 4949429, upload-time = "2025-06-28T18:47:20.046Z" }, + { url = "https://files.pythonhosted.org/packages/ac/cc/f6be27a5c656a43a5344e064d9ae004d4dcb1d3c9d4f323c8189ddfe4d13/lxml-6.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58ffd35bd5425c3c3b9692d078bf7ab851441434531a7e517c4984d5634cd65b", size = 5087909, upload-time = "2025-06-28T18:47:22.834Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e6/8ec91b5bfbe6972458bc105aeb42088e50e4b23777170404aab5dfb0c62d/lxml-6.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f720a14aa102a38907c6d5030e3d66b3b680c3e6f6bc95473931ea3c00c59967", size = 5031713, upload-time = "2025-06-26T16:25:43.226Z" }, + { url = "https://files.pythonhosted.org/packages/33/cf/05e78e613840a40e5be3e40d892c48ad3e475804db23d4bad751b8cadb9b/lxml-6.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2a5e8d207311a0170aca0eb6b160af91adc29ec121832e4ac151a57743a1e1e", size = 5232417, upload-time = "2025-06-26T16:25:46.111Z" }, + { url = "https://files.pythonhosted.org/packages/ac/8c/6b306b3e35c59d5f0b32e3b9b6b3b0739b32c0dc42a295415ba111e76495/lxml-6.0.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:2dd1cc3ea7e60bfb31ff32cafe07e24839df573a5e7c2d33304082a5019bcd58", size = 4681443, upload-time = "2025-06-26T16:25:48.837Z" }, + { url = "https://files.pythonhosted.org/packages/59/43/0bd96bece5f7eea14b7220476835a60d2b27f8e9ca99c175f37c085cb154/lxml-6.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cfcf84f1defed7e5798ef4f88aa25fcc52d279be731ce904789aa7ccfb7e8d2", size = 5074542, upload-time = "2025-06-26T16:25:51.65Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3d/32103036287a8ca012d8518071f8852c68f2b3bfe048cef2a0202eb05910/lxml-6.0.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a52a4704811e2623b0324a18d41ad4b9fabf43ce5ff99b14e40a520e2190c851", size = 4729471, upload-time = "2025-06-26T16:25:54.571Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a8/7be5d17df12d637d81854bd8648cd329f29640a61e9a72a3f77add4a311b/lxml-6.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c16304bba98f48a28ae10e32a8e75c349dd742c45156f297e16eeb1ba9287a1f", size = 5256285, upload-time = "2025-06-26T16:25:56.997Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d0/6cb96174c25e0d749932557c8d51d60c6e292c877b46fae616afa23ed31a/lxml-6.0.0-cp311-cp311-win32.whl", hash = "sha256:f8d19565ae3eb956d84da3ef367aa7def14a2735d05bd275cd54c0301f0d0d6c", size = 3612004, upload-time = "2025-06-26T16:25:59.11Z" }, + { url = "https://files.pythonhosted.org/packages/ca/77/6ad43b165dfc6dead001410adeb45e88597b25185f4479b7ca3b16a5808f/lxml-6.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b2d71cdefda9424adff9a3607ba5bbfc60ee972d73c21c7e3c19e71037574816", size = 4003470, upload-time = "2025-06-26T16:26:01.655Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bc/4c50ec0eb14f932a18efc34fc86ee936a66c0eb5f2fe065744a2da8a68b2/lxml-6.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:8a2e76efbf8772add72d002d67a4c3d0958638696f541734304c7f28217a9cab", size = 3682477, upload-time = "2025-06-26T16:26:03.808Z" }, + { url = "https://files.pythonhosted.org/packages/a3/28/e1a9a881e6d6e29dda13d633885d13acb0058f65e95da67841c8dd02b4a8/lxml-6.0.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2930aa001a3776c3e2601cb8e0a15d21b8270528d89cc308be4843ade546b9ab", size = 5228928, upload-time = "2025-06-26T16:26:12.337Z" }, + { url = "https://files.pythonhosted.org/packages/9a/55/2cb24ea48aa30c99f805921c1c7860c1f45c0e811e44ee4e6a155668de06/lxml-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:219e0431ea8006e15005767f0351e3f7f9143e793e58519dc97fe9e07fae5563", size = 4952289, upload-time = "2025-06-28T18:47:25.602Z" }, + { url = "https://files.pythonhosted.org/packages/31/c0/b25d9528df296b9a3306ba21ff982fc5b698c45ab78b94d18c2d6ae71fd9/lxml-6.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bd5913b4972681ffc9718bc2d4c53cde39ef81415e1671ff93e9aa30b46595e7", size = 5111310, upload-time = "2025-06-28T18:47:28.136Z" }, + { url = "https://files.pythonhosted.org/packages/e9/af/681a8b3e4f668bea6e6514cbcb297beb6de2b641e70f09d3d78655f4f44c/lxml-6.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:390240baeb9f415a82eefc2e13285016f9c8b5ad71ec80574ae8fa9605093cd7", size = 5025457, upload-time = "2025-06-26T16:26:15.068Z" }, + { url = "https://files.pythonhosted.org/packages/99/b6/3a7971aa05b7be7dfebc7ab57262ec527775c2c3c5b2f43675cac0458cad/lxml-6.0.0-cp312-cp312-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d6e200909a119626744dd81bae409fc44134389e03fbf1d68ed2a55a2fb10991", size = 5657016, upload-time = "2025-07-03T19:19:06.008Z" }, + { url = "https://files.pythonhosted.org/packages/69/f8/693b1a10a891197143c0673fcce5b75fc69132afa81a36e4568c12c8faba/lxml-6.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca50bd612438258a91b5b3788c6621c1f05c8c478e7951899f492be42defc0da", size = 5257565, upload-time = "2025-06-26T16:26:17.906Z" }, + { url = "https://files.pythonhosted.org/packages/a8/96/e08ff98f2c6426c98c8964513c5dab8d6eb81dadcd0af6f0c538ada78d33/lxml-6.0.0-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:c24b8efd9c0f62bad0439283c2c795ef916c5a6b75f03c17799775c7ae3c0c9e", size = 4713390, upload-time = "2025-06-26T16:26:20.292Z" }, + { url = "https://files.pythonhosted.org/packages/a8/83/6184aba6cc94d7413959f6f8f54807dc318fdcd4985c347fe3ea6937f772/lxml-6.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:afd27d8629ae94c5d863e32ab0e1d5590371d296b87dae0a751fb22bf3685741", size = 5066103, upload-time = "2025-06-26T16:26:22.765Z" }, + { url = "https://files.pythonhosted.org/packages/ee/01/8bf1f4035852d0ff2e36a4d9aacdbcc57e93a6cd35a54e05fa984cdf73ab/lxml-6.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:54c4855eabd9fc29707d30141be99e5cd1102e7d2258d2892314cf4c110726c3", size = 4791428, upload-time = "2025-06-26T16:26:26.461Z" }, + { url = "https://files.pythonhosted.org/packages/29/31/c0267d03b16954a85ed6b065116b621d37f559553d9339c7dcc4943a76f1/lxml-6.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c907516d49f77f6cd8ead1322198bdfd902003c3c330c77a1c5f3cc32a0e4d16", size = 5678523, upload-time = "2025-07-03T19:19:09.837Z" }, + { url = "https://files.pythonhosted.org/packages/5c/f7/5495829a864bc5f8b0798d2b52a807c89966523140f3d6fa3a58ab6720ea/lxml-6.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36531f81c8214e293097cd2b7873f178997dae33d3667caaae8bdfb9666b76c0", size = 5281290, upload-time = "2025-06-26T16:26:29.406Z" }, + { url = "https://files.pythonhosted.org/packages/79/56/6b8edb79d9ed294ccc4e881f4db1023af56ba451909b9ce79f2a2cd7c532/lxml-6.0.0-cp312-cp312-win32.whl", hash = "sha256:690b20e3388a7ec98e899fd54c924e50ba6693874aa65ef9cb53de7f7de9d64a", size = 3613495, upload-time = "2025-06-26T16:26:31.588Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1e/cc32034b40ad6af80b6fd9b66301fc0f180f300002e5c3eb5a6110a93317/lxml-6.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:310b719b695b3dd442cdfbbe64936b2f2e231bb91d998e99e6f0daf991a3eba3", size = 4014711, upload-time = "2025-06-26T16:26:33.723Z" }, + { url = "https://files.pythonhosted.org/packages/55/10/dc8e5290ae4c94bdc1a4c55865be7e1f31dfd857a88b21cbba68b5fea61b/lxml-6.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:8cb26f51c82d77483cdcd2b4a53cda55bbee29b3c2f3ddeb47182a2a9064e4eb", size = 3674431, upload-time = "2025-06-26T16:26:35.959Z" }, + { url = "https://files.pythonhosted.org/packages/8e/74/dd595d92a40bda3c687d70d4487b2c7eff93fd63b568acd64fedd2ba00fe/lxml-6.0.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:51a5e4c61a4541bd1cd3ba74766d0c9b6c12d6a1a4964ef60026832aac8e79b3", size = 5214329, upload-time = "2025-06-26T16:26:44.669Z" }, + { url = "https://files.pythonhosted.org/packages/52/46/3572761efc1bd45fcafb44a63b3b0feeb5b3f0066886821e94b0254f9253/lxml-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d18a25b19ca7307045581b18b3ec9ead2b1db5ccd8719c291f0cd0a5cec6cb81", size = 4947559, upload-time = "2025-06-28T18:47:31.091Z" }, + { url = "https://files.pythonhosted.org/packages/94/8a/5e40de920e67c4f2eef9151097deb9b52d86c95762d8ee238134aff2125d/lxml-6.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4f0c66df4386b75d2ab1e20a489f30dc7fd9a06a896d64980541506086be1f1", size = 5102143, upload-time = "2025-06-28T18:47:33.612Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4b/20555bdd75d57945bdabfbc45fdb1a36a1a0ff9eae4653e951b2b79c9209/lxml-6.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f4b481b6cc3a897adb4279216695150bbe7a44c03daba3c894f49d2037e0a24", size = 5021931, upload-time = "2025-06-26T16:26:47.503Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/cf03b412f3763d4ca23b25e70c96a74cfece64cec3addf1c4ec639586b13/lxml-6.0.0-cp313-cp313-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a78d6c9168f5bcb20971bf3329c2b83078611fbe1f807baadc64afc70523b3a", size = 5645469, upload-time = "2025-07-03T19:19:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/d4/dd/39c8507c16db6031f8c1ddf70ed95dbb0a6d466a40002a3522c128aba472/lxml-6.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae06fbab4f1bb7db4f7c8ca9897dc8db4447d1a2b9bee78474ad403437bcc29", size = 5247467, upload-time = "2025-06-26T16:26:49.998Z" }, + { url = "https://files.pythonhosted.org/packages/4d/56/732d49def0631ad633844cfb2664563c830173a98d5efd9b172e89a4800d/lxml-6.0.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:1fa377b827ca2023244a06554c6e7dc6828a10aaf74ca41965c5d8a4925aebb4", size = 4720601, upload-time = "2025-06-26T16:26:52.564Z" }, + { url = "https://files.pythonhosted.org/packages/8f/7f/6b956fab95fa73462bca25d1ea7fc8274ddf68fb8e60b78d56c03b65278e/lxml-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1676b56d48048a62ef77a250428d1f31f610763636e0784ba67a9740823988ca", size = 5060227, upload-time = "2025-06-26T16:26:55.054Z" }, + { url = "https://files.pythonhosted.org/packages/97/06/e851ac2924447e8b15a294855caf3d543424364a143c001014d22c8ca94c/lxml-6.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e32698462aacc5c1cf6bdfebc9c781821b7e74c79f13e5ffc8bfe27c42b1abf", size = 4790637, upload-time = "2025-06-26T16:26:57.384Z" }, + { url = "https://files.pythonhosted.org/packages/06/d4/fd216f3cd6625022c25b336c7570d11f4a43adbaf0a56106d3d496f727a7/lxml-6.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4d6036c3a296707357efb375cfc24bb64cd955b9ec731abf11ebb1e40063949f", size = 5662049, upload-time = "2025-07-03T19:19:16.409Z" }, + { url = "https://files.pythonhosted.org/packages/52/03/0e764ce00b95e008d76b99d432f1807f3574fb2945b496a17807a1645dbd/lxml-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7488a43033c958637b1a08cddc9188eb06d3ad36582cebc7d4815980b47e27ef", size = 5272430, upload-time = "2025-06-26T16:27:00.031Z" }, + { url = "https://files.pythonhosted.org/packages/5f/01/d48cc141bc47bc1644d20fe97bbd5e8afb30415ec94f146f2f76d0d9d098/lxml-6.0.0-cp313-cp313-win32.whl", hash = "sha256:5fcd7d3b1d8ecb91445bd71b9c88bdbeae528fefee4f379895becfc72298d181", size = 3612896, upload-time = "2025-06-26T16:27:04.251Z" }, + { url = "https://files.pythonhosted.org/packages/f4/87/6456b9541d186ee7d4cb53bf1b9a0d7f3b1068532676940fdd594ac90865/lxml-6.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2f34687222b78fff795feeb799a7d44eca2477c3d9d3a46ce17d51a4f383e32e", size = 4013132, upload-time = "2025-06-26T16:27:06.415Z" }, + { url = "https://files.pythonhosted.org/packages/b7/42/85b3aa8f06ca0d24962f8100f001828e1f1f1a38c954c16e71154ed7d53a/lxml-6.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:21db1ec5525780fd07251636eb5f7acb84003e9382c72c18c542a87c416ade03", size = 3672642, upload-time = "2025-06-26T16:27:09.888Z" }, { url = "https://files.pythonhosted.org/packages/61/aa/b0a8ee233c00f2f437dbb6e7bd2df115a996d8211b7d03f4ab029b8e3378/lxml-6.0.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:b372d10d17a701b0945f67be58fae4664fd056b85e0ff0fbc1e6c951cdbc0512", size = 5292694, upload-time = "2025-06-26T16:27:34.037Z" }, { url = "https://files.pythonhosted.org/packages/53/7f/e6f377489b2ac4289418b879c34ed664e5a1174b2a91590936ec4174e773/lxml-6.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a674c0948789e9136d69065cc28009c1b1874c6ea340253db58be7622ce6398f", size = 5009177, upload-time = "2025-06-28T18:47:39.377Z" }, { url = "https://files.pythonhosted.org/packages/c6/05/ae239e997374680741b768044545251a29abc21ada42248638dbed749a0a/lxml-6.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:edf6e4c8fe14dfe316939711e3ece3f9a20760aabf686051b537a7562f4da91a", size = 5163787, upload-time = "2025-06-28T18:47:42.452Z" }, @@ -1243,6 +1724,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/97/352e07992901473529c8e19dbfdba6430ba6a37f6b46a4d0fa93321f8fee/lxml-6.0.0-cp39-cp39-win32.whl", hash = "sha256:04d67ceee6db4bcb92987ccb16e53bef6b42ced872509f333c04fb58a3315256", size = 3615832, upload-time = "2025-06-26T16:27:51.728Z" }, { url = "https://files.pythonhosted.org/packages/71/93/8f3b880e2618e548fb0ca157349abb526d81cb4f01ef5ea3a0f22bd4d0df/lxml-6.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e0b1520ef900e9ef62e392dd3d7ae4f5fa224d1dd62897a792cf353eb20b6cae", size = 4038551, upload-time = "2025-06-26T16:27:54.193Z" }, { url = "https://files.pythonhosted.org/packages/e7/8a/046cbf5b262dd2858c6e65833339100fd5f1c017b37b26bc47c92d4584d7/lxml-6.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:e35e8aaaf3981489f42884b59726693de32dabfc438ac10ef4eb3409961fd402", size = 3684237, upload-time = "2025-06-26T16:27:57.117Z" }, + { url = "https://files.pythonhosted.org/packages/2b/3a/d68cbcb4393a2a0a867528741fafb7ce92dac5c9f4a1680df98e5e53e8f5/lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:40442e2a4456e9910875ac12951476d36c0870dcb38a68719f8c4686609897c4", size = 4216406, upload-time = "2025-06-28T18:47:45.518Z" }, + { url = "https://files.pythonhosted.org/packages/15/8f/d9bfb13dff715ee3b2a1ec2f4a021347ea3caf9aba93dea0cfe54c01969b/lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db0efd6bae1c4730b9c863fc4f5f3c0fa3e8f05cae2c44ae141cb9dfc7d091dc", size = 4326455, upload-time = "2025-06-28T18:47:48.411Z" }, + { url = "https://files.pythonhosted.org/packages/01/8b/fde194529ee8a27e6f5966d7eef05fa16f0567e4a8e8abc3b855ef6b3400/lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ab542c91f5a47aaa58abdd8ea84b498e8e49fe4b883d67800017757a3eb78e8", size = 4268788, upload-time = "2025-06-26T16:28:02.776Z" }, + { url = "https://files.pythonhosted.org/packages/99/a8/3b8e2581b4f8370fc9e8dc343af4abdfadd9b9229970fc71e67bd31c7df1/lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:013090383863b72c62a702d07678b658fa2567aa58d373d963cca245b017e065", size = 4411394, upload-time = "2025-06-26T16:28:05.179Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a5/899a4719e02ff4383f3f96e5d1878f882f734377f10dfb69e73b5f223e44/lxml-6.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c86df1c9af35d903d2b52d22ea3e66db8058d21dc0f59842ca5deb0595921141", size = 3517946, upload-time = "2025-06-26T16:28:07.665Z" }, { url = "https://files.pythonhosted.org/packages/09/8a/1410b9e1ec43f606f9aac0661d09892509d86032e229711798906e1b5e7a/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ae74f7c762270196d2dda56f8dd7309411f08a4084ff2dfcc0b095a218df2e06", size = 4210839, upload-time = "2025-06-28T18:47:50.768Z" }, { url = "https://files.pythonhosted.org/packages/79/cb/6696ce0d1712c5ae94b18bdf225086a5fb04b23938ac4d2011b323b3860b/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:059c4cbf3973a621b62ea3132934ae737da2c132a788e6cfb9b08d63a0ef73f9", size = 4321235, upload-time = "2025-06-28T18:47:53.338Z" }, { url = "https://files.pythonhosted.org/packages/f3/98/04997f61d720cf320a0daee66b3096e3a3b57453e15549c14b87058c2acd/lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f090a9bc0ce8da51a5632092f98a7e7f84bca26f33d161a98b57f7fb0004ca", size = 4265071, upload-time = "2025-06-26T16:28:12.367Z" }, @@ -1255,7 +1741,7 @@ name = "markdown" version = "3.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" } wheels = [ @@ -1267,7 +1753,7 @@ name = "markdown-it-py" version = "3.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl" }, + { name = "mdurl", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } wheels = [ @@ -1280,6 +1766,56 @@ version = "3.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344, upload-time = "2024-10-18T15:21:43.721Z" }, { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389, upload-time = "2024-10-18T15:21:44.666Z" }, { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607, upload-time = "2024-10-18T15:21:45.452Z" }, @@ -1297,7 +1833,7 @@ name = "marshmallow" version = "3.26.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } wheels = [ @@ -1309,19 +1845,39 @@ name = "matplotlib" version = "3.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "importlib-resources" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, + { name = "contourpy", marker = "python_full_version < '3.10'" }, + { name = "cycler", marker = "python_full_version < '3.10'" }, + { name = "fonttools", marker = "python_full_version < '3.10'" }, + { name = "importlib-resources", marker = "python_full_version < '3.10'" }, + { name = "kiwisolver", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pillow", marker = "python_full_version < '3.10'" }, + { name = "pyparsing", marker = "python_full_version < '3.10'" }, + { name = "python-dateutil", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529, upload-time = "2024-12-13T05:56:34.184Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/65/f841a422ec994da5123368d76b126acf4fc02ea7459b6e37c4891b555b83/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26", size = 8200138, upload-time = "2024-12-13T05:54:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/272aca07a38804d93b6050813de41ca7ab0e29ba7a9dd098e12037c919a9/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50", size = 8312711, upload-time = "2024-12-13T05:54:34.396Z" }, + { url = "https://files.pythonhosted.org/packages/98/37/f13e23b233c526b7e27ad61be0a771894a079e0f7494a10d8d81557e0e9a/matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5", size = 9090622, upload-time = "2024-12-13T05:54:36.808Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8c/b1f5bd2bd70e60f93b1b54c4d5ba7a992312021d0ddddf572f9a1a6d9348/matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d", size = 7828211, upload-time = "2024-12-13T05:54:40.596Z" }, + { url = "https://files.pythonhosted.org/packages/a2/73/ccb381026e3238c5c25c3609ba4157b2d1a617ec98d65a8b4ee4e1e74d02/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249", size = 8209906, upload-time = "2024-12-13T05:54:49.459Z" }, + { url = "https://files.pythonhosted.org/packages/ab/33/1648da77b74741c89f5ea95cbf42a291b4b364f2660b316318811404ed97/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423", size = 8322873, upload-time = "2024-12-13T05:54:53.066Z" }, + { url = "https://files.pythonhosted.org/packages/57/d3/8447ba78bc6593c9044c372d1609f8ea10fb1e071e7a9e0747bea74fc16c/matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e", size = 9099566, upload-time = "2024-12-13T05:54:55.522Z" }, + { url = "https://files.pythonhosted.org/packages/23/e1/4f0e237bf349c02ff9d1b6e7109f1a17f745263809b9714a8576dc17752b/matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3", size = 7838065, upload-time = "2024-12-13T05:54:58.337Z" }, + { url = "https://files.pythonhosted.org/packages/99/06/b991886c506506476e5d83625c5970c656a491b9f80161458fed94597808/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f", size = 8200707, upload-time = "2024-12-13T05:55:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e2/556b627498cb27e61026f2d1ba86a78ad1b836fef0996bef5440e8bc9559/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00", size = 8313761, upload-time = "2024-12-13T05:55:12.95Z" }, + { url = "https://files.pythonhosted.org/packages/58/ff/165af33ec766ff818306ea88e91f9f60d2a6ed543be1eb122a98acbf3b0d/matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0", size = 9095284, upload-time = "2024-12-13T05:55:16.199Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8b/3d0c7a002db3b1ed702731c2a9a06d78d035f1f2fb0fb936a8e43cc1e9f4/matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b", size = 7841160, upload-time = "2024-12-13T05:55:19.991Z" }, + { url = "https://files.pythonhosted.org/packages/65/87/ac498451aff739e515891bbb92e566f3c7ef31891aaa878402a71f9b0910/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858", size = 8200802, upload-time = "2024-12-13T05:55:28.461Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6b/9eb761c00e1cb838f6c92e5f25dcda3f56a87a52f6cb8fdfa561e6cf6a13/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64", size = 8313880, upload-time = "2024-12-13T05:55:30.965Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/c8eaa600e2085eec7e38cbbcc58a30fc78f8224939d31d3152bdafc01fd1/matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df", size = 9094637, upload-time = "2024-12-13T05:55:33.701Z" }, + { url = "https://files.pythonhosted.org/packages/71/1f/c6e1daea55b7bfeb3d84c6cb1abc449f6a02b181e7e2a5e4db34c3afb793/matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799", size = 7841311, upload-time = "2024-12-13T05:55:36.737Z" }, + { url = "https://files.pythonhosted.org/packages/36/c8/c523fd2963156692916a8eb7d4069084cf729359f7955cf09075deddfeaf/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c", size = 8226258, upload-time = "2024-12-13T05:55:47.259Z" }, + { url = "https://files.pythonhosted.org/packages/f6/88/499bf4b8fa9349b6f5c0cf4cead0ebe5da9d67769129f1b5651e5ac51fbc/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764", size = 8335849, upload-time = "2024-12-13T05:55:49.763Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9f/20a4156b9726188646a030774ee337d5ff695a965be45ce4dbcb9312c170/matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041", size = 9102152, upload-time = "2024-12-13T05:55:51.997Z" }, + { url = "https://files.pythonhosted.org/packages/10/11/237f9c3a4e8d810b1759b67ff2da7c32c04f9c80aa475e7beb36ed43a8fb/matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965", size = 7896987, upload-time = "2024-12-13T05:55:55.941Z" }, { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838, upload-time = "2024-12-13T05:56:06.792Z" }, { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492, upload-time = "2024-12-13T05:56:09.964Z" }, { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500, upload-time = "2024-12-13T05:56:13.55Z" }, @@ -1365,7 +1921,7 @@ name = "methodtools" version = "0.4.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wirerope" }, + { name = "wirerope", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/13/3b/c21b74ac17befdf17b286494b02221b7a84affb1d410ff86e38ba0e14b13/methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba", size = 3586, upload-time = "2023-02-05T13:17:54.473Z" } wheels = [ @@ -1396,7 +1952,7 @@ name = "mistune" version = "3.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } wheels = [ @@ -1411,7 +1967,7 @@ dependencies = [ { name = "click" }, { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "ghp-import" }, - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, @@ -1481,7 +2037,7 @@ name = "mkdocs-get-deps" version = "0.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "mergedeep" }, { name = "platformdirs" }, { name = "pyyaml" }, @@ -1493,11 +2049,14 @@ wheels = [ [[package]] name = "mkdocs-glightbox" -version = "0.4.0" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/86/5a/0bc456397ba0acc684b5b1daa4ca232ed717938fd37198251d8bcc4053bf/mkdocs-glightbox-0.4.0.tar.gz", hash = "sha256:392b34207bf95991071a16d5f8916d1d2f2cd5d5bb59ae2997485ccd778c70d9", size = 32010, upload-time = "2024-05-06T14:31:43.063Z" } +dependencies = [ + { name = "selectolax" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/72/c03e9d8d2dbe098d7ce5d51309933a1d3aea268965ed097ab16f4b54de15/mkdocs_glightbox-0.5.1.tar.gz", hash = "sha256:7d78a5b045f2479f61b0bbb17742ba701755c56b013e70ac189c9d87a91e80bf", size = 480028, upload-time = "2025-09-04T13:10:29.679Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/72/b0c2128bb569c732c11ae8e49a777089e77d83c05946062caa19b841e6fb/mkdocs_glightbox-0.4.0-py3-none-any.whl", hash = "sha256:e0107beee75d3eb7380ac06ea2d6eac94c999eaa49f8c3cbab0e7be2ac006ccf", size = 31154, upload-time = "2024-05-06T14:31:41.011Z" }, + { url = "https://files.pythonhosted.org/packages/30/cf/e9a0ce9da269746906fdc595c030f6df66793dad1487abd1699af2ba44f1/mkdocs_glightbox-0.5.1-py3-none-any.whl", hash = "sha256:f47af0daff164edf8d36e553338425be3aab6e34b987d9cbbc2ae7819a98cb01", size = 26431, upload-time = "2025-09-04T13:10:27.933Z" }, ] [[package]] @@ -1560,7 +2119,7 @@ name = "mkdocstrings" version = "0.30.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, @@ -1586,7 +2145,7 @@ dependencies = [ { name = "griffe" }, { name = "mkdocs-autorefs" }, { name = "mkdocstrings" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/39/7c/6dfd8ad59c0eebae167168528ed6cad00116f58ef2327686149f7b25d175/mkdocstrings_python-1.17.0.tar.gz", hash = "sha256:c6295962b60542a9c7468a3b515ce8524616ca9f8c1a38c790db4286340ba501", size = 200408, upload-time = "2025-08-14T21:18:14.568Z" } wheels = [ @@ -1609,11 +2168,41 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, { name = "pathspec" }, - { name = "tomli" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/77/a9/3d7aa83955617cdf02f94e50aab5c830d205cfa4320cf124ff64acce3a8e/mypy-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3fbe6d5555bf608c47203baa3e72dbc6ec9965b3d7c318aa9a4ca76f465bd972", size = 11003299, upload-time = "2025-07-31T07:54:06.425Z" }, + { url = "https://files.pythonhosted.org/packages/83/e8/72e62ff837dd5caaac2b4a5c07ce769c8e808a00a65e5d8f94ea9c6f20ab/mypy-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80ef5c058b7bce08c83cac668158cb7edea692e458d21098c7d3bce35a5d43e7", size = 10125451, upload-time = "2025-07-31T07:53:52.974Z" }, + { url = "https://files.pythonhosted.org/packages/7d/10/f3f3543f6448db11881776f26a0ed079865926b0c841818ee22de2c6bbab/mypy-1.17.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a580f8a70c69e4a75587bd925d298434057fe2a428faaf927ffe6e4b9a98df", size = 11916211, upload-time = "2025-07-31T07:53:18.879Z" }, + { url = "https://files.pythonhosted.org/packages/06/bf/63e83ed551282d67bb3f7fea2cd5561b08d2bb6eb287c096539feb5ddbc5/mypy-1.17.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd86bb649299f09d987a2eebb4d52d10603224500792e1bee18303bbcc1ce390", size = 12652687, upload-time = "2025-07-31T07:53:30.544Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/68f2eeef11facf597143e85b694a161868b3b006a5fbad50e09ea117ef24/mypy-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a76906f26bd8d51ea9504966a9c25419f2e668f012e0bdf3da4ea1526c534d94", size = 12896322, upload-time = "2025-07-31T07:53:50.74Z" }, + { url = "https://files.pythonhosted.org/packages/a3/87/8e3e9c2c8bd0d7e071a89c71be28ad088aaecbadf0454f46a540bda7bca6/mypy-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:e79311f2d904ccb59787477b7bd5d26f3347789c06fcd7656fa500875290264b", size = 9507962, upload-time = "2025-07-31T07:53:08.431Z" }, + { url = "https://files.pythonhosted.org/packages/46/cf/eadc80c4e0a70db1c08921dcc220357ba8ab2faecb4392e3cebeb10edbfa/mypy-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58", size = 10921009, upload-time = "2025-07-31T07:53:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/5d/c1/c869d8c067829ad30d9bdae051046561552516cfb3a14f7f0347b7d973ee/mypy-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5", size = 10047482, upload-time = "2025-07-31T07:53:26.151Z" }, + { url = "https://files.pythonhosted.org/packages/98/b9/803672bab3fe03cee2e14786ca056efda4bb511ea02dadcedde6176d06d0/mypy-1.17.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd", size = 11832883, upload-time = "2025-07-31T07:53:47.948Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/fcdac695beca66800918c18697b48833a9a6701de288452b6715a98cfee1/mypy-1.17.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b", size = 12566215, upload-time = "2025-07-31T07:54:04.031Z" }, + { url = "https://files.pythonhosted.org/packages/7f/37/a932da3d3dace99ee8eb2043b6ab03b6768c36eb29a02f98f46c18c0da0e/mypy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5", size = 12751956, upload-time = "2025-07-31T07:53:36.263Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/6438a429e0f2f5cab8bc83e53dbebfa666476f40ee322e13cac5e64b79e7/mypy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b", size = 9507307, upload-time = "2025-07-31T07:53:59.734Z" }, + { url = "https://files.pythonhosted.org/packages/17/a2/7034d0d61af8098ec47902108553122baa0f438df8a713be860f7407c9e6/mypy-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb", size = 11086295, upload-time = "2025-07-31T07:53:28.124Z" }, + { url = "https://files.pythonhosted.org/packages/14/1f/19e7e44b594d4b12f6ba8064dbe136505cec813549ca3e5191e40b1d3cc2/mypy-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403", size = 10112355, upload-time = "2025-07-31T07:53:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/5b/69/baa33927e29e6b4c55d798a9d44db5d394072eef2bdc18c3e2048c9ed1e9/mypy-1.17.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056", size = 11875285, upload-time = "2025-07-31T07:53:55.293Z" }, + { url = "https://files.pythonhosted.org/packages/90/13/f3a89c76b0a41e19490b01e7069713a30949d9a6c147289ee1521bcea245/mypy-1.17.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341", size = 12737895, upload-time = "2025-07-31T07:53:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/23/a1/c4ee79ac484241301564072e6476c5a5be2590bc2e7bfd28220033d2ef8f/mypy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb", size = 12931025, upload-time = "2025-07-31T07:54:17.125Z" }, + { url = "https://files.pythonhosted.org/packages/89/b8/7409477be7919a0608900e6320b155c72caab4fef46427c5cc75f85edadd/mypy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19", size = 9584664, upload-time = "2025-07-31T07:54:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/5b/82/aec2fc9b9b149f372850291827537a508d6c4d3664b1750a324b91f71355/mypy-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7", size = 11075338, upload-time = "2025-07-31T07:53:38.873Z" }, + { url = "https://files.pythonhosted.org/packages/07/ac/ee93fbde9d2242657128af8c86f5d917cd2887584cf948a8e3663d0cd737/mypy-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81", size = 10113066, upload-time = "2025-07-31T07:54:14.707Z" }, + { url = "https://files.pythonhosted.org/packages/5a/68/946a1e0be93f17f7caa56c45844ec691ca153ee8b62f21eddda336a2d203/mypy-1.17.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6", size = 11875473, upload-time = "2025-07-31T07:53:14.504Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, + { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, + { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, + { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, + { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, + { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, { url = "https://files.pythonhosted.org/packages/29/cb/673e3d34e5d8de60b3a61f44f80150a738bff568cd6b7efb55742a605e98/mypy-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d1092694f166a7e56c805caaf794e0585cabdbf1df36911c414e4e9abb62ae9", size = 10992466, upload-time = "2025-07-31T07:53:57.574Z" }, { url = "https://files.pythonhosted.org/packages/0c/d0/fe1895836eea3a33ab801561987a10569df92f2d3d4715abf2cfeaa29cb2/mypy-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79d44f9bfb004941ebb0abe8eff6504223a9c1ac51ef967d1263c6572bbebc99", size = 10117638, upload-time = "2025-07-31T07:53:34.256Z" }, { url = "https://files.pythonhosted.org/packages/97/f3/514aa5532303aafb95b9ca400a31054a2bd9489de166558c2baaeea9c522/mypy-1.17.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b01586eed696ec905e61bd2568f48740f7ac4a45b3a468e6423a03d3788a51a8", size = 11915673, upload-time = "2025-07-31T07:52:59.361Z" }, @@ -1664,7 +2253,7 @@ dependencies = [ { name = "beautifulsoup4" }, { name = "bleach", extra = ["css"] }, { name = "defusedxml" }, - { name = "importlib-metadata" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "jupyter-core" }, { name = "jupyterlab-pygments" }, @@ -1711,12 +2300,24 @@ name = "netcdf4" version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "cftime" }, - { name = "numpy" }, + { name = "certifi", marker = "python_full_version < '3.10'" }, + { name = "cftime", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/71/ed/4d27fcfa40ebfdad3d2088a3de7ee48dbff7f35163e815ec1870d2a7398c/netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce", size = 835064, upload-time = "2024-10-22T19:01:25.521Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/da/33/ecb4790d053c58ec03f940ab55aacb59a207e356e57792cfd4b4eedbcc4d/netCDF4-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe5b1837ff209185ecfe50bd71884c866b3ee69691051833e410e57f177e059", size = 9210818, upload-time = "2024-10-22T19:00:33.436Z" }, + { url = "https://files.pythonhosted.org/packages/db/a6/54f0f335b28228b89e1598fda950382c83b1d7b1f75d28c5eebbcb7f113e/netCDF4-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28021c7e886e5bccf9a8ce504c032d1d7f98d86f67495fb7cf2c9564eba04510", size = 9059470, upload-time = "2024-10-22T19:00:35.394Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ea/80b9feddd36721f92bac056a7dea41cd48bd4fc676f3f248fc48332d0bd2/netCDF4-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:7460b638e41c8ce4179d082a81cb6456f0ce083d4d959f4d9e87a95cd86f64cb", size = 7005418, upload-time = "2024-10-22T19:00:37.774Z" }, + { url = "https://files.pythonhosted.org/packages/f2/bd/6f76916fae5d375eedd0cb48acd713d8d8db267d0c3cf3d209a4631923a5/netCDF4-1.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f54f5d39ffbcf1726a1e6fd90cb5fa74277ecea739a5fa0f424636d71beafe24", size = 9451498, upload-time = "2024-10-22T19:00:43.822Z" }, + { url = "https://files.pythonhosted.org/packages/18/c1/7e564dbd28228ba4a35a272bf53b9a2e8b0ba9ac06b2c84b57c03c84e87b/netCDF4-1.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902aa50d70f49d002d896212a171d344c38f7b8ca520837c56c922ac1535c4a3", size = 9283073, upload-time = "2024-10-22T19:00:45.925Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ba/d26e8278ad8a2306580bab076b6d64cd16459a60e632e6c1a9cbb68dd3d9/netCDF4-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:3291f9ad0c98c49a4dd16aefad1a9abd3a1b884171db6c81bdcee94671cfabe3", size = 7010215, upload-time = "2024-10-22T19:00:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1a/32b7427aaf62fed3d4e4456f874b25ce39373dbddf6cfde9edbcfc2417fc/netCDF4-1.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb95b11804fe051897d1f2044b05d82a1847bc2549631cdd2f655dde7de77a9c", size = 9377415, upload-time = "2024-10-22T19:00:54.412Z" }, + { url = "https://files.pythonhosted.org/packages/fd/bf/5e671495c8bdf6b628e091aa8980793579474a10e51bc6ba302a3af6a778/netCDF4-1.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d8a848373723f41ef662590b4f5e1832227501c9fd4513e8ad8da58c269977", size = 9260579, upload-time = "2024-10-22T19:00:56.594Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/0a0bcdebcfaf72e96e7bcaa512f80ee096bf71945a3318d38253338e9c25/netCDF4-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:568ea369e00b581302d77fc5fd0b8f78e520c7e08d0b5af5219ba51f3f1cd694", size = 6991523, upload-time = "2024-10-22T19:00:58.97Z" }, + { url = "https://files.pythonhosted.org/packages/71/96/d5d8859a6dac29f8ebc815ff8e75770bd513db9f08d7a711e21ae562a948/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30d20e56b9ba2c48884eb89c91b63e6c0612b4927881707e34402719153ef17f", size = 9378149, upload-time = "2024-10-22T19:01:04.924Z" }, + { url = "https://files.pythonhosted.org/packages/d1/80/b9c19f1bb4ac6c5fa6f94a4f278bc68a778473d1814a86a375d7cffa193a/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6bfd38ba0bde04d56f06c1554714a2ea9dab75811c89450dc3ec57a9d36b80", size = 9254471, upload-time = "2024-10-22T19:01:07.041Z" }, + { url = "https://files.pythonhosted.org/packages/66/b5/e04550fd53de57001dbd5a87242da7ff784c80790adc48897977b6ccf891/netCDF4-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:5c5fbee6134ee1246c397e1508e5297d825aa19221fdf3fa8dc9727ad824d7a5", size = 6990521, upload-time = "2024-10-23T15:02:27.549Z" }, { url = "https://files.pythonhosted.org/packages/df/26/b6ea7c57b160adb818be27f0967b34cf8381b190d5a61344d25746ab1a7f/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572f71459ef4b30e8554dcc4e1e6f55de515acc82a50968b48fe622244a64548", size = 9208209, upload-time = "2024-10-22T19:01:20.017Z" }, { url = "https://files.pythonhosted.org/packages/c8/fe/3513828bb4bc48456d0e7971e04ed97632b2c9ebb7713bfdf36e9dfb7770/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f77e72281acc5f331f82271e5f7f014d46f5ca9bcaa5aafe3e46d66cee21320", size = 9062374, upload-time = "2024-10-22T19:01:22.053Z" }, { url = "https://files.pythonhosted.org/packages/16/9c/b6adff49068fd78f72b9f3147ed3485583c573e6a9eea23f3534b8ed8374/netCDF4-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:d0fa7a9674fae8ae4877e813173c3ff7a6beee166b8730bdc847f517b282ed31", size = 7006633, upload-time = "2024-10-22T19:01:23.998Z" }, @@ -1764,10 +2365,16 @@ name = "numcodecs" version = "0.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b7/1b/1f1d880e29e719c7c6205065d1afbc91114c0d91935ac419faa43e5e08b0/numcodecs-0.12.1.tar.gz", hash = "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e", size = 4091415, upload-time = "2023-10-18T00:47:07.456Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/b8/1040f299803eacc9c522fdc69a4dafc42ad0e8722bb48aa43d2310cf195b/numcodecs-0.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e79bf9d1d37199ac00a60ff3adb64757523291d19d03116832e600cac391c51", size = 7709402, upload-time = "2023-10-18T00:46:34.017Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fa/da0637e1a6db74361a2875425021957859749166c0174ddedbb629518970/numcodecs-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82d7107f80f9307235cb7e74719292d101c7ea1e393fe628817f0d635b7384f5", size = 790204, upload-time = "2023-10-18T00:46:36.221Z" }, + { url = "https://files.pythonhosted.org/packages/14/e6/8f9d4a498a06f11a06297f0b02af9968844d2e40ee79d372ccee33595285/numcodecs-0.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a191a8e347ecd016e5c357f2bf41fbcb026f6ffe78fff50c77ab12e96701d155", size = 7949787, upload-time = "2023-10-18T00:46:41.978Z" }, + { url = "https://files.pythonhosted.org/packages/08/f3/44597198c2cfb0d808d68583445b60b0d0ae057f20f0caf2a1200405655e/numcodecs-0.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:21d8267bd4313f4d16f5b6287731d4c8ebdab236038f29ad1b0e93c9b2ca64ee", size = 790313, upload-time = "2023-10-18T00:46:44.6Z" }, + { url = "https://files.pythonhosted.org/packages/3b/88/fb3186f944b9586e9c4c54bd1d1899947b88465ad3ab1ff1111066871644/numcodecs-0.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c258bd1d3dfa75a9b708540d23b2da43d63607f9df76dfa0309a7597d1de3b73", size = 7944856, upload-time = "2023-10-18T00:46:50.546Z" }, + { url = "https://files.pythonhosted.org/packages/f4/03/54e22e273d584e83100ffa60c47c29cae905015ecb1f693918072c3595b9/numcodecs-0.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e04649ea504aff858dbe294631f098fbfd671baf58bfc04fc48d746554c05d67", size = 787000, upload-time = "2023-10-18T00:46:52.098Z" }, { url = "https://files.pythonhosted.org/packages/6d/0f/0442e80d707b5dd2e177a9490c25b89aa6a6c44579de8ec223e78a8884da/numcodecs-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f", size = 7722207, upload-time = "2023-10-18T00:47:04.378Z" }, { url = "https://files.pythonhosted.org/packages/77/b6/345f8648874a81232bc1a87e55a771430488a832c68f873aa6ed23a1dedf/numcodecs-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136", size = 792870, upload-time = "2023-10-18T00:47:05.879Z" }, ] @@ -1778,6 +2385,36 @@ version = "2.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" }, + { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" }, + { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" }, + { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" }, + { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" }, + { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" }, + { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" }, + { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" }, + { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" }, + { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" }, + { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" }, + { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" }, + { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" }, + { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" }, + { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" }, + { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" }, + { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" }, { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, @@ -1796,13 +2433,15 @@ wheels = [ [[package]] name = "opensquirrel" -version = "0.5.0" +version = "0.6.0" source = { editable = "." } dependencies = [ { name = "libqasm" }, { name = "networkx" }, { name = "numpy" }, - { name = "scipy" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "scipy", version = "1.16.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] [package.dev-dependencies] @@ -1834,8 +2473,8 @@ examples = [ { name = "jupyter" }, ] export = [ - { name = "pyqt5-qt5", marker = "sys_platform != 'darwin'" }, - { name = "quantify-scheduler", marker = "sys_platform != 'darwin'" }, + { name = "pyqt5-qt5", marker = "python_full_version < '3.10' and sys_platform != 'darwin'" }, + { name = "quantify-scheduler", marker = "python_full_version < '3.10' and sys_platform != 'darwin'" }, ] [package.metadata] @@ -1853,8 +2492,8 @@ dev = [ { name = "ipython", specifier = ">=7.12,<9.0" }, { name = "mypy", specifier = ">=1.7.0,<2" }, { name = "pytest", specifier = ">=7.4.3,<9.0.0" }, - { name = "pytest-cov", specifier = ">=4.1,<7.0" }, - { name = "ruff", specifier = ">=0.5,<0.13" }, + { name = "pytest-cov", specifier = ">=4.1,<8.0" }, + { name = "ruff", specifier = ">=0.5,<0.14" }, { name = "sympy", specifier = ">=1.13.1,<2" }, { name = "tox", specifier = ">=4.24.1,<5" }, ] @@ -1864,7 +2503,7 @@ docs = [ { name = "mkdocs-build-plantuml-plugin", specifier = "==1.9.0" }, { name = "mkdocs-exclude", specifier = "==1.0.2" }, { name = "mkdocs-gen-files", specifier = ">=0.5.0,<0.6" }, - { name = "mkdocs-glightbox", specifier = "==0.4.0" }, + { name = "mkdocs-glightbox", specifier = "==0.5.1" }, { name = "mkdocs-literate-nav", specifier = ">=0.6.1,<0.7" }, { name = "mkdocs-material", specifier = ">=9.4.12,<10" }, { name = "mkdocs-material-extensions", specifier = "==1.3.1" }, @@ -1883,8 +2522,8 @@ name = "opentelemetry-api" version = "1.36.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, - { name = "typing-extensions" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/27/d2/c782c88b8afbf961d6972428821c302bd1e9e7bc361352172f0ca31296e2/opentelemetry_api-1.36.0.tar.gz", hash = "sha256:9a72572b9c416d004d492cbc6e61962c0501eaf945ece9b5a0f56597d8348aa0", size = 64780, upload-time = "2025-07-29T15:12:06.02Z" } wheels = [ @@ -1932,13 +2571,37 @@ name = "pandas" version = "2.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "python-dateutil", marker = "python_full_version < '3.10'" }, + { name = "pytz", marker = "python_full_version < '3.10'" }, + { name = "tzdata", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload-time = "2025-07-07T19:20:04.079Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/2f/9af748366763b2a494fed477f88051dbf06f56053d5c00eba652697e3f94/pandas-2.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0", size = 11724083, upload-time = "2025-07-07T19:18:20.512Z" }, + { url = "https://files.pythonhosted.org/packages/2c/95/79ab37aa4c25d1e7df953dde407bb9c3e4ae47d154bc0dd1692f3a6dcf8c/pandas-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191", size = 12342360, upload-time = "2025-07-07T19:18:23.194Z" }, + { url = "https://files.pythonhosted.org/packages/75/a7/d65e5d8665c12c3c6ff5edd9709d5836ec9b6f80071b7f4a718c6106e86e/pandas-2.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1", size = 13202098, upload-time = "2025-07-07T19:18:25.558Z" }, + { url = "https://files.pythonhosted.org/packages/65/f3/4c1dbd754dbaa79dbf8b537800cb2fa1a6e534764fef50ab1f7533226c5c/pandas-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97", size = 13837228, upload-time = "2025-07-07T19:18:28.344Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d6/d7f5777162aa9b48ec3910bca5a58c9b5927cfd9cfde3aa64322f5ba4b9f/pandas-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83", size = 11336561, upload-time = "2025-07-07T19:18:31.211Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4c/367c98854a1251940edf54a4df0826dcacfb987f9068abf3e3064081a382/pandas-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85", size = 11793570, upload-time = "2025-07-07T19:18:38.385Z" }, + { url = "https://files.pythonhosted.org/packages/07/5f/63760ff107bcf5146eee41b38b3985f9055e710a72fdd637b791dea3495c/pandas-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d", size = 12378887, upload-time = "2025-07-07T19:18:41.284Z" }, + { url = "https://files.pythonhosted.org/packages/15/53/f31a9b4dfe73fe4711c3a609bd8e60238022f48eacedc257cd13ae9327a7/pandas-2.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678", size = 13230957, upload-time = "2025-07-07T19:18:44.187Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/6fce6bf85b5056d065e0a7933cba2616dcb48596f7ba3c6341ec4bcc529d/pandas-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299", size = 13883883, upload-time = "2025-07-07T19:18:46.498Z" }, + { url = "https://files.pythonhosted.org/packages/c8/7b/bdcb1ed8fccb63d04bdb7635161d0ec26596d92c9d7a6cce964e7876b6c1/pandas-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab", size = 11340212, upload-time = "2025-07-07T19:18:49.293Z" }, + { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload-time = "2025-07-07T19:18:57.045Z" }, + { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload-time = "2025-07-07T19:18:59.771Z" }, + { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload-time = "2025-07-07T19:19:02.944Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload-time = "2025-07-07T19:19:06.82Z" }, + { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload-time = "2025-07-07T19:19:09.589Z" }, + { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload-time = "2025-07-07T19:19:16.857Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload-time = "2025-07-07T19:19:19.265Z" }, + { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload-time = "2025-07-07T19:19:21.547Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload-time = "2025-07-07T19:19:23.939Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload-time = "2025-07-07T19:19:42.699Z" }, + { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload-time = "2025-07-07T19:19:31.436Z" }, + { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload-time = "2025-07-07T19:19:34.267Z" }, + { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload-time = "2025-07-07T19:19:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload-time = "2025-07-07T19:19:39.999Z" }, { url = "https://files.pythonhosted.org/packages/2d/55/66cd2b679f6a27398380eac7574bc24746128f74626a3c02b978ea00e5ce/pandas-2.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da", size = 11763000, upload-time = "2025-07-07T19:19:50.83Z" }, { url = "https://files.pythonhosted.org/packages/ae/1c/5b9b263c80fd5e231b77df6f78cd7426d1d4ad3a4e858e85b7b3d93d0e9c/pandas-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e", size = 12361395, upload-time = "2025-07-07T19:19:53.714Z" }, { url = "https://files.pythonhosted.org/packages/f7/74/7e817b31413fbb96366ea327d43d1926a9c48c58074e27e094e2839a0e36/pandas-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7", size = 13225086, upload-time = "2025-07-07T19:19:56.378Z" }, @@ -1948,8 +2611,8 @@ wheels = [ [package.optional-dependencies] output-formatting = [ - { name = "jinja2" }, - { name = "tabulate" }, + { name = "jinja2", marker = "python_full_version < '3.10'" }, + { name = "tabulate", marker = "python_full_version < '3.10'" }, ] [[package]] @@ -1975,8 +2638,8 @@ name = "partd" version = "1.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "locket" }, - { name = "toolz" }, + { name = "locket", marker = "python_full_version < '3.10'" }, + { name = "toolz", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } wheels = [ @@ -2019,6 +2682,72 @@ version = "11.3.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742, upload-time = "2025-07-03T13:09:47.439Z" }, + { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087, upload-time = "2025-07-03T13:09:51.796Z" }, + { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350, upload-time = "2025-07-01T09:13:43.865Z" }, + { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840, upload-time = "2025-07-01T09:13:46.161Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005, upload-time = "2025-07-01T09:13:47.829Z" }, + { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372, upload-time = "2025-07-01T09:13:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090, upload-time = "2025-07-01T09:13:53.915Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988, upload-time = "2025-07-01T09:13:55.699Z" }, + { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899, upload-time = "2025-07-01T09:13:57.497Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, + { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, + { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, + { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, + { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, + { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, + { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, @@ -2028,6 +2757,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, + { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, + { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" }, + { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" }, + { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482, upload-time = "2025-07-01T09:16:16.107Z" }, + { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596, upload-time = "2025-07-01T09:16:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, + { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, + { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, + { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, + { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, ] [[package]] @@ -2044,8 +2783,8 @@ name = "plotly" version = "6.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "narwhals" }, - { name = "packaging" }, + { name = "narwhals", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a0/64/850de5076f4436410e1ce4f6a69f4313ef6215dfea155f3f6559335cad29/plotly-6.3.0.tar.gz", hash = "sha256:8840a184d18ccae0f9189c2b9a2943923fd5cae7717b723f36eef78f444e5a73", size = 6923926, upload-time = "2025-08-12T20:22:14.127Z" } wheels = [ @@ -2066,9 +2805,9 @@ name = "pooch" version = "1.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging" }, - { name = "platformdirs" }, - { name = "requests" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "platformdirs", marker = "python_full_version < '3.10'" }, + { name = "requests", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353, upload-time = "2024-06-06T16:53:46.224Z" } wheels = [ @@ -2135,6 +2874,31 @@ version = "21.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/ed/b1589a777816ee33ba123ba1e4f8f02243a844fed0deec97bde9fb21a5cf/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb", size = 41055619, upload-time = "2025-07-18T00:54:42.172Z" }, + { url = "https://files.pythonhosted.org/packages/44/28/b6672962639e85dc0ac36f71ab3a8f5f38e01b51343d7aa372a6b56fa3f3/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51", size = 42733488, upload-time = "2025-07-18T00:54:47.132Z" }, + { url = "https://files.pythonhosted.org/packages/f8/cc/de02c3614874b9089c94eac093f90ca5dfa6d5afe45de3ba847fd950fdf1/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a", size = 43329159, upload-time = "2025-07-18T00:54:51.686Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3e/99473332ac40278f196e105ce30b79ab8affab12f6194802f2593d6b0be2/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594", size = 45050567, upload-time = "2025-07-18T00:54:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f5/c372ef60593d713e8bfbb7e0c743501605f0ad00719146dc075faf11172b/pyarrow-21.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634", size = 26217959, upload-time = "2025-07-18T00:55:00.482Z" }, + { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload-time = "2025-07-18T00:55:42.889Z" }, + { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload-time = "2025-07-18T00:55:47.069Z" }, + { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload-time = "2025-07-18T00:55:53.069Z" }, + { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload-time = "2025-07-18T00:55:57.714Z" }, + { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload-time = "2025-07-18T00:56:01.364Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, { url = "https://files.pythonhosted.org/packages/68/a8/197f989b9a75e59b4ca0db6a13c56f19a0ad8a298c68da9cc28145e0bb97/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b4d97e297741796fead24867a8dabf86c87e4584ccc03167e4a811f50fdf74d", size = 41067862, upload-time = "2025-07-18T00:57:07.587Z" }, { url = "https://files.pythonhosted.org/packages/fa/82/6ecfa89487b35aa21accb014b64e0a6b814cc860d5e3170287bf5135c7d8/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:898afce396b80fdda05e3086b4256f8677c671f7b1d27a6976fa011d3fd0a86e", size = 42747508, upload-time = "2025-07-18T00:57:13.917Z" }, { url = "https://files.pythonhosted.org/packages/3b/b7/ba252f399bbf3addc731e8643c05532cf32e74cebb5e32f8f7409bc243cf/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4", size = 43345293, upload-time = "2025-07-18T00:57:19.828Z" }, @@ -2156,10 +2920,10 @@ name = "pydantic" version = "2.11.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, + { name = "annotated-types", marker = "python_full_version < '3.10'" }, + { name = "pydantic-core", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-inspection", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } wheels = [ @@ -2171,10 +2935,59 @@ name = "pydantic-core" version = "2.33.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, + { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, + { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, + { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, + { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, + { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, + { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, { url = "https://files.pythonhosted.org/packages/23/9a/2e70d6388d7cda488ae38f57bc2f7b03ee442fbcf0d75d848304ac7e405b/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb", size = 1898467, upload-time = "2025-04-23T18:32:31.119Z" }, { url = "https://files.pythonhosted.org/packages/ff/2e/1568934feb43370c1ffb78a77f0baaa5a8b6897513e7a91051af707ffdc4/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7", size = 1983041, upload-time = "2025-04-23T18:32:33.655Z" }, { url = "https://files.pythonhosted.org/packages/01/1a/1a1118f38ab64eac2f6269eb8c120ab915be30e387bb561e3af904b12499/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4", size = 2136503, upload-time = "2025-04-23T18:32:35.519Z" }, @@ -2186,6 +2999,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/8d/bbaf4c6721b668d44f01861f297eb01c9b35f612f6b8e14173cb204e6240/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e", size = 2242331, upload-time = "2025-04-23T18:32:47.618Z" }, { url = "https://files.pythonhosted.org/packages/bb/93/3cc157026bca8f5006250e74515119fcaa6d6858aceee8f67ab6dc548c16/pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9", size = 1910571, upload-time = "2025-04-23T18:32:49.401Z" }, { url = "https://files.pythonhosted.org/packages/5b/90/7edc3b2a0d9f0dda8806c04e511a67b0b7a41d2187e2003673a996fb4310/pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3", size = 1956504, upload-time = "2025-04-23T18:32:51.287Z" }, + { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, + { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, + { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, { url = "https://files.pythonhosted.org/packages/d8/60/bc06fa9027c7006cc6dd21e48dbf39076dc39d9abbaf718a1604973a9670/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d", size = 1892858, upload-time = "2025-04-23T18:33:36.933Z" }, { url = "https://files.pythonhosted.org/packages/f2/40/9d03997d9518816c68b4dfccb88969756b9146031b61cd37f781c74c9b6a/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535", size = 2068498, upload-time = "2025-04-23T18:33:38.997Z" }, { url = "https://files.pythonhosted.org/packages/d8/62/d490198d05d2d86672dc269f52579cad7261ced64c2df213d5c16e0aecb1/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d", size = 2108428, upload-time = "2025-04-23T18:33:41.18Z" }, @@ -2200,15 +3027,15 @@ name = "pydap" version = "3.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "beautifulsoup4" }, - { name = "docopt-ng" }, - { name = "importlib-metadata" }, - { name = "importlib-resources" }, - { name = "jinja2" }, - { name = "lxml" }, - { name = "numpy" }, - { name = "requests" }, - { name = "webob" }, + { name = "beautifulsoup4", marker = "python_full_version < '3.10'" }, + { name = "docopt-ng", marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "importlib-resources", marker = "python_full_version < '3.10'" }, + { name = "jinja2", marker = "python_full_version < '3.10'" }, + { name = "lxml", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "requests", marker = "python_full_version < '3.10'" }, + { name = "webob", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/77e0556cee5a0ec6462b3e1d5fae943831147018f676d5105fd13a43f819/pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab", size = 4385073, upload-time = "2024-08-16T20:42:35.892Z" } wheels = [ @@ -2252,7 +3079,7 @@ version = "1.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, - { name = "tomli" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710, upload-time = "2025-05-12T14:41:58.025Z" } wheels = [ @@ -2264,8 +3091,8 @@ name = "pyqt5" version = "5.15.11" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyqt5-qt5" }, - { name = "pyqt5-sip" }, + { name = "pyqt5-qt5", marker = "python_full_version < '3.10'" }, + { name = "pyqt5-sip", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } wheels = [ @@ -2290,6 +3117,18 @@ version = "12.17.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/01/79/086b50414bafa71df494398ad277d72e58229a3d1c1b1c766d12b14c2e6d/pyqt5_sip-12.17.0.tar.gz", hash = "sha256:682dadcdbd2239af9fdc0c0628e2776b820e128bec88b49b8d692fe682f90b4f", size = 104042, upload-time = "2025-02-02T17:13:11.268Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/61/d5/506b1c3ad06268c601276572f1cde1c0dffd074b44e023f4d80f5ea49265/PyQt5_sip-12.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2f2a8dcc7626fe0da73a0918e05ce2460c7a14ddc946049310e6e35052105434", size = 270932, upload-time = "2025-02-02T17:12:38.175Z" }, + { url = "https://files.pythonhosted.org/packages/0b/9b/46159d8038374b076244a1930ead460e723453ec73f9b0330390ddfdd0ea/PyQt5_sip-12.17.0-cp310-cp310-win32.whl", hash = "sha256:0c75d28b8282be3c1d7dbc76950d6e6eba1e334783224e9b9835ce1a9c64f482", size = 49085, upload-time = "2025-02-02T17:12:40.146Z" }, + { url = "https://files.pythonhosted.org/packages/fe/66/b3eb937a620ce2a5db5c377beeca870d60fafd87aecc1bcca6921bbcf553/PyQt5_sip-12.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c4bc535bae0dfa764e8534e893619fe843ce5a2e25f901c439bcb960114f686", size = 59040, upload-time = "2025-02-02T17:12:41.962Z" }, + { url = "https://files.pythonhosted.org/packages/29/4d/e5981cde03b091fd83a1ef4ef6a4ca99ce6921d61b80c0222fc8eafdc99a/PyQt5_sip-12.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:71514a7d43b44faa1d65a74ad2c5da92c03a251bdc749f009c313f06cceacc9a", size = 276401, upload-time = "2025-02-02T17:12:45.705Z" }, + { url = "https://files.pythonhosted.org/packages/5f/30/4c282896b1e8841639cf2aca59acf57d8b261ed834ae976c959f25fa4a35/PyQt5_sip-12.17.0-cp311-cp311-win32.whl", hash = "sha256:023466ae96f72fbb8419b44c3f97475de6642fa5632520d0f50fc1a52a3e8200", size = 49091, upload-time = "2025-02-02T17:12:47.688Z" }, + { url = "https://files.pythonhosted.org/packages/24/c1/50fc7301aa39a50f451fc1b6b219e778c540a823fe9533a57b4793c859fd/PyQt5_sip-12.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb565469d08dcb0a427def0c45e722323beb62db79454260482b6948bfd52d47", size = 59036, upload-time = "2025-02-02T17:12:49.535Z" }, + { url = "https://files.pythonhosted.org/packages/64/3b/e6d1f772b41d8445d6faf86cc9da65910484ebd9f7df83abc5d4955437d0/PyQt5_sip-12.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a92478d6808040fbe614bb61500fbb3f19f72714b99369ec28d26a7e3494115", size = 281893, upload-time = "2025-02-02T17:12:51.966Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c5/d17fc2ddb9156a593710c88afd98abcf4055a2224b772f8bec2c6eea879c/PyQt5_sip-12.17.0-cp312-cp312-win32.whl", hash = "sha256:b0ff280b28813e9bfd3a4de99490739fc29b776dc48f1c849caca7239a10fc8b", size = 49438, upload-time = "2025-02-02T17:12:54.426Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c5/1174988d52c732d07033cf9a5067142b01d76be7731c6394a64d5c3ef65c/PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c", size = 58017, upload-time = "2025-02-02T17:12:56.31Z" }, + { url = "https://files.pythonhosted.org/packages/cd/cb/3b2050e9644d0021bdf25ddf7e4c3526e1edd0198879e76ba308e5d44faf/PyQt5_sip-12.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:419b9027e92b0b707632c370cfc6dc1f3b43c6313242fc4db57a537029bd179c", size = 281563, upload-time = "2025-02-02T17:12:59.421Z" }, + { url = "https://files.pythonhosted.org/packages/51/61/b8ebde7e0b32d0de44c521a0ace31439885b0423d7d45d010a2f7d92808c/PyQt5_sip-12.17.0-cp313-cp313-win32.whl", hash = "sha256:351beab964a19f5671b2a3e816ecf4d3543a99a7e0650f88a947fea251a7589f", size = 49383, upload-time = "2025-02-02T17:13:00.597Z" }, + { url = "https://files.pythonhosted.org/packages/15/ed/ff94d6b2910e7627380cb1fc9a518ff966e6d78285c8e54c9422b68305db/PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca", size = 58022, upload-time = "2025-02-02T17:13:01.738Z" }, { url = "https://files.pythonhosted.org/packages/23/63/8a934ea1f759eee60b4e0143e5b109d16560bf67593bfed76cca55799a1a/PyQt5_sip-12.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:32b03e7e77ecd7b4119eba486b0706fa59b490bcceb585f9b6ddec8a582082db", size = 268531, upload-time = "2025-02-02T17:13:06.005Z" }, { url = "https://files.pythonhosted.org/packages/34/80/0df0cdb7b25a87346a493cedb20f6eeb0301e7fbc02ed23d9077df998291/PyQt5_sip-12.17.0-cp39-cp39-win32.whl", hash = "sha256:5b6c734f4ad28f3defac4890ed747d391d246af279200935d49953bc7d915b8c", size = 49005, upload-time = "2025-02-02T17:13:07.741Z" }, { url = "https://files.pythonhosted.org/packages/30/f5/2fd274c4fe9513d750eecfbe0c39937a179534446e148d8b9db4255f429a/PyQt5_sip-12.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:855e8f5787d57e26a48d8c3de1220a8e92ab83be8d73966deac62fdae03ea2f9", size = 59076, upload-time = "2025-02-02T17:13:09.643Z" }, @@ -2300,7 +3139,7 @@ name = "pyqtgraph" version = "0.13.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/d9/b62d5cddb3caa6e5145664bee5ed90223dee23ca887ed3ee479f2609e40a/pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3", size = 2343380, upload-time = "2024-04-29T02:18:58.467Z" } wheels = [ @@ -2322,12 +3161,12 @@ version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } wheels = [ @@ -2365,7 +3204,7 @@ name = "python-json-logger" version = "3.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } wheels = [ @@ -2386,7 +3225,7 @@ name = "pyvisa" version = "1.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1a/77/577366efd9cff08ddfedcf14f678ff57bb1a6287ccdf157972e6d9e7b494/PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79", size = 234683, upload-time = "2023-11-22T07:33:45.658Z" } wheels = [ @@ -2398,6 +3237,21 @@ name = "pywin32" version = "311" source = { registry = "https://pypi.org/simple" } wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837, upload-time = "2025-07-14T20:12:59.59Z" }, { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187, upload-time = "2025-07-14T20:13:01.419Z" }, { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162, upload-time = "2025-07-14T20:13:03.544Z" }, @@ -2409,6 +3263,11 @@ version = "3.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/df/429cc505dc5f77ab0612c4b60bca2e3dcc81f6c321844ee017d6dc0f4a95/pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1", size = 28551, upload-time = "2025-08-12T20:33:46.506Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/15/f9/13d62974debb0c74ce3fa3d96b32cee6fce4f2d634789217e67aebf339f6/pywinpty-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:327b6034e0dc38352c1c99a7c0b3e54941b4e506a5f21acce63609cd2ab6cce2", size = 2050843, upload-time = "2025-08-12T20:36:11.134Z" }, + { url = "https://files.pythonhosted.org/packages/d6/34/30727e8a97709f5033277457df9a293ccddf34d6eb7528e6a1e910265307/pywinpty-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:29daa71ac5dcbe1496ef99f4cde85a732b1f0a3b71405d42177dbcf9ee405e5a", size = 2051048, upload-time = "2025-08-12T20:37:18.488Z" }, + { url = "https://files.pythonhosted.org/packages/76/d9/bd2249815c305ef8f879b326db1fe1effc8e5f22bd88e522b4b55231aa6f/pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3", size = 2051564, upload-time = "2025-08-12T20:37:09.128Z" }, + { url = "https://files.pythonhosted.org/packages/e2/77/358b1a97c1d0714f288949372ec64a70884a7eceb3f887042b9ae0bea388/pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1", size = 2050856, upload-time = "2025-08-12T20:36:09.117Z" }, + { url = "https://files.pythonhosted.org/packages/8f/6c/4249cfb4eb4fdad2c76bc96db0642a40111847c375b92e5b9f4bf289ddd6/pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69", size = 2050082, upload-time = "2025-08-12T20:36:28.591Z" }, { url = "https://files.pythonhosted.org/packages/5a/c6/8c73d678dd30a7a3684dab242833c7bb709722cf1ca98f9f2da6f9d15bab/pywinpty-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:007735316170ec1b6e773deadab5fe9ec4074dfdc06f27513fe87b8cfe45237d", size = 2051676, upload-time = "2025-08-12T20:36:14.63Z" }, ] @@ -2418,6 +3277,42 @@ version = "6.0.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload-time = "2024-08-06T20:33:25.896Z" }, { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload-time = "2024-08-06T20:33:27.212Z" }, { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload-time = "2024-08-06T20:33:28.974Z" }, @@ -2450,6 +3345,26 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/30/5f/557d2032a2f471edbcc227da724c24a1c05887b5cda1e3ae53af98b9e0a5/pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b", size = 281158, upload-time = "2025-08-03T05:05:40.352Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/72/0b/ccf4d0b152a6a11f0fc01e73978202fe0e8fe0e91e20941598e83a170bee/pyzmq-27.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:90a4da42aa322de8a3522461e3b5fe999935763b27f69a02fced40f4e3cf9682", size = 1329293, upload-time = "2025-08-03T05:02:56.001Z" }, + { url = "https://files.pythonhosted.org/packages/bc/76/48706d291951b1300d3cf985e503806901164bf1581f27c4b6b22dbab2fa/pyzmq-27.0.1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e648dca28178fc879c814cf285048dd22fd1f03e1104101106505ec0eea50a4d", size = 905953, upload-time = "2025-08-03T05:02:59.061Z" }, + { url = "https://files.pythonhosted.org/packages/aa/8a/df3135b96712068d184c53120c7dbf3023e5e362a113059a4f85cd36c6a0/pyzmq-27.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bca8abc31799a6f3652d13f47e0b0e1cab76f9125f2283d085a3754f669b607", size = 666165, upload-time = "2025-08-03T05:03:00.789Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ed/341a7148e08d2830f480f53ab3d136d88fc5011bb367b516d95d0ebb46dd/pyzmq-27.0.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:092f4011b26d6b0201002f439bd74b38f23f3aefcb358621bdc3b230afc9b2d5", size = 853756, upload-time = "2025-08-03T05:03:03.347Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bc/d26fe010477c3e901f0f5a3e70446950dde9aa217f1d1a13534eb0fccfe5/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f02f30a4a6b3efe665ab13a3dd47109d80326c8fd286311d1ba9f397dc5f247", size = 1654870, upload-time = "2025-08-03T05:03:05.331Z" }, + { url = "https://files.pythonhosted.org/packages/32/21/9b488086bf3f55b2eb26db09007a3962f62f3b81c5c6295a6ff6aaebd69c/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f293a1419266e3bf3557d1f8778f9e1ffe7e6b2c8df5c9dca191caf60831eb74", size = 2033444, upload-time = "2025-08-03T05:03:07.318Z" }, + { url = "https://files.pythonhosted.org/packages/3d/53/85b64a792223cd43393d25e03c8609df41aac817ea5ce6a27eceeed433ee/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ce181dd1a7c6c012d0efa8ab603c34b5ee9d86e570c03415bbb1b8772eeb381c", size = 1891289, upload-time = "2025-08-03T05:03:08.96Z" }, + { url = "https://files.pythonhosted.org/packages/23/5b/078aae8fe1c4cdba1a77a598870c548fd52b4d4a11e86b8116bbef47d9f3/pyzmq-27.0.1-cp310-cp310-win32.whl", hash = "sha256:f65741cc06630652e82aa68ddef4986a3ab9073dd46d59f94ce5f005fa72037c", size = 566693, upload-time = "2025-08-03T05:03:10.711Z" }, + { url = "https://files.pythonhosted.org/packages/24/e1/4471fff36416ebf1ffe43577b9c7dcf2ff4798f2171f0d169640a48d2305/pyzmq-27.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:44909aa3ed2234d69fe81e1dade7be336bcfeab106e16bdaa3318dcde4262b93", size = 631649, upload-time = "2025-08-03T05:03:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/e8/4c/8edac8dd56f223124aa40403d2c097bbad9b0e2868a67cad9a2a029863aa/pyzmq-27.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:4401649bfa0a38f0f8777f8faba7cd7eb7b5b8ae2abc7542b830dd09ad4aed0d", size = 559274, upload-time = "2025-08-03T05:03:13.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/18/a8e0da6ababbe9326116fb1c890bf1920eea880e8da621afb6bc0f39a262/pyzmq-27.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9729190bd770314f5fbba42476abf6abe79a746eeda11d1d68fd56dd70e5c296", size = 1332721, upload-time = "2025-08-03T05:03:15.237Z" }, + { url = "https://files.pythonhosted.org/packages/75/a4/9431ba598651d60ebd50dc25755402b770322cf8432adcc07d2906e53a54/pyzmq-27.0.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:696900ef6bc20bef6a242973943574f96c3f97d2183c1bd3da5eea4f559631b1", size = 908249, upload-time = "2025-08-03T05:03:16.933Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/e624e1793689e4e685d2ee21c40277dd4024d9d730af20446d88f69be838/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96a63aecec22d3f7fdea3c6c98df9e42973f5856bb6812c3d8d78c262fee808", size = 668649, upload-time = "2025-08-03T05:03:18.49Z" }, + { url = "https://files.pythonhosted.org/packages/6c/29/0652a39d4e876e0d61379047ecf7752685414ad2e253434348246f7a2a39/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c512824360ea7490390566ce00bee880e19b526b312b25cc0bc30a0fe95cb67f", size = 856601, upload-time = "2025-08-03T05:03:20.194Z" }, + { url = "https://files.pythonhosted.org/packages/36/2d/8d5355d7fc55bb6e9c581dd74f58b64fa78c994079e3a0ea09b1b5627cde/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfb2bb5e0f7198eaacfb6796fb0330afd28f36d985a770745fba554a5903595a", size = 1657750, upload-time = "2025-08-03T05:03:22.055Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f4/cd032352d5d252dc6f5ee272a34b59718ba3af1639a8a4ef4654f9535cf5/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f6886c59ba93ffde09b957d3e857e7950c8fe818bd5494d9b4287bc6d5bc7f1", size = 2034312, upload-time = "2025-08-03T05:03:23.578Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1a/c050d8b6597200e97a4bd29b93c769d002fa0b03083858227e0376ad59bc/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b99ea9d330e86ce1ff7f2456b33f1bf81c43862a5590faf4ef4ed3a63504bdab", size = 1893632, upload-time = "2025-08-03T05:03:25.167Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/173ce21d5097e7fcf284a090e8beb64fc683c6582b1f00fa52b1b7e867ce/pyzmq-27.0.1-cp311-cp311-win32.whl", hash = "sha256:571f762aed89025ba8cdcbe355fea56889715ec06d0264fd8b6a3f3fa38154ed", size = 566587, upload-time = "2025-08-03T05:03:26.769Z" }, + { url = "https://files.pythonhosted.org/packages/53/ab/22bd33e7086f0a2cc03a5adabff4bde414288bb62a21a7820951ef86ec20/pyzmq-27.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee16906c8025fa464bea1e48128c048d02359fb40bebe5333103228528506530", size = 632873, upload-time = "2025-08-03T05:03:28.685Z" }, + { url = "https://files.pythonhosted.org/packages/90/14/3e59b4a28194285ceeff725eba9aa5ba8568d1cb78aed381dec1537c705a/pyzmq-27.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ba068f28028849da725ff9185c24f832ccf9207a40f9b28ac46ab7c04994bd41", size = 558918, upload-time = "2025-08-03T05:03:30.085Z" }, { url = "https://files.pythonhosted.org/packages/0e/9b/c0957041067c7724b310f22c398be46399297c12ed834c3bc42200a2756f/pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd", size = 1305432, upload-time = "2025-08-03T05:03:32.177Z" }, { url = "https://files.pythonhosted.org/packages/8e/55/bd3a312790858f16b7def3897a0c3eb1804e974711bf7b9dcb5f47e7f82c/pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd", size = 895095, upload-time = "2025-08-03T05:03:33.918Z" }, { url = "https://files.pythonhosted.org/packages/20/50/fc384631d8282809fb1029a4460d2fe90fa0370a0e866a8318ed75c8d3bb/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a", size = 651826, upload-time = "2025-08-03T05:03:35.818Z" }, @@ -2460,6 +3375,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bf/42/c562e9151aa90ed1d70aac381ea22a929d6b3a2ce4e1d6e2e135d34fd9c6/pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb", size = 558177, upload-time = "2025-08-03T05:03:43.979Z" }, { url = "https://files.pythonhosted.org/packages/40/96/5c50a7d2d2b05b19994bf7336b97db254299353dd9b49b565bb71b485f03/pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686", size = 618923, upload-time = "2025-08-03T05:03:45.438Z" }, { url = "https://files.pythonhosted.org/packages/13/33/1ec89c8f21c89d21a2eaff7def3676e21d8248d2675705e72554fb5a6f3f/pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed", size = 552358, upload-time = "2025-08-03T05:03:46.887Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/f26e276211ec8090a4d11e4ec70eb8a8b15781e591c1d44ce62f372963a0/pyzmq-27.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:497bd8af534ae55dc4ef67eebd1c149ff2a0b0f1e146db73c8b5a53d83c1a5f5", size = 1122287, upload-time = "2025-08-03T05:03:48.838Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d8/af4b507e4f7eeea478cc8ee873995a6fd55582bfb99140593ed460e1db3c/pyzmq-27.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a066ea6ad6218b4c233906adf0ae67830f451ed238419c0db609310dd781fbe7", size = 1155756, upload-time = "2025-08-03T05:03:50.907Z" }, + { url = "https://files.pythonhosted.org/packages/ac/55/37fae0013e11f88681da42698e550b08a316d608242551f65095cc99232a/pyzmq-27.0.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:72d235d6365ca73d8ce92f7425065d70f5c1e19baa458eb3f0d570e425b73a96", size = 1340826, upload-time = "2025-08-03T05:03:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e4/3a87854c64b26fcf63a9d1b6f4382bd727d4797c772ceb334a97b7489be9/pyzmq-27.0.1-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:313a7b374e3dc64848644ca348a51004b41726f768b02e17e689f1322366a4d9", size = 897283, upload-time = "2025-08-03T05:03:54.167Z" }, + { url = "https://files.pythonhosted.org/packages/17/3e/4296c6b0ad2d07be11ae1395dccf9cae48a0a655cf9be1c3733ad2b591d1/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:119ce8590409702394f959c159d048002cbed2f3c0645ec9d6a88087fc70f0f1", size = 660565, upload-time = "2025-08-03T05:03:56.152Z" }, + { url = "https://files.pythonhosted.org/packages/72/41/a33ba3aa48b45b23c4cd4ac49aafde46f3e0f81939f2bfb3b6171a437122/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45c3e00ce16896ace2cd770ab9057a7cf97d4613ea5f2a13f815141d8b6894b9", size = 847680, upload-time = "2025-08-03T05:03:57.696Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8c/bf2350bb25b3b58d2e5b5d2290ffab0e923f0cc6d02288d3fbf4baa6e4d1/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:678e50ec112bdc6df5a83ac259a55a4ba97a8b314c325ab26b3b5b071151bc61", size = 1650151, upload-time = "2025-08-03T05:03:59.387Z" }, + { url = "https://files.pythonhosted.org/packages/f7/1a/a5a07c54890891344a8ddc3d5ab320dd3c4e39febb6e4472546e456d5157/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d0b96c30be9f9387b18b18b6133c75a7b1b0065da64e150fe1feb5ebf31ece1c", size = 2023766, upload-time = "2025-08-03T05:04:01.883Z" }, + { url = "https://files.pythonhosted.org/packages/62/5e/514dcff08f02c6c8a45a6e23621901139cf853be7ac5ccd0b9407c3aa3de/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88dc92d9eb5ea4968123e74db146d770b0c8d48f0e2bfb1dbc6c50a8edb12d64", size = 1885195, upload-time = "2025-08-03T05:04:03.923Z" }, + { url = "https://files.pythonhosted.org/packages/c8/91/87f74f98a487fbef0b115f6025e4a295129fd56b2b633a03ba7d5816ecc2/pyzmq-27.0.1-cp313-cp313t-win32.whl", hash = "sha256:6dcbcb34f5c9b0cefdfc71ff745459241b7d3cda5b27c7ad69d45afc0821d1e1", size = 574213, upload-time = "2025-08-03T05:04:05.905Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/07f7d0d7f4c81e08be7b60e52ff2591c557377c017f96204d33d5fca1b07/pyzmq-27.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9fd0fda730461f510cfd9a40fafa5355d65f5e3dbdd8d6dfa342b5b3f5d1949", size = 640202, upload-time = "2025-08-03T05:04:07.439Z" }, + { url = "https://files.pythonhosted.org/packages/ab/83/21d66bcef6fb803647a223cbde95111b099e2176277c0cbc8b099c485510/pyzmq-27.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:56a3b1853f3954ec1f0e91085f1350cc57d18f11205e4ab6e83e4b7c414120e0", size = 561514, upload-time = "2025-08-03T05:04:09.071Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0b/d5ea75cf46b52cdce85a85200c963cb498932953df443892238be49b1a01/pyzmq-27.0.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f98f6b7787bd2beb1f0dde03f23a0621a0c978edf673b7d8f5e7bc039cbe1b60", size = 1340836, upload-time = "2025-08-03T05:04:10.774Z" }, + { url = "https://files.pythonhosted.org/packages/be/4c/0dbce882550e17db6846b29e9dc242aea7590e7594e1ca5043e8e58fff2d/pyzmq-27.0.1-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:351bf5d8ca0788ca85327fda45843b6927593ff4c807faee368cc5aaf9f809c2", size = 897236, upload-time = "2025-08-03T05:04:13.221Z" }, + { url = "https://files.pythonhosted.org/packages/1b/22/461e131cf16b8814f3c356fa1ea0912697dbc4c64cddf01f7756ec704c1e/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5268a5a9177afff53dc6d70dffe63114ba2a6e7b20d9411cc3adeba09eeda403", size = 660374, upload-time = "2025-08-03T05:04:15.032Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0c/bbd65a814395bf4fc3e57c6c13af27601c07e4009bdfb75ebcf500537bbd/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4aca06ba295aa78bec9b33ec028d1ca08744c36294338c41432b7171060c808", size = 847497, upload-time = "2025-08-03T05:04:16.967Z" }, + { url = "https://files.pythonhosted.org/packages/1e/df/3d1f4a03b561d824cbd491394f67591957e2f1acf6dc85d96f970312a76a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1c363c6dc66352331d5ad64bb838765c6692766334a6a02fdb05e76bd408ae18", size = 1650028, upload-time = "2025-08-03T05:04:19.398Z" }, + { url = "https://files.pythonhosted.org/packages/41/c9/a3987540f59a412bdaae3f362f78e00e6769557a598c63b7e32956aade5a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:87aebf4acd7249bdff8d3df03aed4f09e67078e6762cfe0aecf8d0748ff94cde", size = 2023808, upload-time = "2025-08-03T05:04:21.145Z" }, + { url = "https://files.pythonhosted.org/packages/b0/a5/c388f4cd80498a8eaef7535f2a8eaca0a35b82b87a0b47fa1856fc135004/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f22d67756518d71901edf73b38dc0eb4765cce22c8fe122cc81748d425262b", size = 1884970, upload-time = "2025-08-03T05:04:22.908Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ac/b2a89a1ed90526a1b9a260cdc5cd42f055fd44ee8d2a59902b5ac35ddeb1/pyzmq-27.0.1-cp314-cp314t-win32.whl", hash = "sha256:8c62297bc7aea2147b472ca5ca2b4389377ad82898c87cabab2a94aedd75e337", size = 586905, upload-time = "2025-08-03T05:04:24.492Z" }, + { url = "https://files.pythonhosted.org/packages/68/62/7aa5ea04e836f7a788b2a67405f83011cef59ca76d7bac91d1fc9a0476da/pyzmq-27.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bee5248d5ec9223545f8cc4f368c2d571477ae828c99409125c3911511d98245", size = 660503, upload-time = "2025-08-03T05:04:26.382Z" }, + { url = "https://files.pythonhosted.org/packages/89/32/3836ed85947b06f1d67c07ce16c00b0cf8c053ab0b249d234f9f81ff95ff/pyzmq-27.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0fc24bf45e4a454e55ef99d7f5c8b8712539200ce98533af25a5bfa954b6b390", size = 575098, upload-time = "2025-08-03T05:04:27.974Z" }, { url = "https://files.pythonhosted.org/packages/7c/f1/cdceaf9b6637570f36eee2dbd25bc5a800637cd9b4103b15fbc4b0658b82/pyzmq-27.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:05a94233fdde585eb70924a6e4929202a747eea6ed308a6171c4f1c715bbe39e", size = 1330651, upload-time = "2025-08-03T05:04:45.583Z" }, { url = "https://files.pythonhosted.org/packages/74/5c/469d3b9315eb4d5c61c431a4ae8acdb6abb165dfa5ddbc7af639be53891c/pyzmq-27.0.1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c96702e1082eab62ae583d64c4e19c9b848359196697e536a0c57ae9bd165bd5", size = 906524, upload-time = "2025-08-03T05:04:47.904Z" }, { url = "https://files.pythonhosted.org/packages/ed/c0/c7a12a533a87beb1143f4a9c8f4d6f82775c04eb3ad27f664e0ef00a6189/pyzmq-27.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c9180d1f5b4b73e28b64e63cc6c4c097690f102aa14935a62d5dd7426a4e5b5a", size = 863547, upload-time = "2025-08-03T05:04:49.579Z" }, @@ -2470,6 +3407,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/6b/6ba945a4756e4b1ba69b909d2b040d16aff0f0edd56a60874970b8d47237/pyzmq-27.0.1-cp39-cp39-win32.whl", hash = "sha256:f44e7ea288d022d4bf93b9e79dafcb4a7aea45a3cbeae2116792904931cefccf", size = 567388, upload-time = "2025-08-03T05:04:58.704Z" }, { url = "https://files.pythonhosted.org/packages/b0/b4/8ffb9cfb363bc9d61c5d8d9f79a7ada572b0865dac9f4a547da901b81d76/pyzmq-27.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffe6b809a97ac6dea524b3b837d5b28743d8c2f121141056d168ff0ba8f614ef", size = 632004, upload-time = "2025-08-03T05:05:00.434Z" }, { url = "https://files.pythonhosted.org/packages/6c/4b/dd5c4d3bb7261efb30a909d2df447ac77393653e5c34c8a9cd536f429c3e/pyzmq-27.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:fde26267416c8478c95432c81489b53f57b0b5d24cd5c8bfaebf5bbaac4dc90c", size = 559881, upload-time = "2025-08-03T05:05:02.363Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/fc96f224dd99070fe55d0afc37ac08d7d4635d434e3f9425b232867e01b9/pyzmq-27.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:544b995a6a1976fad5d7ff01409b4588f7608ccc41be72147700af91fd44875d", size = 835950, upload-time = "2025-08-03T05:05:04.193Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b6/802d96017f176c3a7285603d9ed2982550095c136c6230d3e0b53f52c7e5/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0f772eea55cccce7f45d6ecdd1d5049c12a77ec22404f6b892fae687faa87bee", size = 799876, upload-time = "2025-08-03T05:05:06.263Z" }, + { url = "https://files.pythonhosted.org/packages/4e/52/49045c6528007cce385f218f3a674dc84fc8b3265330d09e57c0a59b41f4/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9d63d66059114a6756d09169c9209ffceabacb65b9cb0f66e6fc344b20b73e6", size = 567402, upload-time = "2025-08-03T05:05:08.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fe/c29ac0d5a817543ecf0cb18f17195805bad0da567a1c64644aacf11b2779/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1da8e645c655d86f0305fb4c65a0d848f461cd90ee07d21f254667287b5dbe50", size = 747030, upload-time = "2025-08-03T05:05:10.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/d1/cc1fbfb65b4042016e4e035b2548cdfe0945c817345df83aa2d98490e7fc/pyzmq-27.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1843fd0daebcf843fe6d4da53b8bdd3fc906ad3e97d25f51c3fed44436d82a49", size = 544567, upload-time = "2025-08-03T05:05:11.856Z" }, + { url = "https://files.pythonhosted.org/packages/b4/1a/49f66fe0bc2b2568dd4280f1f520ac8fafd73f8d762140e278d48aeaf7b9/pyzmq-27.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7fb0ee35845bef1e8c4a152d766242164e138c239e3182f558ae15cb4a891f94", size = 835949, upload-time = "2025-08-03T05:05:13.798Z" }, + { url = "https://files.pythonhosted.org/packages/49/94/443c1984b397eab59b14dd7ae8bc2ac7e8f32dbc646474453afcaa6508c4/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f379f11e138dfd56c3f24a04164f871a08281194dd9ddf656a278d7d080c8ad0", size = 799875, upload-time = "2025-08-03T05:05:15.632Z" }, + { url = "https://files.pythonhosted.org/packages/30/f1/fd96138a0f152786a2ba517e9c6a8b1b3516719e412a90bb5d8eea6b660c/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b978c0678cffbe8860ec9edc91200e895c29ae1ac8a7085f947f8e8864c489fb", size = 567403, upload-time = "2025-08-03T05:05:17.326Z" }, + { url = "https://files.pythonhosted.org/packages/16/57/34e53ef2b55b1428dac5aabe3a974a16c8bda3bf20549ba500e3ff6cb426/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ebccf0d760bc92a4a7c751aeb2fef6626144aace76ee8f5a63abeb100cae87f", size = 747032, upload-time = "2025-08-03T05:05:19.074Z" }, + { url = "https://files.pythonhosted.org/packages/81/b7/769598c5ae336fdb657946950465569cf18803140fe89ce466d7f0a57c11/pyzmq-27.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77fed80e30fa65708546c4119840a46691290efc231f6bfb2ac2a39b52e15811", size = 544566, upload-time = "2025-08-03T05:05:20.798Z" }, { url = "https://files.pythonhosted.org/packages/60/8d/c0880acd2d5908eec6fe9b399f0fb630e5f203f8a69f82442d5cb2b2f46c/pyzmq-27.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d97b59cbd8a6c8b23524a8ce237ff9504d987dc07156258aa68ae06d2dd5f34d", size = 835946, upload-time = "2025-08-03T05:05:31.161Z" }, { url = "https://files.pythonhosted.org/packages/c1/35/6b71409aa6629b3d4917b38961501898827f4fb5ddc680cc8e0cb13987f3/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:27a78bdd384dbbe7b357af95f72efe8c494306b5ec0a03c31e2d53d6763e5307", size = 799870, upload-time = "2025-08-03T05:05:33.01Z" }, { url = "https://files.pythonhosted.org/packages/16/f6/5d36d8f6571478f32c32f5872abd76eda052746283ca87e24cc5758f7987/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b007e5dcba684e888fbc90554cb12a2f4e492927c8c2761a80b7590209821743", size = 758371, upload-time = "2025-08-03T05:05:34.722Z" }, @@ -2482,11 +3429,11 @@ name = "qblox-instruments" version = "0.11.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fastjsonschema" }, - { name = "ifaddr" }, - { name = "numpy" }, - { name = "qcodes" }, - { name = "spirack" }, + { name = "fastjsonschema", marker = "python_full_version < '3.10'" }, + { name = "ifaddr", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "qcodes", marker = "python_full_version < '3.10'" }, + { name = "spirack", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/33/230219d1c9e969931b0c115635673f3f3c92665cb868c0a4dbcedf5e630a/qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504", size = 1350939, upload-time = "2023-11-13T21:48:24.957Z" } @@ -2495,34 +3442,34 @@ name = "qcodes" version = "0.46.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "broadbean" }, - { name = "cf-xarray" }, - { name = "dask" }, - { name = "h5netcdf" }, - { name = "h5py" }, - { name = "importlib-metadata" }, - { name = "ipykernel" }, - { name = "ipython" }, - { name = "ipywidgets" }, - { name = "jsonschema" }, - { name = "matplotlib" }, - { name = "numpy" }, - { name = "opentelemetry-api" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pyarrow" }, - { name = "pyvisa" }, - { name = "ruamel-yaml" }, - { name = "tabulate" }, - { name = "tornado" }, - { name = "tqdm" }, - { name = "typing-extensions" }, - { name = "uncertainties" }, - { name = "versioningit" }, - { name = "websockets" }, - { name = "wrapt" }, - { name = "xarray" }, + { name = "broadbean", marker = "python_full_version < '3.10'" }, + { name = "cf-xarray", marker = "python_full_version < '3.10'" }, + { name = "dask", marker = "python_full_version < '3.10'" }, + { name = "h5netcdf", marker = "python_full_version < '3.10'" }, + { name = "h5py", marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "ipykernel", marker = "python_full_version < '3.10'" }, + { name = "ipython", marker = "python_full_version < '3.10'" }, + { name = "ipywidgets", marker = "python_full_version < '3.10'" }, + { name = "jsonschema", marker = "python_full_version < '3.10'" }, + { name = "matplotlib", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "opentelemetry-api", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pandas", marker = "python_full_version < '3.10'" }, + { name = "pillow", marker = "python_full_version < '3.10'" }, + { name = "pyarrow", marker = "python_full_version < '3.10'" }, + { name = "pyvisa", marker = "python_full_version < '3.10'" }, + { name = "ruamel-yaml", marker = "python_full_version < '3.10'" }, + { name = "tabulate", marker = "python_full_version < '3.10'" }, + { name = "tornado", marker = "python_full_version < '3.10'" }, + { name = "tqdm", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "uncertainties", marker = "python_full_version < '3.10'" }, + { name = "versioningit", marker = "python_full_version < '3.10'" }, + { name = "websockets", marker = "python_full_version < '3.10'" }, + { name = "wrapt", marker = "python_full_version < '3.10'" }, + { name = "xarray", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0d/01/45ff13476c95523079950db255da27c6fc5522f65ee12ca45ee8bd9d0bdc/qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99", size = 815980, upload-time = "2024-07-04T09:18:28.822Z" } wheels = [ @@ -2534,16 +3481,16 @@ name = "qcodes-loop" version = "0.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py" }, - { name = "hickle" }, - { name = "ipython" }, - { name = "lazy-loader" }, - { name = "matplotlib" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "qcodes" }, - { name = "versioningit" }, - { name = "xarray" }, + { name = "h5py", marker = "python_full_version < '3.10'" }, + { name = "hickle", marker = "python_full_version < '3.10'" }, + { name = "ipython", marker = "python_full_version < '3.10'" }, + { name = "lazy-loader", marker = "python_full_version < '3.10'" }, + { name = "matplotlib", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "pandas", marker = "python_full_version < '3.10'" }, + { name = "qcodes", marker = "python_full_version < '3.10'" }, + { name = "versioningit", marker = "python_full_version < '3.10'" }, + { name = "xarray", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b6/0b/818b0120ec1d30488f25c5d658ef3a1dd3b9895df621df09c96907e180df/qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c", size = 102955, upload-time = "2024-08-01T12:21:05.54Z" } wheels = [ @@ -2555,27 +3502,27 @@ name = "quantify-core" version = "0.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "adaptive" }, - { name = "appnope" }, - { name = "dataclasses-json" }, - { name = "deepdiff" }, - { name = "dill" }, - { name = "filelock" }, - { name = "h5netcdf" }, - { name = "jsonschema" }, - { name = "lmfit" }, - { name = "matplotlib" }, - { name = "methodtools" }, - { name = "numpy" }, - { name = "pyqt5" }, - { name = "pyqtgraph" }, - { name = "qcodes" }, - { name = "qcodes-loop" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "typing-extensions" }, - { name = "uncertainties" }, - { name = "xarray", extra = ["io"] }, + { name = "adaptive", marker = "python_full_version < '3.10'" }, + { name = "appnope", marker = "python_full_version < '3.10'" }, + { name = "dataclasses-json", marker = "python_full_version < '3.10'" }, + { name = "deepdiff", marker = "python_full_version < '3.10'" }, + { name = "dill", marker = "python_full_version < '3.10'" }, + { name = "filelock", marker = "python_full_version < '3.10'" }, + { name = "h5netcdf", marker = "python_full_version < '3.10'" }, + { name = "jsonschema", marker = "python_full_version < '3.10'" }, + { name = "lmfit", marker = "python_full_version < '3.10'" }, + { name = "matplotlib", marker = "python_full_version < '3.10'" }, + { name = "methodtools", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "pyqt5", marker = "python_full_version < '3.10'" }, + { name = "pyqtgraph", marker = "python_full_version < '3.10'" }, + { name = "qcodes", marker = "python_full_version < '3.10'" }, + { name = "qcodes-loop", marker = "python_full_version < '3.10'" }, + { name = "scikit-learn", marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "uncertainties", marker = "python_full_version < '3.10'" }, + { name = "xarray", extra = ["io"], marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6e/b3/33232239a59e65d67d158ca6306c4c9131234157d10fb7b39165dafee131/quantify_core-0.9.1.tar.gz", hash = "sha256:7f3dc9677a8ff59cdcfd6311626d10983ea1f585e2adb7ba73e87e636a7fb365", size = 6125832, upload-time = "2025-08-18T11:42:42.362Z" } wheels = [ @@ -2587,26 +3534,26 @@ name = "quantify-scheduler" version = "0.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "columnar" }, - { name = "dataclasses-json" }, - { name = "fastjsonschema" }, - { name = "jinja2" }, - { name = "matplotlib" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "pandas", extra = ["output-formatting"] }, - { name = "pathvalidate" }, - { name = "plotly" }, - { name = "pydantic" }, - { name = "qblox-instruments" }, - { name = "qcodes" }, - { name = "quantify-core" }, - { name = "rich", extra = ["jupyter"] }, - { name = "scipy" }, - { name = "xxhash" }, - { name = "zhinst" }, - { name = "zhinst-qcodes" }, - { name = "zhinst-toolkit" }, + { name = "columnar", marker = "python_full_version < '3.10'" }, + { name = "dataclasses-json", marker = "python_full_version < '3.10'" }, + { name = "fastjsonschema", marker = "python_full_version < '3.10'" }, + { name = "jinja2", marker = "python_full_version < '3.10'" }, + { name = "matplotlib", marker = "python_full_version < '3.10'" }, + { name = "networkx", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "pandas", extra = ["output-formatting"], marker = "python_full_version < '3.10'" }, + { name = "pathvalidate", marker = "python_full_version < '3.10'" }, + { name = "plotly", marker = "python_full_version < '3.10'" }, + { name = "pydantic", marker = "python_full_version < '3.10'" }, + { name = "qblox-instruments", marker = "python_full_version < '3.10'" }, + { name = "qcodes", marker = "python_full_version < '3.10'" }, + { name = "quantify-core", marker = "python_full_version < '3.10'" }, + { name = "rich", extra = ["jupyter"], marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "xxhash", marker = "python_full_version < '3.10'" }, + { name = "zhinst", marker = "python_full_version < '3.10'" }, + { name = "zhinst-qcodes", marker = "python_full_version < '3.10'" }, + { name = "zhinst-toolkit", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/28/94/5bffb75c025b69b2cfeb540d00a4923b80e0ad04e203082810f15669add1/quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910", size = 1354801, upload-time = "2024-04-02T16:45:32.815Z" } wheels = [ @@ -2620,7 +3567,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } wheels = [ @@ -2680,8 +3627,8 @@ name = "rich" version = "14.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, + { name = "markdown-it-py", marker = "python_full_version < '3.10'" }, + { name = "pygments", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } wheels = [ @@ -2690,7 +3637,7 @@ wheels = [ [package.optional-dependencies] jupyter = [ - { name = "ipywidgets" }, + { name = "ipywidgets", marker = "python_full_version < '3.10'" }, ] [[package]] @@ -2699,6 +3646,108 @@ version = "0.27.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1e/d9/991a0dee12d9fc53ed027e26a26a64b151d77252ac477e22666b9688bc16/rpds_py-0.27.0.tar.gz", hash = "sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f", size = 27420, upload-time = "2025-08-07T08:26:39.624Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/75/2d/ad2e37dee3f45580f7fa0066c412a521f9bee53d2718b0e9436d308a1ecd/rpds_py-0.27.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:130c1ffa5039a333f5926b09e346ab335f0d4ec393b030a18549a7c7e7c2cea4", size = 371511, upload-time = "2025-08-07T08:23:06.205Z" }, + { url = "https://files.pythonhosted.org/packages/f5/67/57b4b2479193fde9dd6983a13c2550b5f9c3bcdf8912dffac2068945eb14/rpds_py-0.27.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a4cf32a26fa744101b67bfd28c55d992cd19438aff611a46cac7f066afca8fd4", size = 354718, upload-time = "2025-08-07T08:23:08.222Z" }, + { url = "https://files.pythonhosted.org/packages/a3/be/c2b95ec4b813eb11f3a3c3d22f22bda8d3a48a074a0519cde968c4d102cf/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64a0fe3f334a40b989812de70160de6b0ec7e3c9e4a04c0bbc48d97c5d3600ae", size = 381518, upload-time = "2025-08-07T08:23:09.696Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d2/5a7279bc2b93b20bd50865a2269016238cee45f7dc3cc33402a7f41bd447/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a0ff7ee28583ab30a52f371b40f54e7138c52ca67f8ca17ccb7ccf0b383cb5f", size = 396694, upload-time = "2025-08-07T08:23:11.105Z" }, + { url = "https://files.pythonhosted.org/packages/65/e9/bac8b3714bd853c5bcb466e04acfb9a5da030d77e0ddf1dfad9afb791c31/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15ea4d2e182345dd1b4286593601d766411b43f868924afe297570658c31a62b", size = 514813, upload-time = "2025-08-07T08:23:12.215Z" }, + { url = "https://files.pythonhosted.org/packages/1d/aa/293115e956d7d13b7d2a9e9a4121f74989a427aa125f00ce4426ca8b7b28/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36184b44bf60a480863e51021c26aca3dfe8dd2f5eeabb33622b132b9d8b8b54", size = 402246, upload-time = "2025-08-07T08:23:13.699Z" }, + { url = "https://files.pythonhosted.org/packages/88/59/2d6789bb898fb3e2f0f7b82b7bcf27f579ebcb6cc36c24f4e208f7f58a5b/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b78430703cfcf5f5e86eb74027a1ed03a93509273d7c705babb547f03e60016", size = 383661, upload-time = "2025-08-07T08:23:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/0c/55/add13a593a7a81243a9eed56d618d3d427be5dc1214931676e3f695dfdc1/rpds_py-0.27.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:dbd749cff1defbde270ca346b69b3baf5f1297213ef322254bf2a28537f0b046", size = 401691, upload-time = "2025-08-07T08:23:16.681Z" }, + { url = "https://files.pythonhosted.org/packages/04/09/3e8b2aad494ffaca571e4e19611a12cc18fcfd756d9274f3871a2d822445/rpds_py-0.27.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bde37765564cd22a676dd8101b657839a1854cfaa9c382c5abf6ff7accfd4ae", size = 416529, upload-time = "2025-08-07T08:23:17.863Z" }, + { url = "https://files.pythonhosted.org/packages/a4/6d/bd899234728f1d8f72c9610f50fdf1c140ecd0a141320e1f1d0f6b20595d/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1d66f45b9399036e890fb9c04e9f70c33857fd8f58ac8db9f3278cfa835440c3", size = 558673, upload-time = "2025-08-07T08:23:18.99Z" }, + { url = "https://files.pythonhosted.org/packages/79/f4/f3e02def5193fb899d797c232f90d6f8f0f2b9eca2faef6f0d34cbc89b2e/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d85d784c619370d9329bbd670f41ff5f2ae62ea4519761b679d0f57f0f0ee267", size = 588426, upload-time = "2025-08-07T08:23:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/e3/0c/88e716cd8fd760e5308835fe298255830de4a1c905fd51760b9bb40aa965/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5df559e9e7644d9042f626f2c3997b555f347d7a855a15f170b253f6c5bfe358", size = 554552, upload-time = "2025-08-07T08:23:21.714Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a9/0a8243c182e7ac59b901083dff7e671feba6676a131bfff3f8d301cd2b36/rpds_py-0.27.0-cp310-cp310-win32.whl", hash = "sha256:b8a4131698b6992b2a56015f51646711ec5d893a0b314a4b985477868e240c87", size = 218081, upload-time = "2025-08-07T08:23:23.273Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/202ff35852312760148be9e08fe2ba6900aa28e7a46940a313eae473c10c/rpds_py-0.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:cbc619e84a5e3ab2d452de831c88bdcad824414e9c2d28cd101f94dbdf26329c", size = 230077, upload-time = "2025-08-07T08:23:24.308Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c1/49d515434c1752e40f5e35b985260cf27af052593378580a2f139a5be6b8/rpds_py-0.27.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:dbc2ab5d10544eb485baa76c63c501303b716a5c405ff2469a1d8ceffaabf622", size = 371577, upload-time = "2025-08-07T08:23:25.379Z" }, + { url = "https://files.pythonhosted.org/packages/e1/6d/bf2715b2fee5087fa13b752b5fd573f1a93e4134c74d275f709e38e54fe7/rpds_py-0.27.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ec85994f96a58cf7ed288caa344b7fe31fd1d503bdf13d7331ead5f70ab60d5", size = 354959, upload-time = "2025-08-07T08:23:26.767Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5c/e7762808c746dd19733a81373c10da43926f6a6adcf4920a21119697a60a/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:190d7285cd3bb6d31d37a0534d7359c1ee191eb194c511c301f32a4afa5a1dd4", size = 381485, upload-time = "2025-08-07T08:23:27.869Z" }, + { url = "https://files.pythonhosted.org/packages/40/51/0d308eb0b558309ca0598bcba4243f52c4cd20e15fe991b5bd75824f2e61/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c10d92fb6d7fd827e44055fcd932ad93dac6a11e832d51534d77b97d1d85400f", size = 396816, upload-time = "2025-08-07T08:23:29.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/aa/2d585ec911d78f66458b2c91252134ca0c7c70f687a72c87283173dc0c96/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd2c1d27ebfe6a015cfa2005b7fe8c52d5019f7bbdd801bc6f7499aab9ae739e", size = 514950, upload-time = "2025-08-07T08:23:30.576Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ef/aced551cc1148179557aed84343073adadf252c91265263ee6203458a186/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4790c9d5dd565ddb3e9f656092f57268951398cef52e364c405ed3112dc7c7c1", size = 402132, upload-time = "2025-08-07T08:23:32.428Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ac/cf644803d8d417653fe2b3604186861d62ea6afaef1b2284045741baef17/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4300e15e7d03660f04be84a125d1bdd0e6b2f674bc0723bc0fd0122f1a4585dc", size = 383660, upload-time = "2025-08-07T08:23:33.829Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ec/caf47c55ce02b76cbaeeb2d3b36a73da9ca2e14324e3d75cf72b59dcdac5/rpds_py-0.27.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:59195dc244fc183209cf8a93406889cadde47dfd2f0a6b137783aa9c56d67c85", size = 401730, upload-time = "2025-08-07T08:23:34.97Z" }, + { url = "https://files.pythonhosted.org/packages/0b/71/c1f355afdcd5b99ffc253422aa4bdcb04ccf1491dcd1bda3688a0c07fd61/rpds_py-0.27.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fae4a01ef8c4cb2bbe92ef2063149596907dc4a881a8d26743b3f6b304713171", size = 416122, upload-time = "2025-08-07T08:23:36.062Z" }, + { url = "https://files.pythonhosted.org/packages/38/0f/f4b5b1eda724ed0e04d2b26d8911cdc131451a7ee4c4c020a1387e5c6ded/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e3dc8d4ede2dbae6c0fc2b6c958bf51ce9fd7e9b40c0f5b8835c3fde44f5807d", size = 558771, upload-time = "2025-08-07T08:23:37.478Z" }, + { url = "https://files.pythonhosted.org/packages/93/c0/5f8b834db2289ab48d5cffbecbb75e35410103a77ac0b8da36bf9544ec1c/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c3782fb753aa825b4ccabc04292e07897e2fd941448eabf666856c5530277626", size = 587876, upload-time = "2025-08-07T08:23:38.662Z" }, + { url = "https://files.pythonhosted.org/packages/d2/dd/1a1df02ab8eb970115cff2ae31a6f73916609b900dc86961dc382b8c2e5e/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:887ab1f12b0d227e9260558a4a2320024b20102207ada65c43e1ffc4546df72e", size = 554359, upload-time = "2025-08-07T08:23:39.897Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e4/95a014ab0d51ab6e3bebbdb476a42d992d2bbf9c489d24cff9fda998e925/rpds_py-0.27.0-cp311-cp311-win32.whl", hash = "sha256:5d6790ff400254137b81b8053b34417e2c46921e302d655181d55ea46df58cf7", size = 218084, upload-time = "2025-08-07T08:23:41.086Z" }, + { url = "https://files.pythonhosted.org/packages/49/78/f8d5b71ec65a0376b0de31efcbb5528ce17a9b7fdd19c3763303ccfdedec/rpds_py-0.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:e24d8031a2c62f34853756d9208eeafa6b940a1efcbfe36e8f57d99d52bb7261", size = 230085, upload-time = "2025-08-07T08:23:42.143Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d3/84429745184091e06b4cc70f8597408e314c2d2f7f5e13249af9ffab9e3d/rpds_py-0.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:08680820d23df1df0a0260f714d12966bc6c42d02e8055a91d61e03f0c47dda0", size = 222112, upload-time = "2025-08-07T08:23:43.233Z" }, + { url = "https://files.pythonhosted.org/packages/cd/17/e67309ca1ac993fa1888a0d9b2f5ccc1f67196ace32e76c9f8e1dbbbd50c/rpds_py-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4", size = 362611, upload-time = "2025-08-07T08:23:44.773Z" }, + { url = "https://files.pythonhosted.org/packages/93/2e/28c2fb84aa7aa5d75933d1862d0f7de6198ea22dfd9a0cca06e8a4e7509e/rpds_py-0.27.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b", size = 347680, upload-time = "2025-08-07T08:23:46.014Z" }, + { url = "https://files.pythonhosted.org/packages/44/3e/9834b4c8f4f5fe936b479e623832468aa4bd6beb8d014fecaee9eac6cdb1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e", size = 384600, upload-time = "2025-08-07T08:23:48Z" }, + { url = "https://files.pythonhosted.org/packages/19/78/744123c7b38865a965cd9e6f691fde7ef989a00a256fa8bf15b75240d12f/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34", size = 400697, upload-time = "2025-08-07T08:23:49.407Z" }, + { url = "https://files.pythonhosted.org/packages/32/97/3c3d32fe7daee0a1f1a678b6d4dfb8c4dcf88197fa2441f9da7cb54a8466/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8", size = 517781, upload-time = "2025-08-07T08:23:50.557Z" }, + { url = "https://files.pythonhosted.org/packages/b2/be/28f0e3e733680aa13ecec1212fc0f585928a206292f14f89c0b8a684cad1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726", size = 406449, upload-time = "2025-08-07T08:23:51.732Z" }, + { url = "https://files.pythonhosted.org/packages/95/ae/5d15c83e337c082d0367053baeb40bfba683f42459f6ebff63a2fd7e5518/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e", size = 386150, upload-time = "2025-08-07T08:23:52.822Z" }, + { url = "https://files.pythonhosted.org/packages/bf/65/944e95f95d5931112829e040912b25a77b2e7ed913ea5fe5746aa5c1ce75/rpds_py-0.27.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3", size = 406100, upload-time = "2025-08-07T08:23:54.339Z" }, + { url = "https://files.pythonhosted.org/packages/21/a4/1664b83fae02894533cd11dc0b9f91d673797c2185b7be0f7496107ed6c5/rpds_py-0.27.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e", size = 421345, upload-time = "2025-08-07T08:23:55.832Z" }, + { url = "https://files.pythonhosted.org/packages/7c/26/b7303941c2b0823bfb34c71378249f8beedce57301f400acb04bb345d025/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f", size = 561891, upload-time = "2025-08-07T08:23:56.951Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c8/48623d64d4a5a028fa99576c768a6159db49ab907230edddc0b8468b998b/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03", size = 591756, upload-time = "2025-08-07T08:23:58.146Z" }, + { url = "https://files.pythonhosted.org/packages/b3/51/18f62617e8e61cc66334c9fb44b1ad7baae3438662098efbc55fb3fda453/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374", size = 557088, upload-time = "2025-08-07T08:23:59.6Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4c/e84c3a276e2496a93d245516be6b49e20499aa8ca1c94d59fada0d79addc/rpds_py-0.27.0-cp312-cp312-win32.whl", hash = "sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97", size = 221926, upload-time = "2025-08-07T08:24:00.695Z" }, + { url = "https://files.pythonhosted.org/packages/83/89/9d0fbcef64340db0605eb0a0044f258076f3ae0a3b108983b2c614d96212/rpds_py-0.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5", size = 233235, upload-time = "2025-08-07T08:24:01.846Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b0/e177aa9f39cbab060f96de4a09df77d494f0279604dc2f509263e21b05f9/rpds_py-0.27.0-cp312-cp312-win_arm64.whl", hash = "sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9", size = 223315, upload-time = "2025-08-07T08:24:03.337Z" }, + { url = "https://files.pythonhosted.org/packages/81/d2/dfdfd42565a923b9e5a29f93501664f5b984a802967d48d49200ad71be36/rpds_py-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff", size = 362133, upload-time = "2025-08-07T08:24:04.508Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4a/0a2e2460c4b66021d349ce9f6331df1d6c75d7eea90df9785d333a49df04/rpds_py-0.27.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367", size = 347128, upload-time = "2025-08-07T08:24:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/35/8d/7d1e4390dfe09d4213b3175a3f5a817514355cb3524593380733204f20b9/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185", size = 384027, upload-time = "2025-08-07T08:24:06.841Z" }, + { url = "https://files.pythonhosted.org/packages/c1/65/78499d1a62172891c8cd45de737b2a4b84a414b6ad8315ab3ac4945a5b61/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc", size = 399973, upload-time = "2025-08-07T08:24:08.143Z" }, + { url = "https://files.pythonhosted.org/packages/10/a1/1c67c1d8cc889107b19570bb01f75cf49852068e95e6aee80d22915406fc/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe", size = 515295, upload-time = "2025-08-07T08:24:09.711Z" }, + { url = "https://files.pythonhosted.org/packages/df/27/700ec88e748436b6c7c4a2262d66e80f8c21ab585d5e98c45e02f13f21c0/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9", size = 406737, upload-time = "2025-08-07T08:24:11.182Z" }, + { url = "https://files.pythonhosted.org/packages/33/cc/6b0ee8f0ba3f2df2daac1beda17fde5cf10897a7d466f252bd184ef20162/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c", size = 385898, upload-time = "2025-08-07T08:24:12.798Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7e/c927b37d7d33c0a0ebf249cc268dc2fcec52864c1b6309ecb960497f2285/rpds_py-0.27.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295", size = 405785, upload-time = "2025-08-07T08:24:14.906Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d2/8ed50746d909dcf402af3fa58b83d5a590ed43e07251d6b08fad1a535ba6/rpds_py-0.27.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43", size = 419760, upload-time = "2025-08-07T08:24:16.129Z" }, + { url = "https://files.pythonhosted.org/packages/d3/60/2b2071aee781cb3bd49f94d5d35686990b925e9b9f3e3d149235a6f5d5c1/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432", size = 561201, upload-time = "2025-08-07T08:24:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/98/1f/27b67304272521aaea02be293fecedce13fa351a4e41cdb9290576fc6d81/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b", size = 591021, upload-time = "2025-08-07T08:24:18.999Z" }, + { url = "https://files.pythonhosted.org/packages/db/9b/a2fadf823164dd085b1f894be6443b0762a54a7af6f36e98e8fcda69ee50/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d", size = 556368, upload-time = "2025-08-07T08:24:20.54Z" }, + { url = "https://files.pythonhosted.org/packages/24/f3/6d135d46a129cda2e3e6d4c5e91e2cc26ea0428c6cf152763f3f10b6dd05/rpds_py-0.27.0-cp313-cp313-win32.whl", hash = "sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd", size = 221236, upload-time = "2025-08-07T08:24:22.144Z" }, + { url = "https://files.pythonhosted.org/packages/c5/44/65d7494f5448ecc755b545d78b188440f81da98b50ea0447ab5ebfdf9bd6/rpds_py-0.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2", size = 232634, upload-time = "2025-08-07T08:24:23.642Z" }, + { url = "https://files.pythonhosted.org/packages/70/d9/23852410fadab2abb611733933401de42a1964ce6600a3badae35fbd573e/rpds_py-0.27.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac", size = 222783, upload-time = "2025-08-07T08:24:25.098Z" }, + { url = "https://files.pythonhosted.org/packages/15/75/03447917f78512b34463f4ef11066516067099a0c466545655503bed0c77/rpds_py-0.27.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774", size = 359154, upload-time = "2025-08-07T08:24:26.249Z" }, + { url = "https://files.pythonhosted.org/packages/6b/fc/4dac4fa756451f2122ddaf136e2c6aeb758dc6fdbe9ccc4bc95c98451d50/rpds_py-0.27.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b", size = 343909, upload-time = "2025-08-07T08:24:27.405Z" }, + { url = "https://files.pythonhosted.org/packages/7b/81/723c1ed8e6f57ed9d8c0c07578747a2d3d554aaefc1ab89f4e42cfeefa07/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd", size = 379340, upload-time = "2025-08-07T08:24:28.714Z" }, + { url = "https://files.pythonhosted.org/packages/98/16/7e3740413de71818ce1997df82ba5f94bae9fff90c0a578c0e24658e6201/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb", size = 391655, upload-time = "2025-08-07T08:24:30.223Z" }, + { url = "https://files.pythonhosted.org/packages/e0/63/2a9f510e124d80660f60ecce07953f3f2d5f0b96192c1365443859b9c87f/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433", size = 513017, upload-time = "2025-08-07T08:24:31.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/4e/cf6ff311d09776c53ea1b4f2e6700b9d43bb4e99551006817ade4bbd6f78/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615", size = 402058, upload-time = "2025-08-07T08:24:32.613Z" }, + { url = "https://files.pythonhosted.org/packages/88/11/5e36096d474cb10f2a2d68b22af60a3bc4164fd8db15078769a568d9d3ac/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8", size = 383474, upload-time = "2025-08-07T08:24:33.767Z" }, + { url = "https://files.pythonhosted.org/packages/db/a2/3dff02805b06058760b5eaa6d8cb8db3eb3e46c9e452453ad5fc5b5ad9fe/rpds_py-0.27.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858", size = 400067, upload-time = "2025-08-07T08:24:35.021Z" }, + { url = "https://files.pythonhosted.org/packages/67/87/eed7369b0b265518e21ea836456a4ed4a6744c8c12422ce05bce760bb3cf/rpds_py-0.27.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5", size = 412085, upload-time = "2025-08-07T08:24:36.267Z" }, + { url = "https://files.pythonhosted.org/packages/8b/48/f50b2ab2fbb422fbb389fe296e70b7a6b5ea31b263ada5c61377e710a924/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9", size = 555928, upload-time = "2025-08-07T08:24:37.573Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/b18eb51045d06887666c3560cd4bbb6819127b43d758f5adb82b5f56f7d1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79", size = 585527, upload-time = "2025-08-07T08:24:39.391Z" }, + { url = "https://files.pythonhosted.org/packages/be/03/a3dd6470fc76499959b00ae56295b76b4bdf7c6ffc60d62006b1217567e1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c", size = 554211, upload-time = "2025-08-07T08:24:40.6Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d1/ee5fd1be395a07423ac4ca0bcc05280bf95db2b155d03adefeb47d5ebf7e/rpds_py-0.27.0-cp313-cp313t-win32.whl", hash = "sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23", size = 216624, upload-time = "2025-08-07T08:24:42.204Z" }, + { url = "https://files.pythonhosted.org/packages/1c/94/4814c4c858833bf46706f87349c37ca45e154da7dbbec9ff09f1abeb08cc/rpds_py-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1", size = 230007, upload-time = "2025-08-07T08:24:43.329Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a5/8fffe1c7dc7c055aa02df310f9fb71cfc693a4d5ccc5de2d3456ea5fb022/rpds_py-0.27.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb", size = 362595, upload-time = "2025-08-07T08:24:44.478Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c7/4e4253fd2d4bb0edbc0b0b10d9f280612ca4f0f990e3c04c599000fe7d71/rpds_py-0.27.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f", size = 347252, upload-time = "2025-08-07T08:24:45.678Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c8/3d1a954d30f0174dd6baf18b57c215da03cf7846a9d6e0143304e784cddc/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64", size = 384886, upload-time = "2025-08-07T08:24:46.86Z" }, + { url = "https://files.pythonhosted.org/packages/e0/52/3c5835f2df389832b28f9276dd5395b5a965cea34226e7c88c8fbec2093c/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015", size = 399716, upload-time = "2025-08-07T08:24:48.174Z" }, + { url = "https://files.pythonhosted.org/packages/40/73/176e46992461a1749686a2a441e24df51ff86b99c2d34bf39f2a5273b987/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0", size = 517030, upload-time = "2025-08-07T08:24:49.52Z" }, + { url = "https://files.pythonhosted.org/packages/79/2a/7266c75840e8c6e70effeb0d38922a45720904f2cd695e68a0150e5407e2/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89", size = 408448, upload-time = "2025-08-07T08:24:50.727Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5f/a7efc572b8e235093dc6cf39f4dbc8a7f08e65fdbcec7ff4daeb3585eef1/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d", size = 387320, upload-time = "2025-08-07T08:24:52.004Z" }, + { url = "https://files.pythonhosted.org/packages/a2/eb/9ff6bc92efe57cf5a2cb74dee20453ba444b6fdc85275d8c99e0d27239d1/rpds_py-0.27.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51", size = 407414, upload-time = "2025-08-07T08:24:53.664Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bd/3b9b19b00d5c6e1bd0f418c229ab0f8d3b110ddf7ec5d9d689ef783d0268/rpds_py-0.27.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c", size = 420766, upload-time = "2025-08-07T08:24:55.917Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/521a7b1079ce16258c70805166e3ac6ec4ee2139d023fe07954dc9b2d568/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4", size = 562409, upload-time = "2025-08-07T08:24:57.17Z" }, + { url = "https://files.pythonhosted.org/packages/8b/bf/65db5bfb14ccc55e39de8419a659d05a2a9cd232f0a699a516bb0991da7b/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e", size = 590793, upload-time = "2025-08-07T08:24:58.388Z" }, + { url = "https://files.pythonhosted.org/packages/db/b8/82d368b378325191ba7aae8f40f009b78057b598d4394d1f2cdabaf67b3f/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e", size = 558178, upload-time = "2025-08-07T08:24:59.756Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ff/f270bddbfbc3812500f8131b1ebbd97afd014cd554b604a3f73f03133a36/rpds_py-0.27.0-cp314-cp314-win32.whl", hash = "sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6", size = 222355, upload-time = "2025-08-07T08:25:01.027Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/fdab055b1460c02ed356a0e0b0a78c1dd32dc64e82a544f7b31c9ac643dc/rpds_py-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a", size = 234007, upload-time = "2025-08-07T08:25:02.268Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a8/694c060005421797a3be4943dab8347c76c2b429a9bef68fb2c87c9e70c7/rpds_py-0.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d", size = 223527, upload-time = "2025-08-07T08:25:03.45Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f9/77f4c90f79d2c5ca8ce6ec6a76cb4734ee247de6b3a4f337e289e1f00372/rpds_py-0.27.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828", size = 359469, upload-time = "2025-08-07T08:25:04.648Z" }, + { url = "https://files.pythonhosted.org/packages/c0/22/b97878d2f1284286fef4172069e84b0b42b546ea7d053e5fb7adb9ac6494/rpds_py-0.27.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669", size = 343960, upload-time = "2025-08-07T08:25:05.863Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b0/dfd55b5bb480eda0578ae94ef256d3061d20b19a0f5e18c482f03e65464f/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd", size = 380201, upload-time = "2025-08-07T08:25:07.513Z" }, + { url = "https://files.pythonhosted.org/packages/28/22/e1fa64e50d58ad2b2053077e3ec81a979147c43428de9e6de68ddf6aff4e/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec", size = 392111, upload-time = "2025-08-07T08:25:09.149Z" }, + { url = "https://files.pythonhosted.org/packages/49/f9/43ab7a43e97aedf6cea6af70fdcbe18abbbc41d4ae6cdec1bfc23bbad403/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303", size = 515863, upload-time = "2025-08-07T08:25:10.431Z" }, + { url = "https://files.pythonhosted.org/packages/38/9b/9bd59dcc636cd04d86a2d20ad967770bf348f5eb5922a8f29b547c074243/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b", size = 402398, upload-time = "2025-08-07T08:25:11.819Z" }, + { url = "https://files.pythonhosted.org/packages/71/bf/f099328c6c85667aba6b66fa5c35a8882db06dcd462ea214be72813a0dd2/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410", size = 384665, upload-time = "2025-08-07T08:25:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c5/9c1f03121ece6634818490bd3c8be2c82a70928a19de03467fb25a3ae2a8/rpds_py-0.27.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156", size = 400405, upload-time = "2025-08-07T08:25:14.417Z" }, + { url = "https://files.pythonhosted.org/packages/b5/b8/e25d54af3e63ac94f0c16d8fe143779fe71ff209445a0c00d0f6984b6b2c/rpds_py-0.27.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2", size = 413179, upload-time = "2025-08-07T08:25:15.664Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d1/406b3316433fe49c3021546293a04bc33f1478e3ec7950215a7fce1a1208/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1", size = 556895, upload-time = "2025-08-07T08:25:17.061Z" }, + { url = "https://files.pythonhosted.org/packages/5f/bc/3697c0c21fcb9a54d46ae3b735eb2365eea0c2be076b8f770f98e07998de/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42", size = 585464, upload-time = "2025-08-07T08:25:18.406Z" }, + { url = "https://files.pythonhosted.org/packages/63/09/ee1bb5536f99f42c839b177d552f6114aa3142d82f49cef49261ed28dbe0/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae", size = 555090, upload-time = "2025-08-07T08:25:20.461Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2c/363eada9e89f7059199d3724135a86c47082cbf72790d6ba2f336d146ddb/rpds_py-0.27.0-cp314-cp314t-win32.whl", hash = "sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5", size = 218001, upload-time = "2025-08-07T08:25:21.761Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3f/d6c216ed5199c9ef79e2a33955601f454ed1e7420a93b89670133bca5ace/rpds_py-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391", size = 230993, upload-time = "2025-08-07T08:25:23.34Z" }, { url = "https://files.pythonhosted.org/packages/a3/2e/82fee0cb7142bc32a9ce586eadd24a945257c016902d575bb377ad5feb10/rpds_py-0.27.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e", size = 371495, upload-time = "2025-08-07T08:25:24.577Z" }, { url = "https://files.pythonhosted.org/packages/f9/b5/b421756c7e5cc1d2bb438a34b16f750363d0d87caf2bfa6f2326423c42e5/rpds_py-0.27.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451", size = 354823, upload-time = "2025-08-07T08:25:25.854Z" }, { url = "https://files.pythonhosted.org/packages/f9/4a/63337bbabfa38d4094144d0e689758e8452372fd3e45359b806fc1b4c022/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112", size = 381538, upload-time = "2025-08-07T08:25:27.17Z" }, @@ -2713,6 +3762,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/95/deb1111abde461330c4dad22b14347d064161fb7cb249746a06accc07633/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83", size = 554493, upload-time = "2025-08-07T08:25:39.665Z" }, { url = "https://files.pythonhosted.org/packages/cb/16/5342d91917f26da91fc193932d9fbf422e2903aaee9bd3c6ecb4875ef17f/rpds_py-0.27.0-cp39-cp39-win32.whl", hash = "sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86", size = 218302, upload-time = "2025-08-07T08:25:41.401Z" }, { url = "https://files.pythonhosted.org/packages/fb/a3/0346108a47efe41b50d8781688b7fb16b18d252053486c932d10b18977c9/rpds_py-0.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6", size = 229977, upload-time = "2025-08-07T08:25:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/47/55/287068956f9ba1cb40896d291213f09fdd4527630709058b45a592bc09dc/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8", size = 371566, upload-time = "2025-08-07T08:25:43.95Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/443af59cbe552e89680bb0f1d1ba47f6387b92083e28a45b8c8863b86c5a/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe", size = 355781, upload-time = "2025-08-07T08:25:45.256Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f0/35f48bb073b5ca42b1dcc55cb148f4a3bd4411a3e584f6a18d26f0ea8832/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1", size = 382575, upload-time = "2025-08-07T08:25:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/51/e1/5f5296a21d1189f0f116a938af2e346d83172bf814d373695e54004a936f/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e39169ac6aae06dd79c07c8a69d9da867cef6a6d7883a0186b46bb46ccfb0c3", size = 397435, upload-time = "2025-08-07T08:25:48.204Z" }, + { url = "https://files.pythonhosted.org/packages/97/79/3af99b7852b2b55cad8a08863725cbe9dc14781bcf7dc6ecead0c3e1dc54/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:935afcdea4751b0ac918047a2df3f720212892347767aea28f5b3bf7be4f27c0", size = 514861, upload-time = "2025-08-07T08:25:49.814Z" }, + { url = "https://files.pythonhosted.org/packages/df/3e/11fd6033708ed3ae0e6947bb94f762f56bb46bf59a1b16eef6944e8a62ee/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8de567dec6d451649a781633d36f5c7501711adee329d76c095be2178855b042", size = 402776, upload-time = "2025-08-07T08:25:51.135Z" }, + { url = "https://files.pythonhosted.org/packages/b7/89/f9375ceaa996116de9cbc949874804c7874d42fb258c384c037a46d730b8/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:555ed147cbe8c8f76e72a4c6cd3b7b761cbf9987891b9448808148204aed74a5", size = 384665, upload-time = "2025-08-07T08:25:52.82Z" }, + { url = "https://files.pythonhosted.org/packages/48/bf/0061e55c6f1f573a63c0f82306b8984ed3b394adafc66854a936d5db3522/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:d2cc2b34f9e1d31ce255174da82902ad75bd7c0d88a33df54a77a22f2ef421ee", size = 402518, upload-time = "2025-08-07T08:25:54.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/dc/8d506676bfe87b3b683332ec8e6ab2b0be118a3d3595ed021e3274a63191/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb0702c12983be3b2fab98ead349ac63a98216d28dda6f518f52da5498a27a1b", size = 416247, upload-time = "2025-08-07T08:25:55.433Z" }, + { url = "https://files.pythonhosted.org/packages/2e/02/9a89eea1b75c69e81632de7963076e455b1e00e1cfb46dfdabb055fa03e3/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ba783541be46f27c8faea5a6645e193943c17ea2f0ffe593639d906a327a9bcc", size = 559456, upload-time = "2025-08-07T08:25:56.866Z" }, + { url = "https://files.pythonhosted.org/packages/38/4a/0f3ac4351957847c0d322be6ec72f916e43804a2c1d04e9672ea4a67c315/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:2406d034635d1497c596c40c85f86ecf2bf9611c1df73d14078af8444fe48031", size = 587778, upload-time = "2025-08-07T08:25:58.202Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8e/39d0d7401095bed5a5ad5ef304fae96383f9bef40ca3f3a0807ff5b68d9d/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dea0808153f1fbbad772669d906cddd92100277533a03845de6893cadeffc8be", size = 555247, upload-time = "2025-08-07T08:25:59.707Z" }, + { url = "https://files.pythonhosted.org/packages/e0/04/6b8311e811e620b9eaca67cd80a118ff9159558a719201052a7b2abb88bf/rpds_py-0.27.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2a81bdcfde4245468f7030a75a37d50400ac2455c3a4819d9d550c937f90ab5", size = 230256, upload-time = "2025-08-07T08:26:01.07Z" }, + { url = "https://files.pythonhosted.org/packages/59/64/72ab5b911fdcc48058359b0e786e5363e3fde885156116026f1a2ba9a5b5/rpds_py-0.27.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e6491658dd2569f05860bad645569145c8626ac231877b0fb2d5f9bcb7054089", size = 371658, upload-time = "2025-08-07T08:26:02.369Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4b/90ff04b4da055db53d8fea57640d8d5d55456343a1ec9a866c0ecfe10fd1/rpds_py-0.27.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec77545d188f8bdd29d42bccb9191682a46fb2e655e3d1fb446d47c55ac3b8d", size = 355529, upload-time = "2025-08-07T08:26:03.83Z" }, + { url = "https://files.pythonhosted.org/packages/a4/be/527491fb1afcd86fc5ce5812eb37bc70428ee017d77fee20de18155c3937/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a4aebf8ca02bbb90a9b3e7a463bbf3bee02ab1c446840ca07b1695a68ce424", size = 382822, upload-time = "2025-08-07T08:26:05.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a5/dcdb8725ce11e6d0913e6fcf782a13f4b8a517e8acc70946031830b98441/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44524b96481a4c9b8e6c46d6afe43fa1fb485c261e359fbe32b63ff60e3884d8", size = 397233, upload-time = "2025-08-07T08:26:07.179Z" }, + { url = "https://files.pythonhosted.org/packages/33/f9/0947920d1927e9f144660590cc38cadb0795d78fe0d9aae0ef71c1513b7c/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45d04a73c54b6a5fd2bab91a4b5bc8b426949586e61340e212a8484919183859", size = 514892, upload-time = "2025-08-07T08:26:08.622Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ed/d1343398c1417c68f8daa1afce56ef6ce5cc587daaf98e29347b00a80ff2/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:343cf24de9ed6c728abefc5d5c851d5de06497caa7ac37e5e65dd572921ed1b5", size = 402733, upload-time = "2025-08-07T08:26:10.433Z" }, + { url = "https://files.pythonhosted.org/packages/1d/0b/646f55442cd14014fb64d143428f25667a100f82092c90087b9ea7101c74/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aed8118ae20515974650d08eb724150dc2e20c2814bcc307089569995e88a14", size = 384447, upload-time = "2025-08-07T08:26:11.847Z" }, + { url = "https://files.pythonhosted.org/packages/4b/15/0596ef7529828e33a6c81ecf5013d1dd33a511a3e0be0561f83079cda227/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:af9d4fd79ee1cc8e7caf693ee02737daabfc0fcf2773ca0a4735b356c8ad6f7c", size = 402502, upload-time = "2025-08-07T08:26:13.537Z" }, + { url = "https://files.pythonhosted.org/packages/c3/8d/986af3c42f8454a6cafff8729d99fb178ae9b08a9816325ac7a8fa57c0c0/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f0396e894bd1e66c74ecbc08b4f6a03dc331140942c4b1d345dd131b68574a60", size = 416651, upload-time = "2025-08-07T08:26:14.923Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9a/b4ec3629b7b447e896eec574469159b5b60b7781d3711c914748bf32de05/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:59714ab0a5af25d723d8e9816638faf7f4254234decb7d212715c1aa71eee7be", size = 559460, upload-time = "2025-08-07T08:26:16.295Z" }, + { url = "https://files.pythonhosted.org/packages/61/63/d1e127b40c3e4733b3a6f26ae7a063cdf2bc1caa5272c89075425c7d397a/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:88051c3b7d5325409f433c5a40328fcb0685fc04e5db49ff936e910901d10114", size = 588072, upload-time = "2025-08-07T08:26:17.776Z" }, + { url = "https://files.pythonhosted.org/packages/04/7e/8ffc71a8f6833d9c9fb999f5b0ee736b8b159fd66968e05c7afc2dbcd57e/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:181bc29e59e5e5e6e9d63b143ff4d5191224d355e246b5a48c88ce6b35c4e466", size = 555083, upload-time = "2025-08-07T08:26:19.301Z" }, { url = "https://files.pythonhosted.org/packages/a8/fc/ef6386838e0e91d6ba79b741ccce6ca987e89619aa86f418fecf381eba23/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b", size = 371849, upload-time = "2025-08-07T08:26:20.597Z" }, { url = "https://files.pythonhosted.org/packages/2c/f8/f30394aff811bc0f13fab8d8e4b9f880fcb678234eb0af7d2c4b6232f44f/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d", size = 356437, upload-time = "2025-08-07T08:26:21.899Z" }, { url = "https://files.pythonhosted.org/packages/87/56/ed704fc668c9abc56d3686b723e4d6f2585597daf4b68b654ade7c97930d/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49", size = 382247, upload-time = "2025-08-07T08:26:23.712Z" }, @@ -2733,7 +3807,7 @@ name = "ruamel-yaml" version = "0.18.15" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" }, + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.10' and platform_python_implementation == 'CPython'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload-time = "2025-08-19T11:15:10.694Z" } wheels = [ @@ -2746,6 +3820,38 @@ version = "0.2.12" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload-time = "2024-10-20T10:10:56.22Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/98/a8/29a3eb437b12b95f50a6bcc3d7d7214301c6c529d8fdc227247fa84162b5/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969", size = 633728, upload-time = "2024-10-20T10:12:37.858Z" }, + { url = "https://files.pythonhosted.org/packages/35/6d/ae05a87a3ad540259c3ad88d71275cbd1c0f2d30ae04c65dcbfb6dcd4b9f/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df", size = 722230, upload-time = "2024-10-20T10:12:39.457Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b7/20c6f3c0b656fe609675d69bc135c03aac9e3865912444be6339207b6648/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76", size = 686712, upload-time = "2024-10-20T10:12:41.119Z" }, + { url = "https://files.pythonhosted.org/packages/cd/11/d12dbf683471f888d354dac59593873c2b45feb193c5e3e0f2ebf85e68b9/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6", size = 663936, upload-time = "2024-10-21T11:26:37.419Z" }, + { url = "https://files.pythonhosted.org/packages/72/14/4c268f5077db5c83f743ee1daeb236269fa8577133a5cfa49f8b382baf13/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd", size = 696580, upload-time = "2024-10-21T11:26:39.503Z" }, + { url = "https://files.pythonhosted.org/packages/30/fc/8cd12f189c6405a4c1cf37bd633aa740a9538c8e40497c231072d0fef5cf/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a", size = 663393, upload-time = "2024-12-11T19:58:13.873Z" }, + { url = "https://files.pythonhosted.org/packages/80/29/c0a017b704aaf3cbf704989785cd9c5d5b8ccec2dae6ac0c53833c84e677/ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da", size = 100326, upload-time = "2024-10-20T10:12:42.967Z" }, + { url = "https://files.pythonhosted.org/packages/3a/65/fa39d74db4e2d0cd252355732d966a460a41cd01c6353b820a0952432839/ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28", size = 118079, upload-time = "2024-10-20T10:12:44.117Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d2/b79b7d695e2f21da020bd44c782490578f300dd44f0a4c57a92575758a76/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e", size = 641480, upload-time = "2024-10-20T10:12:46.758Z" }, + { url = "https://files.pythonhosted.org/packages/68/6e/264c50ce2a31473a9fdbf4fa66ca9b2b17c7455b31ef585462343818bd6c/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e", size = 739068, upload-time = "2024-10-20T10:12:48.605Z" }, + { url = "https://files.pythonhosted.org/packages/86/29/88c2567bc893c84d88b4c48027367c3562ae69121d568e8a3f3a8d363f4d/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52", size = 703012, upload-time = "2024-10-20T10:12:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/11/46/879763c619b5470820f0cd6ca97d134771e502776bc2b844d2adb6e37753/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642", size = 704352, upload-time = "2024-10-21T11:26:41.438Z" }, + { url = "https://files.pythonhosted.org/packages/02/80/ece7e6034256a4186bbe50dee28cd032d816974941a6abf6a9d65e4228a7/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2", size = 737344, upload-time = "2024-10-21T11:26:43.62Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ca/e4106ac7e80efbabdf4bf91d3d32fc424e41418458251712f5672eada9ce/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3", size = 714498, upload-time = "2024-12-11T19:58:15.592Z" }, + { url = "https://files.pythonhosted.org/packages/67/58/b1f60a1d591b771298ffa0428237afb092c7f29ae23bad93420b1eb10703/ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4", size = 100205, upload-time = "2024-10-20T10:12:52.865Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4f/b52f634c9548a9291a70dfce26ca7ebce388235c93588a1068028ea23fcc/ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb", size = 118185, upload-time = "2024-10-20T10:12:54.652Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload-time = "2024-10-20T10:12:57.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload-time = "2024-10-20T10:12:58.501Z" }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload-time = "2024-10-20T10:13:00.211Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload-time = "2024-10-21T11:26:46.038Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload-time = "2024-10-21T11:26:47.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload-time = "2024-12-11T19:58:17.252Z" }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload-time = "2024-10-20T10:13:01.395Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload-time = "2024-10-20T10:13:02.768Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload-time = "2024-10-20T10:13:05.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload-time = "2024-10-20T10:13:07.26Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload-time = "2024-10-20T10:13:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload-time = "2024-10-21T11:26:48.866Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload-time = "2024-10-21T11:26:50.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload-time = "2024-12-11T19:58:18.846Z" }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload-time = "2024-10-20T10:13:09.658Z" }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload-time = "2024-10-20T10:13:10.66Z" }, { url = "https://files.pythonhosted.org/packages/29/09/932360f30ad1b7b79f08757e0a6fb8c5392a52cdcc182779158fe66d25ac/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45", size = 636120, upload-time = "2024-10-20T10:13:12.84Z" }, { url = "https://files.pythonhosted.org/packages/a2/2a/5b27602e7a4344c1334e26bf4739746206b7a60a8acdba33a61473468b73/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519", size = 724914, upload-time = "2024-10-20T10:13:14.605Z" }, { url = "https://files.pythonhosted.org/packages/da/1c/23497017c554fc06ff5701b29355522cff850f626337fff35d9ab352cb18/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7", size = 689072, upload-time = "2024-10-20T10:13:15.939Z" }, @@ -2796,13 +3902,27 @@ name = "scikit-learn" version = "1.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, + { name = "joblib", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "threadpoolctl", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/70/95/d5cb2297a835b0f5fc9a77042b0a2d029866379091ab8b3f52cc62277808/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5", size = 12643991, upload-time = "2025-01-10T08:06:04.813Z" }, + { url = "https://files.pythonhosted.org/packages/b7/91/ab3c697188f224d658969f678be86b0968ccc52774c8ab4a86a07be13c25/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b", size = 13497182, upload-time = "2025-01-10T08:06:08.42Z" }, + { url = "https://files.pythonhosted.org/packages/17/04/d5d556b6c88886c092cc989433b2bab62488e0f0dafe616a1d5c9cb0efb1/scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002", size = 11125517, upload-time = "2025-01-10T08:06:12.783Z" }, + { url = "https://files.pythonhosted.org/packages/30/cd/ed4399485ef364bb25f388ab438e3724e60dc218c547a407b6e90ccccaef/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2", size = 12592155, upload-time = "2025-01-10T08:06:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069, upload-time = "2025-01-10T08:06:32.515Z" }, + { url = "https://files.pythonhosted.org/packages/a1/a6/c5b78606743a1f28eae8f11973de6613a5ee87366796583fb74c67d54939/scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415", size = 11139809, upload-time = "2025-01-10T08:06:35.514Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f6/ff7beaeb644bcad72bcfd5a03ff36d32ee4e53a8b29a639f11bcb65d06cd/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f", size = 12253728, upload-time = "2025-01-10T08:06:47.618Z" }, + { url = "https://files.pythonhosted.org/packages/29/7a/8bce8968883e9465de20be15542f4c7e221952441727c4dad24d534c6d99/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86", size = 13147700, upload-time = "2025-01-10T08:06:50.888Z" }, + { url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52", size = 11110613, upload-time = "2025-01-10T08:06:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e4/4195d52cf4f113573fb8ebc44ed5a81bd511a92c0228889125fac2f4c3d1/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348", size = 12209004, upload-time = "2025-01-10T08:07:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/94/be/47e16cdd1e7fcf97d95b3cb08bde1abb13e627861af427a3651fcb80b517/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97", size = 13171776, upload-time = "2025-01-10T08:07:11.715Z" }, + { url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb", size = 11071865, upload-time = "2025-01-10T08:07:16.088Z" }, + { url = "https://files.pythonhosted.org/packages/3f/58/55856da1adec655bdce77b502e94a267bf40a8c0b89f8622837f89503b5a/scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691", size = 12433852, upload-time = "2025-01-10T08:07:26.817Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/c83853af13901a574f8f13b645467285a48940f185b690936bb700a50863/scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f", size = 11337256, upload-time = "2025-01-10T08:07:31.084Z" }, { url = "https://files.pythonhosted.org/packages/fd/dc/d5457e03dc9c971ce2b0d750e33148dd060fefb8b7dc71acd6054e4bb51b/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107", size = 12693173, upload-time = "2025-01-10T08:07:42.713Z" }, { url = "https://files.pythonhosted.org/packages/79/35/b1d2188967c3204c78fa79c9263668cf1b98060e8e58d1a730fe5b2317bb/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422", size = 13518605, upload-time = "2025-01-10T08:07:46.551Z" }, { url = "https://files.pythonhosted.org/packages/fb/d8/8d603bdd26601f4b07e2363032b8565ab82eb857f93d86d0f7956fcf4523/scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b", size = 11155078, upload-time = "2025-01-10T08:07:51.376Z" }, @@ -2812,11 +3932,32 @@ wheels = [ name = "scipy" version = "1.13.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10'", +] dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720, upload-time = "2024-05-23T03:29:26.079Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076, upload-time = "2024-05-23T03:19:01.687Z" }, + { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232, upload-time = "2024-05-23T03:19:09.089Z" }, + { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202, upload-time = "2024-05-23T03:19:15.138Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335, upload-time = "2024-05-23T03:19:21.984Z" }, + { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728, upload-time = "2024-05-23T03:19:28.225Z" }, + { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588, upload-time = "2024-05-23T03:19:35.661Z" }, + { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805, upload-time = "2024-05-23T03:19:43.081Z" }, + { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687, upload-time = "2024-05-23T03:19:48.799Z" }, + { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638, upload-time = "2024-05-23T03:19:55.104Z" }, + { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931, upload-time = "2024-05-23T03:20:01.82Z" }, + { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145, upload-time = "2024-05-23T03:20:09.173Z" }, + { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227, upload-time = "2024-05-23T03:20:16.433Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301, upload-time = "2024-05-23T03:20:23.538Z" }, + { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348, upload-time = "2024-05-23T03:20:29.885Z" }, + { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062, upload-time = "2024-05-23T03:20:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311, upload-time = "2024-05-23T03:20:42.086Z" }, + { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493, upload-time = "2024-05-23T03:20:48.292Z" }, + { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955, upload-time = "2024-05-23T03:20:55.091Z" }, { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927, upload-time = "2024-05-23T03:21:01.95Z" }, { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538, upload-time = "2024-05-23T03:21:07.634Z" }, { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190, upload-time = "2024-05-23T03:21:14.41Z" }, @@ -2825,6 +3966,192 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440, upload-time = "2024-05-23T03:21:35.888Z" }, ] +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "numpy", marker = "python_full_version == '3.10.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, +] + +[[package]] +name = "scipy" +version = "1.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 = "numpy", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/4a/b927028464795439faec8eaf0b03b011005c487bb2d07409f28bf30879c4/scipy-1.16.1.tar.gz", hash = "sha256:44c76f9e8b6e8e488a586190ab38016e4ed2f8a038af7cd3defa903c0a2238b3", size = 30580861, upload-time = "2025-07-27T16:33:30.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/91/812adc6f74409b461e3a5fa97f4f74c769016919203138a3bf6fc24ba4c5/scipy-1.16.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c033fa32bab91dc98ca59d0cf23bb876454e2bb02cbe592d5023138778f70030", size = 36552519, upload-time = "2025-07-27T16:26:29.658Z" }, + { url = "https://files.pythonhosted.org/packages/47/18/8e355edcf3b71418d9e9f9acd2708cc3a6c27e8f98fde0ac34b8a0b45407/scipy-1.16.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:6e5c2f74e5df33479b5cd4e97a9104c511518fbd979aa9b8f6aec18b2e9ecae7", size = 28638010, upload-time = "2025-07-27T16:26:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/d9/eb/e931853058607bdfbc11b86df19ae7a08686121c203483f62f1ecae5989c/scipy-1.16.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0a55ffe0ba0f59666e90951971a884d1ff6f4ec3275a48f472cfb64175570f77", size = 20909790, upload-time = "2025-07-27T16:26:43.93Z" }, + { url = "https://files.pythonhosted.org/packages/45/0c/be83a271d6e96750cd0be2e000f35ff18880a46f05ce8b5d3465dc0f7a2a/scipy-1.16.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f8a5d6cd147acecc2603fbd382fed6c46f474cccfcf69ea32582e033fb54dcfe", size = 23513352, upload-time = "2025-07-27T16:26:50.017Z" }, + { url = "https://files.pythonhosted.org/packages/7c/bf/fe6eb47e74f762f933cca962db7f2c7183acfdc4483bd1c3813cfe83e538/scipy-1.16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb18899127278058bcc09e7b9966d41a5a43740b5bb8dcba401bd983f82e885b", size = 33534643, upload-time = "2025-07-27T16:26:57.503Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ba/63f402e74875486b87ec6506a4f93f6d8a0d94d10467280f3d9d7837ce3a/scipy-1.16.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adccd93a2fa937a27aae826d33e3bfa5edf9aa672376a4852d23a7cd67a2e5b7", size = 35376776, upload-time = "2025-07-27T16:27:06.639Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b4/04eb9d39ec26a1b939689102da23d505ea16cdae3dbb18ffc53d1f831044/scipy-1.16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:18aca1646a29ee9a0625a1be5637fa798d4d81fdf426481f06d69af828f16958", size = 35698906, upload-time = "2025-07-27T16:27:14.943Z" }, + { url = "https://files.pythonhosted.org/packages/04/d6/bb5468da53321baeb001f6e4e0d9049eadd175a4a497709939128556e3ec/scipy-1.16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d85495cef541729a70cdddbbf3e6b903421bc1af3e8e3a9a72a06751f33b7c39", size = 38129275, upload-time = "2025-07-27T16:27:23.873Z" }, + { url = "https://files.pythonhosted.org/packages/c4/94/994369978509f227cba7dfb9e623254d0d5559506fe994aef4bea3ed469c/scipy-1.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:226652fca853008119c03a8ce71ffe1b3f6d2844cc1686e8f9806edafae68596", size = 38644572, upload-time = "2025-07-27T16:27:32.637Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d9/ec4864f5896232133f51382b54a08de91a9d1af7a76dfa372894026dfee2/scipy-1.16.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81b433bbeaf35728dad619afc002db9b189e45eebe2cd676effe1fb93fef2b9c", size = 36575194, upload-time = "2025-07-27T16:27:41.321Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6d/40e81ecfb688e9d25d34a847dca361982a6addf8e31f0957b1a54fbfa994/scipy-1.16.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:886cc81fdb4c6903a3bb0464047c25a6d1016fef77bb97949817d0c0d79f9e04", size = 28594590, upload-time = "2025-07-27T16:27:49.204Z" }, + { url = "https://files.pythonhosted.org/packages/0e/37/9f65178edfcc629377ce9a64fc09baebea18c80a9e57ae09a52edf84880b/scipy-1.16.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:15240c3aac087a522b4eaedb09f0ad061753c5eebf1ea430859e5bf8640d5919", size = 20866458, upload-time = "2025-07-27T16:27:54.98Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7b/749a66766871ea4cb1d1ea10f27004db63023074c22abed51f22f09770e0/scipy-1.16.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f81a25805f3659b48126b5053d9e823d3215e4a63730b5e1671852a1705921", size = 23539318, upload-time = "2025-07-27T16:28:01.604Z" }, + { url = "https://files.pythonhosted.org/packages/c4/db/8d4afec60eb833a666434d4541a3151eedbf2494ea6d4d468cbe877f00cd/scipy-1.16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6c62eea7f607f122069b9bad3f99489ddca1a5173bef8a0c75555d7488b6f725", size = 33292899, upload-time = "2025-07-27T16:28:09.147Z" }, + { url = "https://files.pythonhosted.org/packages/51/1e/79023ca3bbb13a015d7d2757ecca3b81293c663694c35d6541b4dca53e98/scipy-1.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f965bbf3235b01c776115ab18f092a95aa74c271a52577bcb0563e85738fd618", size = 35162637, upload-time = "2025-07-27T16:28:17.535Z" }, + { url = "https://files.pythonhosted.org/packages/b6/49/0648665f9c29fdaca4c679182eb972935b3b4f5ace41d323c32352f29816/scipy-1.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f006e323874ffd0b0b816d8c6a8e7f9a73d55ab3b8c3f72b752b226d0e3ac83d", size = 35490507, upload-time = "2025-07-27T16:28:25.705Z" }, + { url = "https://files.pythonhosted.org/packages/62/8f/66cbb9d6bbb18d8c658f774904f42a92078707a7c71e5347e8bf2f52bb89/scipy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8fd15fc5085ab4cca74cb91fe0a4263b1f32e4420761ddae531ad60934c2119", size = 37923998, upload-time = "2025-07-27T16:28:34.339Z" }, + { url = "https://files.pythonhosted.org/packages/14/c3/61f273ae550fbf1667675701112e380881905e28448c080b23b5a181df7c/scipy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7b8013c6c066609577d910d1a2a077021727af07b6fab0ee22c2f901f22352a", size = 38508060, upload-time = "2025-07-27T16:28:43.242Z" }, + { url = "https://files.pythonhosted.org/packages/93/0b/b5c99382b839854a71ca9482c684e3472badc62620287cbbdab499b75ce6/scipy-1.16.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5451606823a5e73dfa621a89948096c6528e2896e40b39248295d3a0138d594f", size = 36533717, upload-time = "2025-07-27T16:28:51.706Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e5/69ab2771062c91e23e07c12e7d5033a6b9b80b0903ee709c3c36b3eb520c/scipy-1.16.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:89728678c5ca5abd610aee148c199ac1afb16e19844401ca97d43dc548a354eb", size = 28570009, upload-time = "2025-07-27T16:28:57.017Z" }, + { url = "https://files.pythonhosted.org/packages/f4/69/bd75dbfdd3cf524f4d753484d723594aed62cfaac510123e91a6686d520b/scipy-1.16.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e756d688cb03fd07de0fffad475649b03cb89bee696c98ce508b17c11a03f95c", size = 20841942, upload-time = "2025-07-27T16:29:01.152Z" }, + { url = "https://files.pythonhosted.org/packages/ea/74/add181c87663f178ba7d6144b370243a87af8476664d5435e57d599e6874/scipy-1.16.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5aa2687b9935da3ed89c5dbed5234576589dd28d0bf7cd237501ccfbdf1ad608", size = 23498507, upload-time = "2025-07-27T16:29:05.202Z" }, + { url = "https://files.pythonhosted.org/packages/1d/74/ece2e582a0d9550cee33e2e416cc96737dce423a994d12bbe59716f47ff1/scipy-1.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0851f6a1e537fe9399f35986897e395a1aa61c574b178c0d456be5b1a0f5ca1f", size = 33286040, upload-time = "2025-07-27T16:29:10.201Z" }, + { url = "https://files.pythonhosted.org/packages/e4/82/08e4076df538fb56caa1d489588d880ec7c52d8273a606bb54d660528f7c/scipy-1.16.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fedc2cbd1baed37474b1924c331b97bdff611d762c196fac1a9b71e67b813b1b", size = 35176096, upload-time = "2025-07-27T16:29:17.091Z" }, + { url = "https://files.pythonhosted.org/packages/fa/79/cd710aab8c921375711a8321c6be696e705a120e3011a643efbbcdeeabcc/scipy-1.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2ef500e72f9623a6735769e4b93e9dcb158d40752cdbb077f305487e3e2d1f45", size = 35490328, upload-time = "2025-07-27T16:29:22.928Z" }, + { url = "https://files.pythonhosted.org/packages/71/73/e9cc3d35ee4526d784520d4494a3e1ca969b071fb5ae5910c036a375ceec/scipy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:978d8311674b05a8f7ff2ea6c6bce5d8b45a0cb09d4c5793e0318f448613ea65", size = 37939921, upload-time = "2025-07-27T16:29:29.108Z" }, + { url = "https://files.pythonhosted.org/packages/21/12/c0efd2941f01940119b5305c375ae5c0fcb7ec193f806bd8f158b73a1782/scipy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:81929ed0fa7a5713fcdd8b2e6f73697d3b4c4816d090dd34ff937c20fa90e8ab", size = 38479462, upload-time = "2025-07-27T16:30:24.078Z" }, + { url = "https://files.pythonhosted.org/packages/7a/19/c3d08b675260046a991040e1ea5d65f91f40c7df1045fffff412dcfc6765/scipy-1.16.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:bcc12db731858abda693cecdb3bdc9e6d4bd200213f49d224fe22df82687bdd6", size = 36938832, upload-time = "2025-07-27T16:29:35.057Z" }, + { url = "https://files.pythonhosted.org/packages/81/f2/ce53db652c033a414a5b34598dba6b95f3d38153a2417c5a3883da429029/scipy-1.16.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:744d977daa4becb9fc59135e75c069f8d301a87d64f88f1e602a9ecf51e77b27", size = 29093084, upload-time = "2025-07-27T16:29:40.201Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ae/7a10ff04a7dc15f9057d05b33737ade244e4bd195caa3f7cc04d77b9e214/scipy-1.16.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:dc54f76ac18073bcecffb98d93f03ed6b81a92ef91b5d3b135dcc81d55a724c7", size = 21365098, upload-time = "2025-07-27T16:29:44.295Z" }, + { url = "https://files.pythonhosted.org/packages/36/ac/029ff710959932ad3c2a98721b20b405f05f752f07344622fd61a47c5197/scipy-1.16.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:367d567ee9fc1e9e2047d31f39d9d6a7a04e0710c86e701e053f237d14a9b4f6", size = 23896858, upload-time = "2025-07-27T16:29:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/71/13/d1ef77b6bd7898720e1f0b6b3743cb945f6c3cafa7718eaac8841035ab60/scipy-1.16.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf5785e44e19dcd32a0e4807555e1e9a9b8d475c6afff3d21c3c543a6aa84f4", size = 33438311, upload-time = "2025-07-27T16:29:54.164Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e0/e64a6821ffbb00b4c5b05169f1c1fddb4800e9307efe3db3788995a82a2c/scipy-1.16.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3d0b80fb26d3e13a794c71d4b837e2a589d839fd574a6bbb4ee1288c213ad4a3", size = 35279542, upload-time = "2025-07-27T16:30:00.249Z" }, + { url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload-time = "2025-07-27T16:30:05.916Z" }, + { url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload-time = "2025-07-27T16:30:11.655Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload-time = "2025-07-27T16:30:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload-time = "2025-07-27T16:30:30.081Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload-time = "2025-07-27T16:30:35.336Z" }, + { url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload-time = "2025-07-27T16:30:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload-time = "2025-07-27T16:30:43.663Z" }, + { url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload-time = "2025-07-27T16:30:48.982Z" }, + { url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload-time = "2025-07-27T16:30:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload-time = "2025-07-27T16:30:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload-time = "2025-07-27T16:31:06.151Z" }, + { url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload-time = "2025-07-27T16:31:59.942Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload-time = "2025-07-27T16:31:11.865Z" }, + { url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload-time = "2025-07-27T16:31:17.045Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload-time = "2025-07-27T16:31:21.188Z" }, + { url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload-time = "2025-07-27T16:31:25.408Z" }, + { url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload-time = "2025-07-27T16:31:30.62Z" }, + { url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload-time = "2025-07-27T16:31:36.112Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload-time = "2025-07-27T16:31:42.025Z" }, + { url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload-time = "2025-07-27T16:31:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload-time = "2025-07-27T16:31:53.96Z" }, +] + +[[package]] +name = "selectolax" +version = "0.3.29" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/b9/b5a23e29d5e54c590eaad18bdbb1ced13b869b111e03d12ee0ae9eecf9b8/selectolax-0.3.29.tar.gz", hash = "sha256:28696fa4581765c705e15d05dfba464334f5f9bcb3eac9f25045f815aec6fbc1", size = 4691626, upload-time = "2025-04-30T15:17:37.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/8f/bf3d58ecc0e187806299324e2ad77646e837ff20400880f6fc0cbd14fb66/selectolax-0.3.29-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:85aeae54f055cf5451828a21fbfecac99b8b5c27ec29fd10725b631593a7c9a3", size = 3643657, upload-time = "2025-04-30T15:15:40.734Z" }, + { url = "https://files.pythonhosted.org/packages/de/b0/6d90a4d0eacb8253d88a9fcbcb8758b667900f45dcdb4a11c5fbd0d31599/selectolax-0.3.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ff48efe4364c8148a553a4105773a0accee9cc25e0f2a40ddac44d18a5a3000", size = 2089380, upload-time = "2025-04-30T15:15:42.928Z" }, + { url = "https://files.pythonhosted.org/packages/f4/21/394b51998ef99f13f98da063fc71b8edf7191bb30aca06bcbc8a55d5a9ad/selectolax-0.3.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25cfccfefc41361ab8a07f15a224524a4a8b77dfa7d253b34bbd397e45856734", size = 5505065, upload-time = "2025-04-30T15:15:44.986Z" }, + { url = "https://files.pythonhosted.org/packages/dd/57/e38775b672f910e80742cbf7c3def5c670c1b6f9b05e8587b2fa8dc044c3/selectolax-0.3.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5c3523ad5199a4fb9b95b6e24ff9222d3605023ca394b23f7dd910e7536daf", size = 5529205, upload-time = "2025-04-30T15:15:47.149Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0f/f6e3030107b486b6a4870f8471a675d435c4c34b8f9de3374652ed53004b/selectolax-0.3.29-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfb803d6bbe0ef3c8847cf5a01167cc428c0d9179946e1c994cc6178b5332d1a", size = 5146713, upload-time = "2025-04-30T15:15:49.332Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8d/b4fd119c216e8615ca6747f8f336643572178241921f33f5ffa4b074dc44/selectolax-0.3.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:db734ba4ef44fa3b57ad9374fd7ccfc7815c0ae5cfcbd5ee25fe8587092618d1", size = 5416352, upload-time = "2025-04-30T15:15:50.909Z" }, + { url = "https://files.pythonhosted.org/packages/d7/e7/94e694d14ae44bddc0d9b144647d5adbec0210d8e2c57d72ad9a133d9469/selectolax-0.3.29-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2bfe4327215a20af4197c5b7e3729a9552fb324bb57250dc7e7abfa0f848a463", size = 5140689, upload-time = "2025-04-30T15:15:52.477Z" }, + { url = "https://files.pythonhosted.org/packages/90/62/79ba965daa1f12e5477b2ec08b289f8289dfc705928b08923d9c4b60c867/selectolax-0.3.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a98c3f3d8fffb175456cb06096bc78103ddf6a209bea6392e0e4ea4e25aca71", size = 5481428, upload-time = "2025-04-30T15:15:54.371Z" }, + { url = "https://files.pythonhosted.org/packages/82/3c/46c1f0b739add89d0ef720ad521afaaf31b07a39f781ef9e59c7b5ecef44/selectolax-0.3.29-cp310-cp310-win32.whl", hash = "sha256:394d356ea611a7853c13c910a57c1a80a8356f9c920aa8168b3f8aaa62e433d8", size = 1702100, upload-time = "2025-04-30T15:15:55.833Z" }, + { url = "https://files.pythonhosted.org/packages/75/62/03350ed454fe26aef5580df498d45ace9f26ca6af1640ae681a6af1f5cdf/selectolax-0.3.29-cp310-cp310-win_amd64.whl", hash = "sha256:edd2760699c60dde7d847aebd81f02035f7bddcd0ad3db8e73326dfc84a2dc8f", size = 1807811, upload-time = "2025-04-30T15:15:57.243Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5d/ca72f7adddae4b2b128394a7559739a6a12c156d29b55968cfcfe07fac4d/selectolax-0.3.29-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d6a1cd0518fa7656ea1683c4b2d3b5a98306753f364da9f673517847e1680a3e", size = 3649215, upload-time = "2025-04-30T15:15:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/08/c6/ca984f90b12fb10790cc56c2670f1b5f09884ed2f2012a219094b38cbcb4/selectolax-0.3.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e5354d805dd76b4b38002f58e6ae2e7b429ac311bf3601992a6662d2bc86911", size = 2091848, upload-time = "2025-04-30T15:16:01.73Z" }, + { url = "https://files.pythonhosted.org/packages/98/7f/c999ae6d9bfbaac3e8dea3dbb5ca6bdf61c220828e80a6c339e89f9db777/selectolax-0.3.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7073e3bcdc60ebdb5f8777c79b465471ec000ab556134da4e00f037d3321a2ec", size = 5638593, upload-time = "2025-04-30T15:16:03.594Z" }, + { url = "https://files.pythonhosted.org/packages/d6/32/ffd89376a888c24ecaf01fcffc5fe97b82ae03ab163158f51a559f1ebad5/selectolax-0.3.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47587db7cef411d22f8224cf2926aacdb326c4c838d386035229f16ccc2d8d26", size = 5668207, upload-time = "2025-04-30T15:16:05.564Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5c/2de0c7b8be75ad52d44706c67946181b972f27641ab4f6a1f27f46d2a603/selectolax-0.3.29-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21de62b5093b1cb6c5d4cab0bef5f708b9ee1483b640d42be9d955becfcd287a", size = 5276654, upload-time = "2025-04-30T15:16:07.143Z" }, + { url = "https://files.pythonhosted.org/packages/29/29/152bb745b24072d3eecd3b395c756e74763111b9bbd265604f5b96b9a1aa/selectolax-0.3.29-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:af5cd03298cd75cb0fbf712d6ae4f8aca9c13a226d2821ca82f51cc9b33b032f", size = 5543731, upload-time = "2025-04-30T15:16:09.733Z" }, + { url = "https://files.pythonhosted.org/packages/04/1d/df65baaf16ece393f9f1a7c55f015510634adbb163ce72adcafaddf5cf9c/selectolax-0.3.29-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3f58dca53d2d3dc18dfd2cb9210a5625f32598db24e3f857f5be58f21a8f3b88", size = 5275005, upload-time = "2025-04-30T15:16:11.958Z" }, + { url = "https://files.pythonhosted.org/packages/5d/74/e56fd6f9b3087947b812f3862df3265bf5e21396d9673d076e999b1086cf/selectolax-0.3.29-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a6d8e02c6b9ba951d7b5a5dd2788a1d4bbdedc89782a4de165f1a87c4168ac", size = 5617441, upload-time = "2025-04-30T15:16:14.15Z" }, + { url = "https://files.pythonhosted.org/packages/63/d6/243049029bfc937b9f02faf4a4494e693575046414a475bf28ed9632b768/selectolax-0.3.29-cp311-cp311-win32.whl", hash = "sha256:912a1fc03157ebd066d8f59ae9ca2412ef95c7101a51590327c23071b02c97c7", size = 1701370, upload-time = "2025-04-30T15:16:16.339Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7f/baba8c5ce941c8cbd2dfb0c9f2253ba2d8c2d5d0fddda4f5a87eceb2484f/selectolax-0.3.29-cp311-cp311-win_amd64.whl", hash = "sha256:a3d44a295416b79815d2858ed4ccb71bf3b63087483a5d3705daa837c9dcf44d", size = 1808251, upload-time = "2025-04-30T15:16:18.289Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/ca4332eecc19124782f6f0d7cb28c331da2e9d9cf25287ba2b3b6a00cea1/selectolax-0.3.29-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6d3f373efd1db18ac9b2222de2668aaa366a1f0b560241eab128f3ca68e8add1", size = 3656166, upload-time = "2025-04-30T15:16:19.907Z" }, + { url = "https://files.pythonhosted.org/packages/b8/46/2dcae03a94f80f3e0d339c149de8110b5abe1230668b015fd338d9e71a27/selectolax-0.3.29-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:97b9971bb37b54ef4440134f22792d15c9ee12d890a526a7fe0b376502240143", size = 2095991, upload-time = "2025-04-30T15:16:21.654Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bd/95f15396e5f30898227d84a7ec6a39d9a9b34005f0e9f8f38e7fee21ab66/selectolax-0.3.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd99ff0f5a6c017c471635d4ee45b61d25f24689331e407147b2cf5e36892480", size = 5844493, upload-time = "2025-04-30T15:16:23.268Z" }, + { url = "https://files.pythonhosted.org/packages/36/25/64c60da9aec81f2992355b0a3ce00ea1ed99e6f5499868016d6972bd4948/selectolax-0.3.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8377c317bf1d5fd6ccc56dfb5a0928bbcbea3e800b7af54761cfbbb99dc94cb9", size = 5881062, upload-time = "2025-04-30T15:16:24.891Z" }, + { url = "https://files.pythonhosted.org/packages/b6/81/94105217f91f7c6a98ac3164210cba0c6aa8da91cb85405292a6d70e39c3/selectolax-0.3.29-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5388c56456272b2c241fc1906db9cc993984cafdad936cb5e061e3af0c44144e", size = 5470368, upload-time = "2025-04-30T15:16:26.457Z" }, + { url = "https://files.pythonhosted.org/packages/51/6e/40bc259f13e5d3dd0bb8ddd1d55ef099244db2568ffb82fd9d489984d61a/selectolax-0.3.29-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9e4690894f406863e25ba49da27e1a6fda9bfc21b0b315c399d3093be080e81", size = 5693476, upload-time = "2025-04-30T15:16:28.386Z" }, + { url = "https://files.pythonhosted.org/packages/58/bd/2668ee1d5471ad88daf83ca484515ba46774fc9c951d6c4c0beffea89952/selectolax-0.3.29-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:deeab93386b6c9a75052515f5b9e7e3dd623c585871c0c2b3126970ff902603b", size = 5449747, upload-time = "2025-04-30T15:16:30.626Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b5/1c61839ae5af70a8291c643982a99f051b543df90b220b98db1b26bd4899/selectolax-0.3.29-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6abdd8357f1c105c1add01a9f0373511fa832548b2e2778b00a8ba2a4508d6ed", size = 5786843, upload-time = "2025-04-30T15:16:32.231Z" }, + { url = "https://files.pythonhosted.org/packages/67/08/ca42c100ab90168c123e6b521e38cb7618b697a693fdb77e42dabb0670fd/selectolax-0.3.29-cp312-cp312-win32.whl", hash = "sha256:9c969626b2295702076f50aac91e44c3bba639fa2e1a612bf6ae254bf29b4d57", size = 1697859, upload-time = "2025-04-30T15:16:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/5c/22/9524af51d950cc718bd4406f3bed05acbfcb321a4a308ec85b96ccdaa1ef/selectolax-0.3.29-cp312-cp312-win_amd64.whl", hash = "sha256:e7f4cc1b7ce9691559decfd5db7cc500e71a9f6ccfe76c054f284c184a1d1dc9", size = 1804145, upload-time = "2025-04-30T15:16:35.12Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a7/083a00aa9cb6bef0317baba4269841c366652558d77189275bed2da6aa81/selectolax-0.3.29-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e3112f05a34bf36d36ecc51520b1d98c4667b54a3f123dffef5072273e89a360", size = 3651407, upload-time = "2025-04-30T15:16:37.282Z" }, + { url = "https://files.pythonhosted.org/packages/7e/cd/6c89ac27961ef5f5e9b40eda0d0653b9c95c93485fb8a554bf093eac1c77/selectolax-0.3.29-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:38462ae369897f71da287f1282079c11f1b878b99a4d1d509d1116ce05226d88", size = 2092649, upload-time = "2025-04-30T15:16:38.817Z" }, + { url = "https://files.pythonhosted.org/packages/3e/12/82710124b7b52613fdb9d5c14494a41785eb83e1c93ec7e1d1814c2ce292/selectolax-0.3.29-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdd1e63735f2fb8485fb6b9f4fe30d6c030930f438f46a4a62bd9886ab3c7fd9", size = 5821738, upload-time = "2025-04-30T15:16:40.747Z" }, + { url = "https://files.pythonhosted.org/packages/8b/08/8ceb3eb7fee9743026a4481fccb771f257c82b2c853a1a30271902234eab/selectolax-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea52e0c128e8e89f98ab0ccaabbc853677de5730729a3351da595976131b66e0", size = 5856069, upload-time = "2025-04-30T15:16:42.496Z" }, + { url = "https://files.pythonhosted.org/packages/47/6c/ec2b7aff0f6202e4157415d76bd588108cc518374bf53afa81c122691780/selectolax-0.3.29-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0933659b4250b91317ccd78167e6804389cdaf7ed86c5d034b058a550d23110f", size = 5443255, upload-time = "2025-04-30T15:16:44.083Z" }, + { url = "https://files.pythonhosted.org/packages/cd/90/d5fea46ff191d02c2380a779b119ea6799751b79fcddb2bb230b21b38fc5/selectolax-0.3.29-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0c9005e9089a6b0c6fb6a9f691ddbbb10a3a23ebeff54393980340f3dbcdb99", size = 5637529, upload-time = "2025-04-30T15:16:46.175Z" }, + { url = "https://files.pythonhosted.org/packages/9d/83/7f876a515f5af31f7b948cf10951be896fe6deeff2b9b713640c8ec82fd3/selectolax-0.3.29-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac940963c52f13cdf5d7266a979744949b660d367ce669efa073b557f6e09a18", size = 5379121, upload-time = "2025-04-30T15:16:47.909Z" }, + { url = "https://files.pythonhosted.org/packages/57/cb/7dc739a484b1a17ccf92a23dfe558ae615c232bd81e78a72049c25d1ff66/selectolax-0.3.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:484274f73839f9a143f4c13ce1b0a0123b5d64be22f967a1dc202a9a78687d67", size = 5727944, upload-time = "2025-04-30T15:16:49.52Z" }, + { url = "https://files.pythonhosted.org/packages/b7/09/95da4d2919d99a6090327390b84bc5440133196351e5e04c24cccda06cbb/selectolax-0.3.29-cp313-cp313-win32.whl", hash = "sha256:29e71fbd58b90d2920ef91a940680cb5331710fe397925ce9d10c3f2f086bf27", size = 1697529, upload-time = "2025-04-30T15:16:51.123Z" }, + { url = "https://files.pythonhosted.org/packages/0e/17/5a3951da22a4ad8f959088ddc370c68b28dad03190d91fcd137a52410fb9/selectolax-0.3.29-cp313-cp313-win_amd64.whl", hash = "sha256:e13befacff5f78102aa11465055ecb6d4b35f89663e36f271f2b506bcab14112", size = 1803334, upload-time = "2025-04-30T15:16:53.775Z" }, + { url = "https://files.pythonhosted.org/packages/fb/2c/ba1fd5acf52928ebe998c05681619f11a128d8e6765d469c97149cea1f93/selectolax-0.3.29-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9858fef96e4e332fa64102f0ab1ecf8f88a9ea46a82d379fb421c8f736b60090", size = 3643918, upload-time = "2025-04-30T15:17:15.875Z" }, + { url = "https://files.pythonhosted.org/packages/e7/cb/bec139ba6be1ee59951d02f0bd639d4f3c54976d690a2bd7da82cf2430c1/selectolax-0.3.29-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c198a1d3693aeccf1c45871bf3fee4bd46428fa99cdb9f3dfee20e1b48c363c7", size = 2089312, upload-time = "2025-04-30T15:17:17.544Z" }, + { url = "https://files.pythonhosted.org/packages/22/64/86ae8f9543ee34f5ffbd3b12a9d760e42ad33c81387cbf17bad3cbb7bc16/selectolax-0.3.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6b569fa67a122bfd7f0776c1c922daf122fb4502c8116a903c6168742b84db9", size = 5505835, upload-time = "2025-04-30T15:17:19.714Z" }, + { url = "https://files.pythonhosted.org/packages/48/98/f5b121d8852fe749a58ca65c94a7d2ccf8959b179c03463a8395c6482d8b/selectolax-0.3.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1676cd243812ca6ddd79ad53997996535e27db17fda3d440b470bb322f5959", size = 5529671, upload-time = "2025-04-30T15:17:22.164Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/bda3433bca372dfa0fac1db2bb312695b5b628635988153a84815fe6c5d5/selectolax-0.3.29-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24f3f5de4051ca33ea769c8a99798c7e30e6500e090e363d5fcd3382b1ae8dfa", size = 5146745, upload-time = "2025-04-30T15:17:23.923Z" }, + { url = "https://files.pythonhosted.org/packages/8a/92/c18af1224dd9adfffe41182914090f1e18aeb2375717e7834e5416304065/selectolax-0.3.29-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:50b18a262ea01ca5522f9a30c28ecadb004be88296f6bd2ace21464f89a3cbcc", size = 5406891, upload-time = "2025-04-30T15:17:25.997Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8c/a40988c1098ab06c16b1a7f725f54b5c4e1a5167547541e88cb57109cbbc/selectolax-0.3.29-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d458db7fee5f6b1ce75664ce8a009343c0aac1993a7b844a997cfea3ad0ea77b", size = 5139978, upload-time = "2025-04-30T15:17:28.503Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fd/a407a5b63f64351a2fff212f95e0be219355bfe758cd7d6a36d59266d4ad/selectolax-0.3.29-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c684d66a0f8e48786ef6d79b9e1e84cb1ffd0835232b4033bed37cf978d1303", size = 5477920, upload-time = "2025-04-30T15:17:30.322Z" }, + { url = "https://files.pythonhosted.org/packages/c1/a9/41c785f21e63eba278881fb7c84897d158581a753a8f6e069747db246b6b/selectolax-0.3.29-cp39-cp39-win32.whl", hash = "sha256:aecf29641a4b092331d081fb59f12f6b3fd236c16b48ef6e86419454df787ae1", size = 1702276, upload-time = "2025-04-30T15:17:32.629Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b7/70c880f722ec02b172c1c37e22bc37c0aeac6f50a7238932b89701514b47/selectolax-0.3.29-cp39-cp39-win_amd64.whl", hash = "sha256:565304311e45c582e85ec525b0646aede6f8db1f22bc08786e94f7b6552d4311", size = 1808204, upload-time = "2025-04-30T15:17:34.392Z" }, +] + [[package]] name = "send2trash" version = "1.8.3" @@ -2866,7 +4193,7 @@ name = "sortedcollections" version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sortedcontainers" }, + { name = "sortedcontainers", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/01/00/6d749cc1f88e7f95f5442a8abb195fa607094deba9e0475affbfb7fa8c04/sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd", size = 9287, upload-time = "2021-01-18T22:15:16.623Z" } wheels = [ @@ -2896,8 +4223,8 @@ name = "spirack" version = "0.2.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "pyserial" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "pyserial", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/f6/50b27f7abf76b282d22748ac3a503f30a78d33f9b0d091a680682079bc9b/spirack-0.2.7.tar.gz", hash = "sha256:2ba7f81ae3ab5b568027499360a178c4d762a20771717c76e06d5c1d3eed2f49", size = 48970, upload-time = "2025-08-05T07:20:40.744Z" } wheels = [ @@ -2980,6 +4307,36 @@ version = "2.2.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, ] @@ -3024,8 +4381,8 @@ dependencies = [ { name = "platformdirs" }, { name = "pluggy" }, { name = "pyproject-api" }, - { name = "tomli" }, - { name = "typing-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, { name = "virtualenv" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cf/01/321c98e3cc584fd101d869c85be2a8236a41a84842bc6af5c078b10c2126/tox-4.28.4.tar.gz", hash = "sha256:b5b14c6307bd8994ff1eba5074275826620325ee1a4f61316959d562bfd70b9d", size = 199692, upload-time = "2025-07-31T21:20:26.6Z" } @@ -3038,7 +4395,7 @@ name = "tqdm" version = "4.67.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } wheels = [ @@ -3077,8 +4434,8 @@ name = "typing-inspect" version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mypy-extensions" }, - { name = "typing-extensions" }, + { name = "mypy-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] 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 = [ @@ -3090,7 +4447,7 @@ name = "typing-inspection" version = "0.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } wheels = [ @@ -3138,9 +4495,9 @@ name = "versioningit" version = "3.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, - { name = "packaging" }, - { name = "tomli" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "tomli", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/89/f4/bc578cc80989c572231a36cc03cc097091176fa3fb8b4e2af1deb4370eb7/versioningit-3.3.0.tar.gz", hash = "sha256:b91ad7d73e73d21220e69540f20213f2b729a1f9b35c04e9e137eaf28d2214da", size = 220280, upload-time = "2025-06-27T20:13:23.368Z" } wheels = [ @@ -3164,7 +4521,7 @@ dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808, upload-time = "2025-08-13T14:24:07.464Z" } wheels = [ @@ -3177,9 +4534,23 @@ version = "6.0.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, + { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, { url = "https://files.pythonhosted.org/packages/05/52/7223011bb760fce8ddc53416beb65b83a3ea6d7d13738dde75eeb2c89679/watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8", size = 96390, upload-time = "2024-11-01T14:06:49.325Z" }, { url = "https://files.pythonhosted.org/packages/9c/62/d2b21bc4e706d3a9d467561f487c2938cbd881c69f3808c43ac1ec242391/watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a", size = 88386, upload-time = "2024-11-01T14:06:50.536Z" }, { url = "https://files.pythonhosted.org/packages/ea/22/1c90b20eda9f4132e4603a26296108728a8bfe9584b006bd05dd94548853/watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c", size = 89017, upload-time = "2024-11-01T14:06:51.717Z" }, + { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, { url = "https://files.pythonhosted.org/packages/5b/79/69f2b0e8d3f2afd462029031baafb1b75d11bb62703f0e1022b2e54d49ee/watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa", size = 87903, upload-time = "2024-11-01T14:06:57.052Z" }, { url = "https://files.pythonhosted.org/packages/e2/2b/dc048dd71c2e5f0f7ebc04dd7912981ec45793a03c0dc462438e0591ba5d/watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e", size = 88381, upload-time = "2024-11-01T14:06:58.193Z" }, { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, @@ -3245,6 +4616,38 @@ version = "15.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, { url = "https://files.pythonhosted.org/packages/1c/cb/51ba82e59b3a664df54beed8ad95517c1b4dc1a913730e7a7db778f21291/websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", size = 182094, upload-time = "2025-03-05T20:03:01.827Z" }, { url = "https://files.pythonhosted.org/packages/fb/0f/bf3788c03fec679bcdaef787518dbe60d12fe5615a544a6d4cf82f045193/websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", size = 181094, upload-time = "2025-03-05T20:03:03.123Z" }, { url = "https://files.pythonhosted.org/packages/5e/da/9fb8c21edbc719b66763a571afbaf206cb6d3736d28255a46fc2fe20f902/websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", size = 181397, upload-time = "2025-03-05T20:03:04.443Z" }, @@ -3253,6 +4656,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/72/1090de20d6c91994cd4b357c3f75a4f25ee231b63e03adea89671cc12a3f/websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", size = 181164, upload-time = "2025-03-05T20:03:10.242Z" }, { url = "https://files.pythonhosted.org/packages/2d/37/098f2e1c103ae8ed79b0e77f08d83b0ec0b241cf4b7f2f10edd0126472e1/websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", size = 176381, upload-time = "2025-03-05T20:03:12.77Z" }, { url = "https://files.pythonhosted.org/packages/75/8b/a32978a3ab42cebb2ebdd5b05df0696a09f4d436ce69def11893afa301f0/websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", size = 176841, upload-time = "2025-03-05T20:03:14.367Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, { url = "https://files.pythonhosted.org/packages/87/28/bd23c6344b18fb43df40d0700f6d3fffcd7cef14a6995b4f976978b52e62/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", size = 174597, upload-time = "2025-03-05T20:03:32.247Z" }, { url = "https://files.pythonhosted.org/packages/6d/79/ca288495863d0f23a60f546f0905ae8f3ed467ad87f8b6aceb65f4c013e4/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", size = 174205, upload-time = "2025-03-05T20:03:33.731Z" }, { url = "https://files.pythonhosted.org/packages/04/e4/120ff3180b0872b1fe6637f6f995bcb009fb5c87d597c1fc21456f50c848/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", size = 174150, upload-time = "2025-03-05T20:03:35.757Z" }, @@ -3274,7 +4681,7 @@ name = "wirerope" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six" }, + { name = "six", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/f1/d0a4c936ba77eb1050da6ea5e7cd80aa36add343d9e5f7f9cf79a206c5b8/wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0", size = 10930, upload-time = "2025-01-16T11:01:25.427Z" } wheels = [ @@ -3287,6 +4694,48 @@ version = "1.17.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/de/17/9f8f86755c191d6779d7ddead1a53c7a8aa18bccb7cea8e7e72dfa6a8a09/wrapt-1.17.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775", size = 81975, upload-time = "2025-08-12T05:52:30.109Z" }, + { url = "https://files.pythonhosted.org/packages/f2/15/dd576273491f9f43dd09fce517f6c2ce6eb4fe21681726068db0d0467096/wrapt-1.17.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd", size = 83149, upload-time = "2025-08-12T05:52:09.316Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c4/5eb4ce0d4814521fee7aa806264bf7a114e748ad05110441cd5b8a5c744b/wrapt-1.17.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05", size = 82209, upload-time = "2025-08-12T05:52:10.331Z" }, + { url = "https://files.pythonhosted.org/packages/31/4b/819e9e0eb5c8dc86f60dfc42aa4e2c0d6c3db8732bce93cc752e604bb5f5/wrapt-1.17.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418", size = 81551, upload-time = "2025-08-12T05:52:31.137Z" }, + { url = "https://files.pythonhosted.org/packages/f8/83/ed6baf89ba3a56694700139698cf703aac9f0f9eb03dab92f57551bd5385/wrapt-1.17.3-cp310-cp310-win32.whl", hash = "sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390", size = 36464, upload-time = "2025-08-12T05:53:01.204Z" }, + { url = "https://files.pythonhosted.org/packages/2f/90/ee61d36862340ad7e9d15a02529df6b948676b9a5829fd5e16640156627d/wrapt-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6", size = 38748, upload-time = "2025-08-12T05:53:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c3/cefe0bd330d389c9983ced15d326f45373f4073c9f4a8c2f99b50bfea329/wrapt-1.17.3-cp310-cp310-win_arm64.whl", hash = "sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18", size = 36810, upload-time = "2025-08-12T05:52:51.906Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311", size = 82376, upload-time = "2025-08-12T05:52:32.134Z" }, + { url = "https://files.pythonhosted.org/packages/31/57/4930cb8d9d70d59c27ee1332a318c20291749b4fba31f113c2f8ac49a72e/wrapt-1.17.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1", size = 83604, upload-time = "2025-08-12T05:52:11.663Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/1afd48de81d63dd66e01b263a6fbb86e1b5053b419b9b33d13e1f6d0f7d0/wrapt-1.17.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5", size = 82782, upload-time = "2025-08-12T05:52:12.626Z" }, + { url = "https://files.pythonhosted.org/packages/1e/d7/4ad5327612173b144998232f98a85bb24b60c352afb73bc48e3e0d2bdc4e/wrapt-1.17.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2", size = 82076, upload-time = "2025-08-12T05:52:33.168Z" }, + { url = "https://files.pythonhosted.org/packages/bb/59/e0adfc831674a65694f18ea6dc821f9fcb9ec82c2ce7e3d73a88ba2e8718/wrapt-1.17.3-cp311-cp311-win32.whl", hash = "sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89", size = 36457, upload-time = "2025-08-12T05:53:03.936Z" }, + { url = "https://files.pythonhosted.org/packages/83/88/16b7231ba49861b6f75fc309b11012ede4d6b0a9c90969d9e0db8d991aeb/wrapt-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77", size = 38745, upload-time = "2025-08-12T05:53:02.885Z" }, + { url = "https://files.pythonhosted.org/packages/9a/1e/c4d4f3398ec073012c51d1c8d87f715f56765444e1a4b11e5180577b7e6e/wrapt-1.17.3-cp311-cp311-win_arm64.whl", hash = "sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a", size = 36806, upload-time = "2025-08-12T05:52:53.368Z" }, + { url = "https://files.pythonhosted.org/packages/9f/81/5d931d78d0eb732b95dc3ddaeeb71c8bb572fb01356e9133916cd729ecdd/wrapt-1.17.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828", size = 88036, upload-time = "2025-08-12T05:52:34.784Z" }, + { url = "https://files.pythonhosted.org/packages/ca/38/2e1785df03b3d72d34fc6252d91d9d12dc27a5c89caef3335a1bbb8908ca/wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9", size = 88156, upload-time = "2025-08-12T05:52:13.599Z" }, + { url = "https://files.pythonhosted.org/packages/b3/8b/48cdb60fe0603e34e05cffda0b2a4adab81fd43718e11111a4b0100fd7c1/wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396", size = 87102, upload-time = "2025-08-12T05:52:14.56Z" }, + { url = "https://files.pythonhosted.org/packages/3c/51/d81abca783b58f40a154f1b2c56db1d2d9e0d04fa2d4224e357529f57a57/wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc", size = 87732, upload-time = "2025-08-12T05:52:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b1/43b286ca1392a006d5336412d41663eeef1ad57485f3e52c767376ba7e5a/wrapt-1.17.3-cp312-cp312-win32.whl", hash = "sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe", size = 36705, upload-time = "2025-08-12T05:53:07.123Z" }, + { url = "https://files.pythonhosted.org/packages/28/de/49493f962bd3c586ab4b88066e967aa2e0703d6ef2c43aa28cb83bf7b507/wrapt-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c", size = 38877, upload-time = "2025-08-12T05:53:05.436Z" }, + { url = "https://files.pythonhosted.org/packages/f1/48/0f7102fe9cb1e8a5a77f80d4f0956d62d97034bbe88d33e94699f99d181d/wrapt-1.17.3-cp312-cp312-win_arm64.whl", hash = "sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6", size = 36885, upload-time = "2025-08-12T05:52:54.367Z" }, + { url = "https://files.pythonhosted.org/packages/0c/37/6faf15cfa41bf1f3dba80cd3f5ccc6622dfccb660ab26ed79f0178c7497f/wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277", size = 88072, upload-time = "2025-08-12T05:52:37.53Z" }, + { url = "https://files.pythonhosted.org/packages/78/f2/efe19ada4a38e4e15b6dff39c3e3f3f73f5decf901f66e6f72fe79623a06/wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d", size = 88214, upload-time = "2025-08-12T05:52:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/ca86701e9de1622b16e09689fc24b76f69b06bb0150990f6f4e8b0eeb576/wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa", size = 87105, upload-time = "2025-08-12T05:52:17.914Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e0/d10bd257c9a3e15cbf5523025252cc14d77468e8ed644aafb2d6f54cb95d/wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050", size = 87766, upload-time = "2025-08-12T05:52:39.243Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cf/7d848740203c7b4b27eb55dbfede11aca974a51c3d894f6cc4b865f42f58/wrapt-1.17.3-cp313-cp313-win32.whl", hash = "sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8", size = 36711, upload-time = "2025-08-12T05:53:10.074Z" }, + { url = "https://files.pythonhosted.org/packages/57/54/35a84d0a4d23ea675994104e667ceff49227ce473ba6a59ba2c84f250b74/wrapt-1.17.3-cp313-cp313-win_amd64.whl", hash = "sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb", size = 38885, upload-time = "2025-08-12T05:53:08.695Z" }, + { url = "https://files.pythonhosted.org/packages/01/77/66e54407c59d7b02a3c4e0af3783168fff8e5d61def52cda8728439d86bc/wrapt-1.17.3-cp313-cp313-win_arm64.whl", hash = "sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16", size = 36896, upload-time = "2025-08-12T05:52:55.34Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f7/c983d2762bcce2326c317c26a6a1e7016f7eb039c27cdf5c4e30f4160f31/wrapt-1.17.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b", size = 87163, upload-time = "2025-08-12T05:52:40.965Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0f/f673f75d489c7f22d17fe0193e84b41540d962f75fce579cf6873167c29b/wrapt-1.17.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa", size = 87963, upload-time = "2025-08-12T05:52:20.326Z" }, + { url = "https://files.pythonhosted.org/packages/df/61/515ad6caca68995da2fac7a6af97faab8f78ebe3bf4f761e1b77efbc47b5/wrapt-1.17.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7", size = 86945, upload-time = "2025-08-12T05:52:21.581Z" }, + { url = "https://files.pythonhosted.org/packages/d3/bd/4e70162ce398462a467bc09e768bee112f1412e563620adc353de9055d33/wrapt-1.17.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4", size = 86857, upload-time = "2025-08-12T05:52:43.043Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/da8560695e9284810b8d3df8a19396a6e40e7518059584a1a394a2b35e0a/wrapt-1.17.3-cp314-cp314-win32.whl", hash = "sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10", size = 37178, upload-time = "2025-08-12T05:53:12.605Z" }, + { url = "https://files.pythonhosted.org/packages/db/c8/b71eeb192c440d67a5a0449aaee2310a1a1e8eca41676046f99ed2487e9f/wrapt-1.17.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6", size = 39310, upload-time = "2025-08-12T05:53:11.106Z" }, + { url = "https://files.pythonhosted.org/packages/45/20/2cda20fd4865fa40f86f6c46ed37a2a8356a7a2fde0773269311f2af56c7/wrapt-1.17.3-cp314-cp314-win_arm64.whl", hash = "sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58", size = 37266, upload-time = "2025-08-12T05:52:56.531Z" }, + { url = "https://files.pythonhosted.org/packages/64/0e/f4472f2fdde2d4617975144311f8800ef73677a159be7fe61fa50997d6c0/wrapt-1.17.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e", size = 108571, upload-time = "2025-08-12T05:52:44.521Z" }, + { url = "https://files.pythonhosted.org/packages/cc/01/9b85a99996b0a97c8a17484684f206cbb6ba73c1ce6890ac668bcf3838fb/wrapt-1.17.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f", size = 113094, upload-time = "2025-08-12T05:52:22.618Z" }, + { url = "https://files.pythonhosted.org/packages/25/02/78926c1efddcc7b3aa0bc3d6b33a822f7d898059f7cd9ace8c8318e559ef/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056", size = 110659, upload-time = "2025-08-12T05:52:24.057Z" }, + { url = "https://files.pythonhosted.org/packages/dc/ee/c414501ad518ac3e6fe184753632fe5e5ecacdcf0effc23f31c1e4f7bfcf/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804", size = 106946, upload-time = "2025-08-12T05:52:45.976Z" }, + { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717, upload-time = "2025-08-12T05:53:15.214Z" }, + { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334, upload-time = "2025-08-12T05:53:14.178Z" }, + { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471, upload-time = "2025-08-12T05:52:57.784Z" }, { url = "https://files.pythonhosted.org/packages/43/46/dd0791943613885f62619f18ee6107e6133237a6b6ed8a9ecfac339d0b4f/wrapt-1.17.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a", size = 81745, upload-time = "2025-08-12T05:52:49.62Z" }, { url = "https://files.pythonhosted.org/packages/dd/ec/bb2d19bd1a614cc4f438abac13ae26c57186197920432d2a915183b15a8b/wrapt-1.17.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139", size = 82833, upload-time = "2025-08-12T05:52:27.738Z" }, { url = "https://files.pythonhosted.org/packages/8d/eb/66579aea6ad36f07617fedca8e282e49c7c9bab64c63b446cfe4f7f47a49/wrapt-1.17.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df", size = 81889, upload-time = "2025-08-12T05:52:29.023Z" }, @@ -3302,9 +4751,9 @@ name = "xarray" version = "2024.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "pandas", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/e8/8ee12706df0d34ad04b3737621a73432458d47bc8abfbd6f049e51ca89c3/xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638", size = 3728663, upload-time = "2024-07-30T08:31:45.48Z" } wheels = [ @@ -3313,14 +4762,14 @@ wheels = [ [package.optional-dependencies] io = [ - { name = "cftime" }, - { name = "fsspec" }, - { name = "h5netcdf" }, - { name = "netcdf4" }, - { name = "pooch" }, - { name = "pydap" }, - { name = "scipy" }, - { name = "zarr" }, + { name = "cftime", marker = "python_full_version < '3.10'" }, + { name = "fsspec", marker = "python_full_version < '3.10'" }, + { name = "h5netcdf", marker = "python_full_version < '3.10'" }, + { name = "netcdf4", marker = "python_full_version < '3.10'" }, + { name = "pooch", marker = "python_full_version < '3.10'" }, + { name = "pydap", marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "zarr", marker = "python_full_version < '3.10'" }, ] [[package]] @@ -3329,6 +4778,58 @@ version = "3.5.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241, upload-time = "2024-08-17T09:20:38.972Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/20/ee/b8a99ebbc6d1113b3a3f09e747fa318c3cde5b04bd9c197688fadf0eeae8/xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680", size = 220927, upload-time = "2024-08-17T09:17:38.835Z" }, + { url = "https://files.pythonhosted.org/packages/58/62/15d10582ef159283a5c2b47f6d799fc3303fe3911d5bb0bcc820e1ef7ff4/xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da", size = 200360, upload-time = "2024-08-17T09:17:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/23/41/61202663ea9b1bd8e53673b8ec9e2619989353dba8cfb68e59a9cbd9ffe3/xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23", size = 428528, upload-time = "2024-08-17T09:17:42.545Z" }, + { url = "https://files.pythonhosted.org/packages/f2/07/d9a3059f702dec5b3b703737afb6dda32f304f6e9da181a229dafd052c29/xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196", size = 194149, upload-time = "2024-08-17T09:17:44.361Z" }, + { url = "https://files.pythonhosted.org/packages/eb/58/27caadf78226ecf1d62dbd0c01d152ed381c14c1ee4ad01f0d460fc40eac/xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c", size = 207703, upload-time = "2024-08-17T09:17:46.656Z" }, + { url = "https://files.pythonhosted.org/packages/b1/08/32d558ce23e1e068453c39aed7b3c1cdc690c177873ec0ca3a90d5808765/xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482", size = 216255, upload-time = "2024-08-17T09:17:48.031Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d4/2b971e2d2b0a61045f842b622ef11e94096cf1f12cd448b6fd426e80e0e2/xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296", size = 202744, upload-time = "2024-08-17T09:17:50.045Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/6a6438864a8c4c39915d7b65effd85392ebe22710412902487e51769146d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415", size = 210115, upload-time = "2024-08-17T09:17:51.834Z" }, + { url = "https://files.pythonhosted.org/packages/48/7d/b3c27c27d1fc868094d02fe4498ccce8cec9fcc591825c01d6bcb0b4fc49/xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198", size = 414247, upload-time = "2024-08-17T09:17:53.094Z" }, + { url = "https://files.pythonhosted.org/packages/a1/05/918f9e7d2fbbd334b829997045d341d6239b563c44e683b9a7ef8fe50f5d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442", size = 191419, upload-time = "2024-08-17T09:17:54.906Z" }, + { url = "https://files.pythonhosted.org/packages/08/29/dfe393805b2f86bfc47c290b275f0b7c189dc2f4e136fd4754f32eb18a8d/xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da", size = 30114, upload-time = "2024-08-17T09:17:56.566Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d7/aa0b22c4ebb7c3ccb993d4c565132abc641cd11164f8952d89eb6a501909/xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9", size = 30003, upload-time = "2024-08-17T09:17:57.596Z" }, + { url = "https://files.pythonhosted.org/packages/69/12/f969b81541ee91b55f1ce469d7ab55079593c80d04fd01691b550e535000/xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6", size = 26773, upload-time = "2024-08-17T09:17:59.169Z" }, + { url = "https://files.pythonhosted.org/packages/04/9e/01067981d98069eec1c20201f8c145367698e9056f8bc295346e4ea32dd1/xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166", size = 221566, upload-time = "2024-08-17T09:18:03.461Z" }, + { url = "https://files.pythonhosted.org/packages/d4/09/d4996de4059c3ce5342b6e1e6a77c9d6c91acce31f6ed979891872dd162b/xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7", size = 201214, upload-time = "2024-08-17T09:18:05.616Z" }, + { url = "https://files.pythonhosted.org/packages/62/f5/6d2dc9f8d55a7ce0f5e7bfef916e67536f01b85d32a9fbf137d4cadbee38/xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623", size = 429433, upload-time = "2024-08-17T09:18:06.957Z" }, + { url = "https://files.pythonhosted.org/packages/d9/72/9256303f10e41ab004799a4aa74b80b3c5977d6383ae4550548b24bd1971/xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a", size = 194822, upload-time = "2024-08-17T09:18:08.331Z" }, + { url = "https://files.pythonhosted.org/packages/34/92/1a3a29acd08248a34b0e6a94f4e0ed9b8379a4ff471f1668e4dce7bdbaa8/xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88", size = 208538, upload-time = "2024-08-17T09:18:10.332Z" }, + { url = "https://files.pythonhosted.org/packages/53/ad/7fa1a109663366de42f724a1cdb8e796a260dbac45047bce153bc1e18abf/xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c", size = 216953, upload-time = "2024-08-17T09:18:11.707Z" }, + { url = "https://files.pythonhosted.org/packages/35/02/137300e24203bf2b2a49b48ce898ecce6fd01789c0fcd9c686c0a002d129/xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2", size = 203594, upload-time = "2024-08-17T09:18:13.799Z" }, + { url = "https://files.pythonhosted.org/packages/23/03/aeceb273933d7eee248c4322b98b8e971f06cc3880e5f7602c94e5578af5/xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084", size = 210971, upload-time = "2024-08-17T09:18:15.824Z" }, + { url = "https://files.pythonhosted.org/packages/e3/64/ed82ec09489474cbb35c716b189ddc1521d8b3de12b1b5ab41ce7f70253c/xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d", size = 415050, upload-time = "2024-08-17T09:18:17.142Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/6db4c02dcb488ad4e03bc86d70506c3d40a384ee73c9b5c93338eb1f3c23/xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839", size = 192216, upload-time = "2024-08-17T09:18:18.779Z" }, + { url = "https://files.pythonhosted.org/packages/22/6d/db4abec29e7a567455344433d095fdb39c97db6955bb4a2c432e486b4d28/xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da", size = 30120, upload-time = "2024-08-17T09:18:20.009Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/fa3b61c0cf03e1da4767213672efe186b1dfa4fc901a4a694fb184a513d1/xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58", size = 30003, upload-time = "2024-08-17T09:18:21.052Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8e/9e6fc572acf6e1cc7ccb01973c213f895cb8668a9d4c2b58a99350da14b7/xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3", size = 26777, upload-time = "2024-08-17T09:18:22.809Z" }, + { url = "https://files.pythonhosted.org/packages/5b/84/de7c89bc6ef63d750159086a6ada6416cc4349eab23f76ab870407178b93/xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84", size = 220959, upload-time = "2024-08-17T09:18:26.518Z" }, + { url = "https://files.pythonhosted.org/packages/fe/86/51258d3e8a8545ff26468c977101964c14d56a8a37f5835bc0082426c672/xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793", size = 200006, upload-time = "2024-08-17T09:18:27.905Z" }, + { url = "https://files.pythonhosted.org/packages/02/0a/96973bd325412feccf23cf3680fd2246aebf4b789122f938d5557c54a6b2/xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be", size = 428326, upload-time = "2024-08-17T09:18:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/11/a7/81dba5010f7e733de88af9555725146fc133be97ce36533867f4c7e75066/xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6", size = 194380, upload-time = "2024-08-17T09:18:30.706Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7d/f29006ab398a173f4501c0e4977ba288f1c621d878ec217b4ff516810c04/xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90", size = 207934, upload-time = "2024-08-17T09:18:32.133Z" }, + { url = "https://files.pythonhosted.org/packages/8a/6e/6e88b8f24612510e73d4d70d9b0c7dff62a2e78451b9f0d042a5462c8d03/xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27", size = 216301, upload-time = "2024-08-17T09:18:33.474Z" }, + { url = "https://files.pythonhosted.org/packages/af/51/7862f4fa4b75a25c3b4163c8a873f070532fe5f2d3f9b3fc869c8337a398/xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2", size = 203351, upload-time = "2024-08-17T09:18:34.889Z" }, + { url = "https://files.pythonhosted.org/packages/22/61/8d6a40f288f791cf79ed5bb113159abf0c81d6efb86e734334f698eb4c59/xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d", size = 210294, upload-time = "2024-08-17T09:18:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/17/02/215c4698955762d45a8158117190261b2dbefe9ae7e5b906768c09d8bc74/xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab", size = 414674, upload-time = "2024-08-17T09:18:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/b7a8db8a3237cff3d535261325d95de509f6a8ae439a5a7a4ffcff478189/xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e", size = 192022, upload-time = "2024-08-17T09:18:40.138Z" }, + { url = "https://files.pythonhosted.org/packages/78/e3/dd76659b2811b3fd06892a8beb850e1996b63e9235af5a86ea348f053e9e/xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8", size = 30170, upload-time = "2024-08-17T09:18:42.163Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6b/1c443fe6cfeb4ad1dcf231cdec96eb94fb43d6498b4469ed8b51f8b59a37/xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e", size = 30040, upload-time = "2024-08-17T09:18:43.699Z" }, + { url = "https://files.pythonhosted.org/packages/0f/eb/04405305f290173acc0350eba6d2f1a794b57925df0398861a20fbafa415/xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2", size = 26796, upload-time = "2024-08-17T09:18:45.29Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cc/762312960691da989c7cd0545cb120ba2a4148741c6ba458aa723c00a3f8/xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc", size = 220950, upload-time = "2024-08-17T09:18:49.06Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e9/cc266f1042c3c13750e86a535496b58beb12bf8c50a915c336136f6168dc/xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3", size = 199980, upload-time = "2024-08-17T09:18:50.445Z" }, + { url = "https://files.pythonhosted.org/packages/bf/85/a836cd0dc5cc20376de26b346858d0ac9656f8f730998ca4324921a010b9/xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c", size = 428324, upload-time = "2024-08-17T09:18:51.988Z" }, + { url = "https://files.pythonhosted.org/packages/b4/0e/15c243775342ce840b9ba34aceace06a1148fa1630cd8ca269e3223987f5/xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb", size = 194370, upload-time = "2024-08-17T09:18:54.164Z" }, + { url = "https://files.pythonhosted.org/packages/87/a1/b028bb02636dfdc190da01951d0703b3d904301ed0ef6094d948983bef0e/xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f", size = 207911, upload-time = "2024-08-17T09:18:55.509Z" }, + { url = "https://files.pythonhosted.org/packages/80/d5/73c73b03fc0ac73dacf069fdf6036c9abad82de0a47549e9912c955ab449/xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7", size = 216352, upload-time = "2024-08-17T09:18:57.073Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2a/5043dba5ddbe35b4fe6ea0a111280ad9c3d4ba477dd0f2d1fe1129bda9d0/xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326", size = 203410, upload-time = "2024-08-17T09:18:58.54Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b2/9a8ded888b7b190aed75b484eb5c853ddd48aa2896e7b59bbfbce442f0a1/xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf", size = 210322, upload-time = "2024-08-17T09:18:59.943Z" }, + { url = "https://files.pythonhosted.org/packages/98/62/440083fafbc917bf3e4b67c2ade621920dd905517e85631c10aac955c1d2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7", size = 414725, upload-time = "2024-08-17T09:19:01.332Z" }, + { url = "https://files.pythonhosted.org/packages/75/db/009206f7076ad60a517e016bb0058381d96a007ce3f79fa91d3010f49cc2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c", size = 192070, upload-time = "2024-08-17T09:19:03.007Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6d/c61e0668943a034abc3a569cdc5aeae37d686d9da7e39cf2ed621d533e36/xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637", size = 30172, upload-time = "2024-08-17T09:19:04.355Z" }, + { url = "https://files.pythonhosted.org/packages/96/14/8416dce965f35e3d24722cdf79361ae154fa23e2ab730e5323aa98d7919e/xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43", size = 30041, upload-time = "2024-08-17T09:19:05.435Z" }, + { url = "https://files.pythonhosted.org/packages/27/ee/518b72faa2073f5aa8e3262408d284892cb79cf2754ba0c3a5870645ef73/xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b", size = 26801, upload-time = "2024-08-17T09:19:06.547Z" }, { url = "https://files.pythonhosted.org/packages/b4/92/9ac297e3487818f429bcf369c1c6a097edf5b56ed6fc1feff4c1882e87ef/xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f", size = 220644, upload-time = "2024-08-17T09:19:51.081Z" }, { url = "https://files.pythonhosted.org/packages/86/48/c1426dd3c86fc4a52f983301867463472f6a9013fb32d15991e60c9919b6/xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd", size = 200021, upload-time = "2024-08-17T09:19:52.923Z" }, { url = "https://files.pythonhosted.org/packages/f3/de/0ab8c79993765c94fc0d0c1a22b454483c58a0161e1b562f58b654f47660/xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc", size = 428217, upload-time = "2024-08-17T09:19:54.349Z" }, @@ -3342,6 +4843,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/86/2b/915049db13401792fec159f57e4f4a5ca7a9768e83ef71d6645b9d0cd749/xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4", size = 30122, upload-time = "2024-08-17T09:20:07.691Z" }, { url = "https://files.pythonhosted.org/packages/d5/87/382ef7b24917d7cf4c540ee30f29b283bc87ac5893d2f89b23ea3cdf7d77/xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558", size = 30021, upload-time = "2024-08-17T09:20:08.832Z" }, { url = "https://files.pythonhosted.org/packages/e2/47/d06b24e2d9c3dcabccfd734d11b5bbebfdf59ceac2c61509d8205dd20ac6/xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e", size = 26780, upload-time = "2024-08-17T09:20:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/0c/67/f75276ca39e2c6604e3bee6c84e9db8a56a4973fde9bf35989787cf6e8aa/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986", size = 36214, upload-time = "2024-08-17T09:20:12.335Z" }, + { url = "https://files.pythonhosted.org/packages/0f/f8/f6c61fd794229cc3848d144f73754a0c107854372d7261419dcbbd286299/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6", size = 32020, upload-time = "2024-08-17T09:20:13.537Z" }, + { url = "https://files.pythonhosted.org/packages/79/d3/c029c99801526f859e6b38d34ab87c08993bf3dcea34b11275775001638a/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b", size = 40515, upload-time = "2024-08-17T09:20:14.669Z" }, + { url = "https://files.pythonhosted.org/packages/62/e3/bef7b82c1997579c94de9ac5ea7626d01ae5858aa22bf4fcb38bf220cb3e/xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da", size = 30064, upload-time = "2024-08-17T09:20:15.925Z" }, { url = "https://files.pythonhosted.org/packages/82/dd/3c42a1f022ad0d82c852d3cb65493ebac03dcfa8c994465a5fb052b00e3c/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1", size = 36216, upload-time = "2024-08-17T09:20:32.116Z" }, { url = "https://files.pythonhosted.org/packages/b2/40/8f902ab3bebda228a9b4de69eba988280285a7f7f167b942bc20bb562df9/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f", size = 32042, upload-time = "2024-08-17T09:20:33.562Z" }, { url = "https://files.pythonhosted.org/packages/db/87/bd06beb8ccaa0e9e577c9b909a49cfa5c5cd2ca46034342d72dd9ce5bc56/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0", size = 40516, upload-time = "2024-08-17T09:20:36.004Z" }, @@ -3353,10 +4858,10 @@ name = "zarr" version = "2.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "asciitree" }, - { name = "fasteners", marker = "sys_platform != 'emscripten'" }, - { name = "numcodecs" }, - { name = "numpy" }, + { name = "asciitree", marker = "python_full_version < '3.10'" }, + { name = "fasteners", marker = "python_full_version < '3.10' and sys_platform != 'emscripten'" }, + { name = "numcodecs", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/00/ac5c518ff1c1b1cc87a62f86ad9d19c647c19d969a91faa40d3b6342ccaa/zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47", size = 3603055, upload-time = "2024-05-26T19:23:24.131Z" } wheels = [ @@ -3368,7 +4873,7 @@ name = "zhinst" version = "21.8.20515" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/24/3af8acbc6815c91ec1dd4c339e43897cd44b0a6d21be6e3b66adc236e965/zhinst-21.8.20515-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df5e562f4e928e168be8816e20b5c138e7c70306eb402ad7fc9e8a5eec893613", size = 7672570, upload-time = "2021-09-09T14:10:55.759Z" }, @@ -3381,12 +4886,12 @@ name = "zhinst-qcodes" version = "0.1.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "numpy" }, - { name = "qcodes" }, - { name = "setuptools" }, - { name = "zhinst" }, - { name = "zhinst-toolkit" }, + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "qcodes", marker = "python_full_version < '3.10'" }, + { name = "setuptools", marker = "python_full_version < '3.10'" }, + { name = "zhinst", marker = "python_full_version < '3.10'" }, + { name = "zhinst-toolkit", marker = "python_full_version < '3.10'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/e3/1d/a4bc3a785fe9a494f9540ec3b01ec7d6d7c408f83802e6ba92d231474463/zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae", size = 22481, upload-time = "2021-05-10T08:00:27.985Z" }, @@ -3397,10 +4902,10 @@ name = "zhinst-toolkit" version = "0.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, - { name = "numpy" }, - { name = "setuptools" }, - { name = "zhinst" }, + { name = "attrs", marker = "python_full_version < '3.10'" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "setuptools", marker = "python_full_version < '3.10'" }, + { name = "zhinst", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/62/2d/459c53a535a79552a950bbab6ca54d15d4e32f70d4321c7eb434c34bc400/zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9", size = 1728637, upload-time = "2021-02-04T13:57:32.724Z" } From d3d642c64b588dc3ac73c6360d6db77cf1e606b5 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:17:57 +0200 Subject: [PATCH 09/12] Release 0.7.0 (#627) --- .github/workflows/release.yaml | 2 +- .github/workflows/tests.yaml | 2 +- .gitignore | 5 + .vscode/launch.json | 19 + .vscode/settings.json | 9 + CHANGELOG.md | 10 + opensquirrel/ir/expression.py | 8 +- opensquirrel/passes/mapper/mip_mapper.py | 3 +- opensquirrel/passes/router/astar_router.py | 3 +- .../passes/router/shortest_path_router.py | 3 +- .../passes/validator/interaction_validator.py | 3 +- opensquirrel/reader/libqasm_parser.py | 11 +- pyproject.toml | 48 +- tests/integration/test_tuna_5.py | 4 +- .../passes/decomposer/test_aba_decomposer.py | 2 +- tests/passes/router/test_astar_router.py | 2 +- .../router/test_shortest_path_router.py | 2 +- tests/test_parameter_domain.py | 2 +- uv.lock | 3974 +++++++++-------- 19 files changed, 2249 insertions(+), 1863 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1fb80e0c..7b6d328f 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,4 +1,4 @@ -name: Releases +name: Build and Publish wheels on: pull_request: diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 1a2a0a07..f7a189ed 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -38,10 +38,10 @@ jobs: - macos-latest - windows-latest python-version: - - "3.9" - "3.10" - "3.11" - "3.12" + - "3.13" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v5 diff --git a/.gitignore b/.gitignore index 891439a8..fe298bf5 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,9 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +# VSCode +.vscode +.vscode/launch.json +.vscode/settings.json + %LOCALAPPDATA% diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..18568b52 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Debug Pytest (No Coverage)", + "type": "python", + "request": "launch", + "module": "pytest", + "args": [ + "-p", "no:cov", + "tests", + "-v", + "-s" + ], + "console": "integratedTerminal", + "justMyCode": true + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..cf6d5352 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "python.testing.pytestEnabled": true, + "python.testing.pytestArgs": [ + "-p", "no:cov", + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.nosetestsEnabled": false +} diff --git a/CHANGELOG.md b/CHANGELOG.md index c72e7f85..46dd5333 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,16 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. +## [ 0.7.0 ] - [ 2025-10-13 ] + +### Added + +- Support for Python 3.13 added. + +### Removed + +- Support for Python 3.9 dropped. + ## [ 0.6.1 ] - [ 2025-10-06 ] ### Added diff --git a/opensquirrel/ir/expression.py b/opensquirrel/ir/expression.py index 6cd8c1f2..c0a8d8a5 100644 --- a/opensquirrel/ir/expression.py +++ b/opensquirrel/ir/expression.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from collections.abc import Sequence from dataclasses import dataclass -from typing import Any, Protocol, SupportsFloat, SupportsInt, Union, cast, overload, runtime_checkable +from typing import Any, Protocol, SupportsFloat, SupportsInt, cast, overload, runtime_checkable import numpy as np from numpy.typing import ArrayLike, DTypeLike, NDArray @@ -280,6 +280,6 @@ def accept(self, visitor: IRVisitor) -> Any: # Type Aliases -BitLike = Union[SupportsInt, Bit] -QubitLike = Union[SupportsInt, Qubit] -AxisLike = Union[ArrayLike, BaseAxis] +BitLike = SupportsInt | Bit +QubitLike = SupportsInt | Qubit +AxisLike = ArrayLike | Axis diff --git a/opensquirrel/passes/mapper/mip_mapper.py b/opensquirrel/passes/mapper/mip_mapper.py index 162c4673..2774c9f8 100644 --- a/opensquirrel/passes/mapper/mip_mapper.py +++ b/opensquirrel/passes/mapper/mip_mapper.py @@ -1,6 +1,7 @@ # OpenQL MIP-Like Mapper from __future__ import annotations +import itertools from typing import Any import numpy as np @@ -90,7 +91,7 @@ def _get_cost( args = statement.arguments if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): qubit_args = [arg for arg in args if isinstance(arg, Qubit)] - for q_0, q_1 in zip(qubit_args[:-1], qubit_args[1:]): + for q_0, q_1 in itertools.pairwise(qubit_args): reference_counter[q_0.index][q_1.index] += 1 reference_counter[q_1.index][q_0.index] += 1 cost = [[0 for _ in range(num_physical_qubits)] for _ in range(num_virtual_qubits)] diff --git a/opensquirrel/passes/router/astar_router.py b/opensquirrel/passes/router/astar_router.py index ad89798f..6df5e8ad 100644 --- a/opensquirrel/passes/router/astar_router.py +++ b/opensquirrel/passes/router/astar_router.py @@ -1,5 +1,6 @@ from __future__ import annotations +import itertools import math from typing import Any @@ -21,7 +22,7 @@ def __init__( self.distance_metric = distance_metric def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: - for start_qubit_index, end_qubit_index in zip(shortest_path[:-2], shortest_path[1:-1]): + for start_qubit_index, end_qubit_index in itertools.pairwise(shortest_path[:-1]): ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) # Update subsequent statements to reflect the swap for statement in ir.statements[statement_index + 1 :]: diff --git a/opensquirrel/passes/router/shortest_path_router.py b/opensquirrel/passes/router/shortest_path_router.py index df55035d..652cc069 100644 --- a/opensquirrel/passes/router/shortest_path_router.py +++ b/opensquirrel/passes/router/shortest_path_router.py @@ -1,3 +1,4 @@ +import itertools from typing import Any import networkx as nx @@ -14,7 +15,7 @@ def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: self.connectivity = connectivity def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: - for start_qubit_index, end_qubit_index in zip(shortest_path[:-2], shortest_path[1:-1]): + for start_qubit_index, end_qubit_index in itertools.pairwise(shortest_path[:-1]): ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) # Update subsequent statements to reflect the swap for statement in ir.statements[statement_index + 1 :]: diff --git a/opensquirrel/passes/validator/interaction_validator.py b/opensquirrel/passes/validator/interaction_validator.py index 558059dd..8beb8d83 100644 --- a/opensquirrel/passes/validator/interaction_validator.py +++ b/opensquirrel/passes/validator/interaction_validator.py @@ -1,3 +1,4 @@ +import itertools from typing import Any from opensquirrel.ir import IR, Instruction, Qubit @@ -26,7 +27,7 @@ def validate(self, ir: IR) -> None: args = statement.arguments if args and len(args) > 1 and all(isinstance(arg, Qubit) for arg in args): qubit_args = [arg for arg in args if isinstance(arg, Qubit)] - qubit_index_pairs = [(q0.index, q1.index) for q0, q1 in zip(qubit_args[:-1], qubit_args[1:])] + qubit_index_pairs = [(q0.index, q1.index) for q0, q1 in itertools.pairwise(qubit_args)] for i, j in qubit_index_pairs: if j not in self.connectivity.get(str(i), []): non_executable_interactions.append((i, j)) diff --git a/opensquirrel/reader/libqasm_parser.py b/opensquirrel/reader/libqasm_parser.py index 18fbe210..45f52771 100644 --- a/opensquirrel/reader/libqasm_parser.py +++ b/opensquirrel/reader/libqasm_parser.py @@ -1,6 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Callable, cast +from collections.abc import Callable +from typing import TYPE_CHECKING, Any, cast import cqasm.v3x as cqasm @@ -141,9 +142,11 @@ def _get_expanded_instruction_args(self, instruction: cqasm.semantic.Instruction extended_gate_parameters = [gate_parameters] * number_of_operands return [ (*operands, *parameters) - for operands, parameters in zip(zip(*extended_operands), extended_gate_parameters) + for operands, parameters in zip( + zip(*extended_operands, strict=False), extended_gate_parameters, strict=False + ) ] - return list(zip(*extended_operands)) + return list(zip(*extended_operands, strict=False)) def _get_expanded_measure_args(self, ast_args: Any) -> list[tuple[Any, ...]]: """Construct a list with a list of bits and a list of qubits, then return a zip of both lists. @@ -160,7 +163,7 @@ def _get_expanded_measure_args(self, ast_args: Any) -> list[tuple[Any, ...]]: else: msg = "argument is neither of qubit nor bit type" raise TypeError(msg) - return list(zip(*expanded_args)) + return list(zip(*expanded_args, strict=False)) @staticmethod def _create_analyzer() -> cqasm.Analyzer: diff --git a/pyproject.toml b/pyproject.toml index 94f84cbb..7b7c46f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,11 @@ [project] name = "opensquirrel" -version = "0.6.1" +version = "0.7.0" description = "A quantum circuit transformation and manipulation tool" authors = [ { name = "Quantum Inspire", email = "support@quantum-inspire.com" }, ] -requires-python = ">=3.9.0" +requires-python = ">=3.10.0" readme = "README.md" license = "Apache-2.0" keywords = [ @@ -14,19 +14,18 @@ keywords = [ "compilation", ] dependencies = [ - "numpy>=1.26", "libqasm==1.2.1", - "networkx>=3.0.0,<4", - "scipy>=1.11.4 ; python_version < '3.10'", - "scipy>=1.14,<2.0 ; python_version >= '3.10'", + "networkx>=3.4.2", + "numpy>=2.2.6", + "scipy>=1.15.3" ] classifiers = [ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "License :: OSI Approved :: Apache Software License", ] @@ -36,31 +35,31 @@ Repository = "https://github.com/QuTech-Delft/OpenSquirrel" [dependency-groups] dev = [ - "coverage>=7.3.2,<8", - "pytest>=7.4.3,<9.0.0", + "coverage>=7.10.7,<8", + "IPython>=8.37,<9", + "mypy>=1.18.2,<2", + "pytest>=8.4.2,<9", "pytest-cov>=4.1,<8.0", - "mypy>=1.7.0,<2", - "ruff>=0.5,<0.14", - "tox>=4.24.1,<5", - "sympy>=1.13.1,<2", - "IPython>=7.12,<9.0", + "ruff>=0.13.2,<0.15", + "sympy>=1.14.0,<2", + "tox>=4.30.2,<5", ] export = [ - "pyqt5-qt5==5.15.2; sys_platform != 'darwin' and python_version < '3.10'", - "quantify-scheduler>=0.18.0,<0.19; sys_platform != 'darwin' and python_version < '3.10'", + "pyqt5-qt5==5.15.2; sys_platform != 'darwin'", + "quantify-scheduler==0.25.1; sys_platform != 'darwin'", ] docs = [ "mike>=2.1.3", - "mkdocs>=1.5.3,<2", - "mkdocstrings[python]>=0.24,<0.31", + "mkdocs>=1.6.1,<2", "mkdocs-exclude==1.0.2", + "mkdocs-build-plantuml-plugin==1.9.0", "mkdocs-glightbox==0.5.1", - "mkdocs_gen_files>=0.5.0,<0.6", - "mkdocs-material>=9.4.12,<10", + "mkdocs-literate-nav>=0.6.2,<0.7", + "mkdocs-material>=9.6.20,<10", "mkdocs-material-extensions==1.3.1", - "mkdocs-build-plantuml-plugin==1.9.0", "mkdocs-render-swagger-plugin==0.1.2", - "mkdocs-literate-nav>=0.6.1,<0.7", + "mkdocs_gen_files>=0.5.0,<0.6", + "mkdocstrings[python]>=0.24,<0.31", "pymdown-extensions>=10.7.1,<11", ] examples = [ @@ -77,9 +76,6 @@ include = ["opensquirrel"] requires = ["hatchling"] build-backend = "hatchling.build" -[tool.pytest.ini_options] -addopts = "-v" - [tool.coverage.run] branch = true omit = ["tests/*", "**/.tox/**"] @@ -97,7 +93,7 @@ exclude_also = ["if TYPE_CHECKING:"] [tool.ruff] line-length = 120 -target-version = "py39" +target-version = "py310" [tool.ruff.lint] preview = true diff --git a/tests/integration/test_tuna_5.py b/tests/integration/test_tuna_5.py index d53219f8..5cf831f0 100644 --- a/tests/integration/test_tuna_5.py +++ b/tests/integration/test_tuna_5.py @@ -1,7 +1,7 @@ from __future__ import annotations import importlib -from typing import Any, Union +from typing import Any import pytest @@ -12,7 +12,7 @@ from opensquirrel.passes.validator import InteractionValidator, PrimitiveGateValidator DataType = dict[str, Any] -BitStringMappingType = list[Union[tuple[None, None], tuple[int, int]]] +BitStringMappingType = list[tuple[None, None] | tuple[int, int]] def _get_operations(exported_schedule) -> list[str]: # type: ignore # noqa: ANN001 diff --git a/tests/passes/decomposer/test_aba_decomposer.py b/tests/passes/decomposer/test_aba_decomposer.py index 6f3243df..19bd626e 100644 --- a/tests/passes/decomposer/test_aba_decomposer.py +++ b/tests/passes/decomposer/test_aba_decomposer.py @@ -1,5 +1,5 @@ import itertools -from typing import Callable +from collections.abc import Callable import numpy as np import pytest diff --git a/tests/passes/router/test_astar_router.py b/tests/passes/router/test_astar_router.py index 788cff55..33601da3 100644 --- a/tests/passes/router/test_astar_router.py +++ b/tests/passes/router/test_astar_router.py @@ -135,7 +135,7 @@ def test_route_indices_propagation(router4: AStarRouter, circuit4: Circuit) -> N assert len(actual_statements) == len(expected_statements) - for actual, expected in zip(actual_statements, expected_statements): + for actual, expected in zip(actual_statements, expected_statements, strict=False): assert type(actual) is type(expected) actual_indices = [q.index for q in actual.get_qubit_operands()] # type: ignore[attr-defined] expected_indices = [q.index for q in expected.get_qubit_operands()] # type: ignore[attr-defined] diff --git a/tests/passes/router/test_shortest_path_router.py b/tests/passes/router/test_shortest_path_router.py index 6261c361..33460e68 100644 --- a/tests/passes/router/test_shortest_path_router.py +++ b/tests/passes/router/test_shortest_path_router.py @@ -134,7 +134,7 @@ def test_route_indices_propagation(router4: ShortestPathRouter, circuit4: Circui assert len(actual_statements) == len(expected_statements) - for actual, expected in zip(actual_statements, expected_statements): + for actual, expected in zip(actual_statements, expected_statements, strict=False): assert type(actual) is type(expected) actual_indices = [q.index for q in actual.get_qubit_operands()] # type: ignore[attr-defined] expected_indices = [q.index for q in expected.get_qubit_operands()] # type: ignore[attr-defined] diff --git a/tests/test_parameter_domain.py b/tests/test_parameter_domain.py index feb34928..6e9fa54d 100644 --- a/tests/test_parameter_domain.py +++ b/tests/test_parameter_domain.py @@ -19,7 +19,7 @@ def angles() -> AnglesType: input_angles = [pi, -pi, -pi - DELTA, -pi + DELTA, 3 * pi / 2, -3 * pi / 2, 2 * pi] expected_outputs = [pi, pi, pi - DELTA, -pi + DELTA, -pi / 2, pi / 2, 0.0] - return zip(input_angles, expected_outputs) + return zip(input_angles, expected_outputs, strict=False) class TestParsing: diff --git a/uv.lock b/uv.lock index 04ef22aa..a72a9dd1 100644 --- a/uv.lock +++ b/uv.lock @@ -1,31 +1,57 @@ version = 1 revision = 3 -requires-python = ">=3.9.0" +requires-python = ">=3.10.0" resolution-markers = [ "python_full_version >= '3.14'", - "python_full_version >= '3.11' and python_full_version < '3.14'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", + "python_full_version < '3.11'", ] [[package]] name = "adaptive" version = "1.3.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] dependencies = [ - { name = "cloudpickle", marker = "python_full_version < '3.10'" }, - { name = "loky", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "sortedcollections", marker = "python_full_version < '3.10'" }, - { name = "sortedcontainers", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, - { name = "versioningit", marker = "python_full_version < '3.10'" }, + { name = "cloudpickle", marker = "python_full_version < '3.11'" }, + { name = "loky", marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sortedcollections", marker = "python_full_version < '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, + { name = "versioningit", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/11/6b/42c5e5e5e4698665409ff2fc99ed0e74f52f91039faf33f79af89bf6319c/adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294", size = 112954, upload-time = "2025-03-03T22:38:51.58Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/7a5458e66104b3526ed8ae99bbdf4d2da860d4c8023bab42e514779ea54a/adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637", size = 125750, upload-time = "2025-03-03T22:38:49.946Z" }, ] +[[package]] +name = "adaptive" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, + { name = "loky", marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sortedcollections", marker = "python_full_version >= '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, + { name = "versioningit", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/ab/96e11cd50453e9fbd3da4787d8fbb1eddb4658bd968b371e772b5b48ff2e/adaptive-1.4.1.tar.gz", hash = "sha256:7ba981e7793fbeb0f52cb961ee235979989fd8c72e3d3b77b69f747b75fa69eb", size = 112611, upload-time = "2025-05-13T12:23:48.29Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/f6/3e6f3d70dd401c0ae6af6fbe44ce5e84c414f0cacdd786e3f55f828c6f0b/adaptive-1.4.1-py3-none-any.whl", hash = "sha256:882e2adbd87157de5caeabf1d573ea0eac585dd5e1da19a77e1899a0aab4c702", size = 125634, upload-time = "2025-05-13T12:23:47.134Z" }, +] + [[package]] name = "annotated-types" version = "0.7.0" @@ -37,7 +63,7 @@ wheels = [ [[package]] name = "anyio" -version = "4.10.0" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, @@ -45,9 +71,9 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, ] [[package]] @@ -64,49 +90,19 @@ name = "argon2-cffi" version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "argon2-cffi-bindings", version = "21.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "argon2-cffi-bindings", version = "25.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { 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 = "21.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", -] -dependencies = [ - { name = "cffi", marker = "python_full_version >= '3.14'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911, upload-time = "2021-12-01T08:52:55.68Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658, upload-time = "2021-12-01T09:09:17.016Z" }, - { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583, upload-time = "2021-12-01T09:09:19.546Z" }, - { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168, upload-time = "2021-12-01T09:09:21.445Z" }, - { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709, upload-time = "2021-12-01T09:09:18.182Z" }, - { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613, upload-time = "2021-12-01T09:09:22.741Z" }, - { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583, upload-time = "2021-12-01T09:09:24.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475, upload-time = "2021-12-01T09:09:26.673Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698, upload-time = "2021-12-01T09:09:27.87Z" }, - { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817, upload-time = "2021-12-01T09:09:30.267Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104, upload-time = "2021-12-01T09:09:31.335Z" }, -] - [[package]] name = "argon2-cffi-bindings" version = "25.1.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.11' and python_full_version < '3.14'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", -] dependencies = [ - { name = "cffi", marker = "python_full_version < '3.14'" }, + { 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 = [ @@ -220,15 +216,15 @@ wheels = [ [[package]] name = "beautifulsoup4" -version = "4.13.4" +version = "4.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/e9/df2358efd7659577435e2177bfa69cba6c33216681af51a707193dec162a/beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e", size = 625822, upload-time = "2025-09-29T10:05:42.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, + { url = "https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515", size = 106392, upload-time = "2025-09-29T10:05:43.771Z" }, ] [[package]] @@ -253,10 +249,11 @@ name = "broadbean" version = "0.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "schema", marker = "python_full_version < '3.10'" }, - { name = "versioningit", marker = "python_full_version < '3.10'" }, + { name = "matplotlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "schema" }, + { name = "versioningit" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/c9/c64ec69941544561f503fe092f2f32b9117252b2dd22b90368787d2316a2/broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c", size = 44803, upload-time = "2024-03-06T22:15:44.076Z" } wheels = [ @@ -265,11 +262,24 @@ wheels = [ [[package]] name = "cachetools" -version = "6.1.0" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/89/817ad5d0411f136c484d535952aef74af9b25e0d99e90cdffbe121e6d628/cachetools-6.1.0.tar.gz", hash = "sha256:b4c4f404392848db3ce7aac34950d17be4d864da4b8b66911008e430bc544587", size = 30714, upload-time = "2025-06-16T18:51:03.07Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/61/e4fad8155db4a04bfb4734c7c8ff0882f078f24294d42798b3568eb63bff/cachetools-6.2.0.tar.gz", hash = "sha256:38b328c0889450f05f5e120f56ab68c8abaf424e1275522b138ffc93253f7e32", size = 30988, upload-time = "2025-08-25T18:57:30.924Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/f0/2ef431fe4141f5e334759d73e81120492b23b2824336883a91ac04ba710b/cachetools-6.1.0-py3-none-any.whl", hash = "sha256:1c7bb3cf9193deaf3508b7c5f2a79986c13ea38965c5adcff1f84519cf39163e", size = 11189, upload-time = "2025-06-16T18:51:01.514Z" }, + { url = "https://files.pythonhosted.org/packages/6c/56/3124f61d37a7a4e7cc96afc5492c78ba0cb551151e530b54669ddd1436ef/cachetools-6.2.0-py3-none-any.whl", hash = "sha256:1c76a8960c0041fcc21097e357f882197c79da0dbff766e7317890a65d7d8ba6", size = 11276, upload-time = "2025-08-25T18:57:29.684Z" }, +] + +[[package]] +name = "cattrs" +version = "25.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e3/42/988b3a667967e9d2d32346e7ed7edee540ef1cee829b53ef80aa8d4a0222/cattrs-25.2.0.tar.gz", hash = "sha256:f46c918e955db0177be6aa559068390f71988e877c603ae2e56c71827165cc06", size = 506531, upload-time = "2025-08-31T20:41:59.301Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/a5/b3771ac30b590026b9d721187110194ade05bfbea3d98b423a9cafd80959/cattrs-25.2.0-py3-none-any.whl", hash = "sha256:539d7eedee7d2f0706e4e109182ad096d608ba84633c32c75ef3458f1d11e8f1", size = 70040, upload-time = "2025-08-31T20:41:57.543Z" }, ] [[package]] @@ -283,83 +293,117 @@ wheels = [ [[package]] name = "cf-xarray" -version = "0.9.4" +version = "0.10.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/15/8c916b4118ece2011c0c1365b64823ce361d352c460785402c78b8520ba8/cf_xarray-0.10.6.tar.gz", hash = "sha256:159236eca465453784ee7efa2a430d5e2092978db8a5d4d8b591f61d0639cb89", size = 513498, upload-time = "2025-06-20T18:19:18.526Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/55/2cce57427624814f4c6db8b14147fb73b86ed82e808d3dfd36426195071c/cf_xarray-0.10.6-py3-none-any.whl", hash = "sha256:39b457e47bb1557749ede115d1126ad9340eafb26ddeea0fef3a81149fc4d019", size = 70998, upload-time = "2025-06-20T18:19:17.054Z" }, +] + +[[package]] +name = "cf-xarray" +version = "0.10.9" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] dependencies = [ - { name = "xarray", marker = "python_full_version < '3.10'" }, + { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/a1/58cc7f4c72c144fcb720395c244fd36df33ddc0bdd67fbb1c38037cd068c/cf_xarray-0.9.4.tar.gz", hash = "sha256:23833bce5ddffc31ec95258c82a62c848c15332696d91abbf960a4325bc6accb", size = 506942, upload-time = "2024-07-17T10:07:46.518Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/2a/bdd43fe8dcb6000342173723e60d7f573280fd9886adc199d1a9b199a5ea/cf_xarray-0.10.9.tar.gz", hash = "sha256:36e829c63e42496e892b52faf1c5d6a9936857df3b3ad2f4fd86e06a17e6ec33", size = 683246, upload-time = "2025-09-09T15:12:01.406Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/ce/d69d52c9962f1245d5648242dc23b334df1f3be073aee0a7dcf841f90cf7/cf_xarray-0.9.4-py3-none-any.whl", hash = "sha256:9f7acf73fe14bed66680bdb135682656ea8451e1f6c59221bc31a912b62ea46a", size = 65950, upload-time = "2024-07-17T10:07:44.511Z" }, + { url = "https://files.pythonhosted.org/packages/41/01/2e486a570e095869a153c12381cb2c143eb0ed187067c3199306b33e5c36/cf_xarray-0.10.9-py3-none-any.whl", hash = "sha256:a41fa218e8f31b6c82c4687d92951f536186e288e5da6d56efd92a57b628eb18", size = 76487, upload-time = "2025-09-09T15:11:59.715Z" }, ] [[package]] name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191, upload-time = "2024-09-04T20:43:30.027Z" }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592, upload-time = "2024-09-04T20:43:32.108Z" }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024, upload-time = "2024-09-04T20:43:34.186Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188, upload-time = "2024-09-04T20:43:36.286Z" }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571, upload-time = "2024-09-04T20:43:38.586Z" }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687, upload-time = "2024-09-04T20:43:40.084Z" }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211, upload-time = "2024-09-04T20:43:41.526Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325, upload-time = "2024-09-04T20:43:43.117Z" }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784, upload-time = "2024-09-04T20:43:45.256Z" }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564, upload-time = "2024-09-04T20:43:46.779Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804, upload-time = "2024-09-04T20:43:48.186Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299, upload-time = "2024-09-04T20:43:49.812Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220, upload-time = "2024-09-04T20:45:01.577Z" }, - { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605, upload-time = "2024-09-04T20:45:03.837Z" }, - { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910, upload-time = "2024-09-04T20:45:05.315Z" }, - { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200, upload-time = "2024-09-04T20:45:06.903Z" }, - { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565, upload-time = "2024-09-04T20:45:08.975Z" }, - { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635, upload-time = "2024-09-04T20:45:10.64Z" }, - { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218, upload-time = "2024-09-04T20:45:12.366Z" }, - { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486, upload-time = "2024-09-04T20:45:13.935Z" }, - { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911, upload-time = "2024-09-04T20:45:15.696Z" }, - { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632, upload-time = "2024-09-04T20:45:17.284Z" }, - { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820, upload-time = "2024-09-04T20:45:18.762Z" }, - { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290, upload-time = "2024-09-04T20:45:20.226Z" }, +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, ] [[package]] @@ -367,7 +411,8 @@ name = "cftime" version = "1.6.4.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/c8/1155d1d58003105307c7e5985f422ae5bcb2ca0cbc553cc828f3c5a934a7/cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f", size = 54631, upload-time = "2024-10-22T18:48:34.194Z" } wheels = [ @@ -387,10 +432,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c3/f8/6f13d37abb7ade46e65a08acc31af776a96dde0eb569e05d4c4b01422ba6/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0", size = 1366034, upload-time = "2024-10-22T18:48:13.154Z" }, { url = "https://files.pythonhosted.org/packages/fa/08/335cb17f3b708f9a24f96ca4abb00889c7aa20b0ae273313e7c11faf1f97/cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4", size = 1390156, upload-time = "2024-10-22T18:48:15.22Z" }, { url = "https://files.pythonhosted.org/packages/f3/2d/980323fb5ec1ef369604b61ba259a41d0336cc1a85b639ed7bd210bd1290/cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259", size = 178496, upload-time = "2024-10-22T18:48:16.8Z" }, - { url = "https://files.pythonhosted.org/packages/0c/42/faa2137f268211ab3977997494cc1fa7f2883578cc2c42c3e8daf27ec375/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652700130dbcca3ae36dbb5b61ff360e62aa09fabcabc42ec521091a14389901", size = 1254873, upload-time = "2024-10-22T18:48:28.813Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e1/365495f6224ed2af76aa46d0a2e2611991486ef1a4655e7b2a48df706899/cftime-1.6.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a7fb6cc541a027dab37fdeb695f8a2b21cd7d200be606f81b5abc38f2391e2", size = 1290854, upload-time = "2024-10-22T18:48:30.21Z" }, - { url = "https://files.pythonhosted.org/packages/74/ee/9bc0c5d2f2be8305c3eae4b1f7b2fc88f314170c4c5a8cb80634311b68ed/cftime-1.6.4.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc2c0abe2dbd147e1b1e6d0f3de19a5ea8b04956acc204830fd8418066090989", size = 1315314, upload-time = "2024-10-22T18:48:31.63Z" }, - { url = "https://files.pythonhosted.org/packages/33/c3/7bfe4945e2cb42bf88c090dfc2141e7cef5f296ee046738a469d2ce43b6c/cftime-1.6.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:0ee2f5af8643aa1b47b7e388763a1a6e0dc05558cd2902cffb9cbcf954397648", size = 189177, upload-time = "2024-10-22T18:48:32.888Z" }, ] [[package]] @@ -463,30 +504,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, - { url = "https://files.pythonhosted.org/packages/c2/ca/9a0983dd5c8e9733565cf3db4df2b0a2e9a82659fd8aa2a868ac6e4a991f/charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05", size = 207520, upload-time = "2025-08-09T07:57:11.026Z" }, - { url = "https://files.pythonhosted.org/packages/39/c6/99271dc37243a4f925b09090493fb96c9333d7992c6187f5cfe5312008d2/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e", size = 147307, upload-time = "2025-08-09T07:57:12.4Z" }, - { url = "https://files.pythonhosted.org/packages/e4/69/132eab043356bba06eb333cc2cc60c6340857d0a2e4ca6dc2b51312886b3/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99", size = 160448, upload-time = "2025-08-09T07:57:13.712Z" }, - { url = "https://files.pythonhosted.org/packages/04/9a/914d294daa4809c57667b77470533e65def9c0be1ef8b4c1183a99170e9d/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7", size = 157758, upload-time = "2025-08-09T07:57:14.979Z" }, - { url = "https://files.pythonhosted.org/packages/b0/a8/6f5bcf1bcf63cb45625f7c5cadca026121ff8a6c8a3256d8d8cd59302663/charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7", size = 152487, upload-time = "2025-08-09T07:57:16.332Z" }, - { url = "https://files.pythonhosted.org/packages/c4/72/d3d0e9592f4e504f9dea08b8db270821c909558c353dc3b457ed2509f2fb/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19", size = 150054, upload-time = "2025-08-09T07:57:17.576Z" }, - { url = "https://files.pythonhosted.org/packages/20/30/5f64fe3981677fe63fa987b80e6c01042eb5ff653ff7cec1b7bd9268e54e/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312", size = 161703, upload-time = "2025-08-09T07:57:20.012Z" }, - { url = "https://files.pythonhosted.org/packages/e1/ef/dd08b2cac9284fd59e70f7d97382c33a3d0a926e45b15fc21b3308324ffd/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc", size = 159096, upload-time = "2025-08-09T07:57:21.329Z" }, - { url = "https://files.pythonhosted.org/packages/45/8c/dcef87cfc2b3f002a6478f38906f9040302c68aebe21468090e39cde1445/charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34", size = 153852, upload-time = "2025-08-09T07:57:22.608Z" }, - { url = "https://files.pythonhosted.org/packages/63/86/9cbd533bd37883d467fcd1bd491b3547a3532d0fbb46de2b99feeebf185e/charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432", size = 99840, upload-time = "2025-08-09T07:57:23.883Z" }, - { url = "https://files.pythonhosted.org/packages/ce/d6/7e805c8e5c46ff9729c49950acc4ee0aeb55efb8b3a56687658ad10c3216/charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca", size = 107438, upload-time = "2025-08-09T07:57:25.287Z" }, { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, ] [[package]] name = "click" -version = "8.1.8" +version = "8.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295, upload-time = "2025-09-18T17:32:22.42Z" }, ] [[package]] @@ -512,8 +542,8 @@ name = "columnar" version = "1.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "toolz", marker = "python_full_version < '3.10'" }, - { name = "wcwidth", marker = "python_full_version < '3.10'" }, + { name = "toolz" }, + { name = "wcwidth" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/0d/a0b2fd781050d29c9df64ac6df30b5f18b775724b79779f56fc5a8298fe9/Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72", size = 11386, upload-time = "2021-12-27T21:58:56.123Z" } wheels = [ @@ -531,158 +561,233 @@ wheels = [ [[package]] name = "contourpy" -version = "1.3.0" +version = "1.3.2" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370, upload-time = "2024-08-27T21:00:03.328Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460, upload-time = "2024-08-27T20:50:22.536Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623, upload-time = "2024-08-27T20:50:28.806Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761, upload-time = "2024-08-27T20:50:35.126Z" }, - { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015, upload-time = "2024-08-27T20:50:40.318Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672, upload-time = "2024-08-27T20:50:55.643Z" }, - { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688, upload-time = "2024-08-27T20:51:11.293Z" }, - { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145, upload-time = "2024-08-27T20:51:15.2Z" }, - { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019, upload-time = "2024-08-27T20:51:19.365Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443, upload-time = "2024-08-27T20:51:33.675Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548, upload-time = "2024-08-27T20:51:39.322Z" }, - { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118, upload-time = "2024-08-27T20:51:44.717Z" }, - { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162, upload-time = "2024-08-27T20:51:49.683Z" }, - { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396, upload-time = "2024-08-27T20:52:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297, upload-time = "2024-08-27T20:52:21.843Z" }, - { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808, upload-time = "2024-08-27T20:52:25.163Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181, upload-time = "2024-08-27T20:52:29.13Z" }, - { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177, upload-time = "2024-08-27T20:52:44.789Z" }, - { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735, upload-time = "2024-08-27T20:52:51.05Z" }, - { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679, upload-time = "2024-08-27T20:52:58.473Z" }, - { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549, upload-time = "2024-08-27T20:53:06.593Z" }, - { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068, upload-time = "2024-08-27T20:53:23.442Z" }, - { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833, upload-time = "2024-08-27T20:53:39.243Z" }, - { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681, upload-time = "2024-08-27T20:53:43.05Z" }, - { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283, upload-time = "2024-08-27T20:53:47.232Z" }, - { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184, upload-time = "2024-08-27T20:54:00.225Z" }, - { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262, upload-time = "2024-08-27T20:54:05.234Z" }, - { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806, upload-time = "2024-08-27T20:54:09.889Z" }, - { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710, upload-time = "2024-08-27T20:54:14.536Z" }, - { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107, upload-time = "2024-08-27T20:54:29.735Z" }, - { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458, upload-time = "2024-08-27T20:54:45.507Z" }, - { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643, upload-time = "2024-08-27T20:55:52.754Z" }, - { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301, upload-time = "2024-08-27T20:55:56.509Z" }, - { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188, upload-time = "2024-08-27T20:55:00.184Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644, upload-time = "2024-08-27T20:55:05.673Z" }, - { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141, upload-time = "2024-08-27T20:55:11.047Z" }, - { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469, upload-time = "2024-08-27T20:55:15.914Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894, upload-time = "2024-08-27T20:55:31.553Z" }, - { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829, upload-time = "2024-08-27T20:55:47.837Z" }, - { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167, upload-time = "2024-08-27T20:56:10.034Z" }, - { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279, upload-time = "2024-08-27T20:56:15.41Z" }, - { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519, upload-time = "2024-08-27T20:56:21.813Z" }, - { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922, upload-time = "2024-08-27T20:56:26.983Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017, upload-time = "2024-08-27T20:56:42.246Z" }, - { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773, upload-time = "2024-08-27T20:56:58.58Z" }, - { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353, upload-time = "2024-08-27T20:57:02.718Z" }, - { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817, upload-time = "2024-08-27T20:57:06.328Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008, upload-time = "2024-08-27T20:57:15.588Z" }, - { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690, upload-time = "2024-08-27T20:57:19.321Z" }, - { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099, upload-time = "2024-08-27T20:57:28.58Z" }, - { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838, upload-time = "2024-08-27T20:57:32.913Z" }, +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061, upload-time = "2025-04-15T17:34:55.961Z" }, + { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956, upload-time = "2025-04-15T17:35:00.992Z" }, + { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872, upload-time = "2025-04-15T17:35:06.177Z" }, + { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027, upload-time = "2025-04-15T17:35:11.244Z" }, + { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641, upload-time = "2025-04-15T17:35:26.701Z" }, + { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075, upload-time = "2025-04-15T17:35:43.204Z" }, + { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534, upload-time = "2025-04-15T17:35:46.554Z" }, + { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188, upload-time = "2025-04-15T17:35:50.064Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053, upload-time = "2025-04-15T17:36:03.235Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985, upload-time = "2025-04-15T17:36:08.275Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750, upload-time = "2025-04-15T17:36:13.29Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246, upload-time = "2025-04-15T17:36:18.329Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728, upload-time = "2025-04-15T17:36:33.878Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762, upload-time = "2025-04-15T17:36:51.295Z" }, + { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196, upload-time = "2025-04-15T17:36:55.002Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017, upload-time = "2025-04-15T17:36:58.576Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688, upload-time = "2025-04-15T17:37:11.481Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331, upload-time = "2025-04-15T17:37:18.212Z" }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963, upload-time = "2025-04-15T17:37:22.76Z" }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681, upload-time = "2025-04-15T17:37:33.001Z" }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674, upload-time = "2025-04-15T17:37:48.64Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480, upload-time = "2025-04-15T17:38:06.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489, upload-time = "2025-04-15T17:38:10.338Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042, upload-time = "2025-04-15T17:38:14.239Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694, upload-time = "2025-04-15T17:38:28.238Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986, upload-time = "2025-04-15T17:38:33.502Z" }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060, upload-time = "2025-04-15T17:38:38.672Z" }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747, upload-time = "2025-04-15T17:38:43.712Z" }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895, upload-time = "2025-04-15T17:39:00.224Z" }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098, upload-time = "2025-04-15T17:43:29.649Z" }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535, upload-time = "2025-04-15T17:44:44.532Z" }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096, upload-time = "2025-04-15T17:44:48.194Z" }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443, upload-time = "2025-04-15T17:43:44.522Z" }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865, upload-time = "2025-04-15T17:43:49.545Z" }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162, upload-time = "2025-04-15T17:43:54.203Z" }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355, upload-time = "2025-04-15T17:44:01.025Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935, upload-time = "2025-04-15T17:44:17.322Z" }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168, upload-time = "2025-04-15T17:44:33.43Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550, upload-time = "2025-04-15T17:44:37.092Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214, upload-time = "2025-04-15T17:44:40.827Z" }, + { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101, upload-time = "2025-04-15T17:45:04.165Z" }, + { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599, upload-time = "2025-04-15T17:45:08.456Z" }, + { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729, upload-time = "2025-04-15T17:45:20.166Z" }, + { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791, upload-time = "2025-04-15T17:45:24.794Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, ] [[package]] name = "coverage" -version = "7.10.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/4e/08b493f1f1d8a5182df0044acc970799b58a8d289608e0d891a03e9d269a/coverage-7.10.4.tar.gz", hash = "sha256:25f5130af6c8e7297fd14634955ba9e1697f47143f289e2a23284177c0061d27", size = 823798, upload-time = "2025-08-17T00:26:43.314Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/f4/350759710db50362685f922259c140592dba15eb4e2325656a98413864d9/coverage-7.10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d92d6edb0ccafd20c6fbf9891ca720b39c2a6a4b4a6f9cf323ca2c986f33e475", size = 216403, upload-time = "2025-08-17T00:24:19.083Z" }, - { url = "https://files.pythonhosted.org/packages/29/7e/e467c2bb4d5ecfd166bfd22c405cce4c50de2763ba1d78e2729c59539a42/coverage-7.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7202da14dc0236884fcc45665ffb2d79d4991a53fbdf152ab22f69f70923cc22", size = 216802, upload-time = "2025-08-17T00:24:21.824Z" }, - { url = "https://files.pythonhosted.org/packages/62/ab/2accdd1ccfe63b890e5eb39118f63c155202df287798364868a2884a50af/coverage-7.10.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ada418633ae24ec8d0fcad5efe6fc7aa3c62497c6ed86589e57844ad04365674", size = 243558, upload-time = "2025-08-17T00:24:23.569Z" }, - { url = "https://files.pythonhosted.org/packages/43/04/c14c33d0cfc0f4db6b3504d01a47f4c798563d932a836fd5f2dbc0521d3d/coverage-7.10.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b828e33eca6c3322adda3b5884456f98c435182a44917ded05005adfa1415500", size = 245370, upload-time = "2025-08-17T00:24:24.858Z" }, - { url = "https://files.pythonhosted.org/packages/99/71/147053061f1f51c1d3b3d040c3cb26876964a3a0dca0765d2441411ca568/coverage-7.10.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:802793ba397afcfdbe9f91f89d65ae88b958d95edc8caf948e1f47d8b6b2b606", size = 247228, upload-time = "2025-08-17T00:24:26.167Z" }, - { url = "https://files.pythonhosted.org/packages/cc/92/7ef882205d4d4eb502e6154ee7122c1a1b1ce3f29d0166921e0fb550a5d3/coverage-7.10.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d0b23512338c54101d3bf7a1ab107d9d75abda1d5f69bc0887fd079253e4c27e", size = 245270, upload-time = "2025-08-17T00:24:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/ab/3d/297a20603abcc6c7d89d801286eb477b0b861f3c5a4222730f1c9837be3e/coverage-7.10.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f36b7dcf72d06a8c5e2dd3aca02be2b1b5db5f86404627dff834396efce958f2", size = 243287, upload-time = "2025-08-17T00:24:28.697Z" }, - { url = "https://files.pythonhosted.org/packages/65/f9/b04111438f41f1ddd5dc88706d5f8064ae5bb962203c49fe417fa23a362d/coverage-7.10.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fce316c367a1dc2c411821365592eeb335ff1781956d87a0410eae248188ba51", size = 244164, upload-time = "2025-08-17T00:24:30.393Z" }, - { url = "https://files.pythonhosted.org/packages/1e/e5/c7d9eb7a9ea66cf92d069077719fb2b07782dcd7050b01a9b88766b52154/coverage-7.10.4-cp310-cp310-win32.whl", hash = "sha256:8c5dab29fc8070b3766b5fc85f8d89b19634584429a2da6d42da5edfadaf32ae", size = 218917, upload-time = "2025-08-17T00:24:31.67Z" }, - { url = "https://files.pythonhosted.org/packages/66/30/4d9d3b81f5a836b31a7428b8a25e6d490d4dca5ff2952492af130153c35c/coverage-7.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:4b0d114616f0fccb529a1817457d5fb52a10e106f86c5fb3b0bd0d45d0d69b93", size = 219822, upload-time = "2025-08-17T00:24:32.89Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ba/2c9817e62018e7d480d14f684c160b3038df9ff69c5af7d80e97d143e4d1/coverage-7.10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:05d5f98ec893d4a2abc8bc5f046f2f4367404e7e5d5d18b83de8fde1093ebc4f", size = 216514, upload-time = "2025-08-17T00:24:34.188Z" }, - { url = "https://files.pythonhosted.org/packages/e3/5a/093412a959a6b6261446221ba9fb23bb63f661a5de70b5d130763c87f916/coverage-7.10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9267efd28f8994b750d171e58e481e3bbd69e44baed540e4c789f8e368b24b88", size = 216914, upload-time = "2025-08-17T00:24:35.881Z" }, - { url = "https://files.pythonhosted.org/packages/2c/1f/2fdf4a71cfe93b07eae845ebf763267539a7d8b7e16b062f959d56d7e433/coverage-7.10.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4456a039fdc1a89ea60823d0330f1ac6f97b0dbe9e2b6fb4873e889584b085fb", size = 247308, upload-time = "2025-08-17T00:24:37.61Z" }, - { url = "https://files.pythonhosted.org/packages/ba/16/33f6cded458e84f008b9f6bc379609a6a1eda7bffe349153b9960803fc11/coverage-7.10.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c2bfbd2a9f7e68a21c5bd191be94bfdb2691ac40d325bac9ef3ae45ff5c753d9", size = 249241, upload-time = "2025-08-17T00:24:38.919Z" }, - { url = "https://files.pythonhosted.org/packages/84/98/9c18e47c889be58339ff2157c63b91a219272503ee32b49d926eea2337f2/coverage-7.10.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab7765f10ae1df7e7fe37de9e64b5a269b812ee22e2da3f84f97b1c7732a0d8", size = 251346, upload-time = "2025-08-17T00:24:40.507Z" }, - { url = "https://files.pythonhosted.org/packages/6d/07/00a6c0d53e9a22d36d8e95ddd049b860eef8f4b9fd299f7ce34d8e323356/coverage-7.10.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a09b13695166236e171ec1627ff8434b9a9bae47528d0ba9d944c912d33b3d2", size = 249037, upload-time = "2025-08-17T00:24:41.904Z" }, - { url = "https://files.pythonhosted.org/packages/3e/0e/1e1b944d6a6483d07bab5ef6ce063fcf3d0cc555a16a8c05ebaab11f5607/coverage-7.10.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5c9e75dfdc0167d5675e9804f04a56b2cf47fb83a524654297000b578b8adcb7", size = 247090, upload-time = "2025-08-17T00:24:43.193Z" }, - { url = "https://files.pythonhosted.org/packages/62/43/2ce5ab8a728b8e25ced077111581290ffaef9efaf860a28e25435ab925cf/coverage-7.10.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c751261bfe6481caba15ec005a194cb60aad06f29235a74c24f18546d8377df0", size = 247732, upload-time = "2025-08-17T00:24:44.906Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f3/706c4a24f42c1c5f3a2ca56637ab1270f84d9e75355160dc34d5e39bb5b7/coverage-7.10.4-cp311-cp311-win32.whl", hash = "sha256:051c7c9e765f003c2ff6e8c81ccea28a70fb5b0142671e4e3ede7cebd45c80af", size = 218961, upload-time = "2025-08-17T00:24:46.241Z" }, - { url = "https://files.pythonhosted.org/packages/e8/aa/6b9ea06e0290bf1cf2a2765bba89d561c5c563b4e9db8298bf83699c8b67/coverage-7.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:1a647b152f10be08fb771ae4a1421dbff66141e3d8ab27d543b5eb9ea5af8e52", size = 219851, upload-time = "2025-08-17T00:24:48.795Z" }, - { url = "https://files.pythonhosted.org/packages/8b/be/f0dc9ad50ee183369e643cd7ed8f2ef5c491bc20b4c3387cbed97dd6e0d1/coverage-7.10.4-cp311-cp311-win_arm64.whl", hash = "sha256:b09b9e4e1de0d406ca9f19a371c2beefe3193b542f64a6dd40cfcf435b7d6aa0", size = 218530, upload-time = "2025-08-17T00:24:50.164Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4a/781c9e4dd57cabda2a28e2ce5b00b6be416015265851060945a5ed4bd85e/coverage-7.10.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a1f0264abcabd4853d4cb9b3d164adbf1565da7dab1da1669e93f3ea60162d79", size = 216706, upload-time = "2025-08-17T00:24:51.528Z" }, - { url = "https://files.pythonhosted.org/packages/6a/8c/51255202ca03d2e7b664770289f80db6f47b05138e06cce112b3957d5dfd/coverage-7.10.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:536cbe6b118a4df231b11af3e0f974a72a095182ff8ec5f4868c931e8043ef3e", size = 216939, upload-time = "2025-08-17T00:24:53.171Z" }, - { url = "https://files.pythonhosted.org/packages/06/7f/df11131483698660f94d3c847dc76461369782d7a7644fcd72ac90da8fd0/coverage-7.10.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9a4c0d84134797b7bf3f080599d0cd501471f6c98b715405166860d79cfaa97e", size = 248429, upload-time = "2025-08-17T00:24:54.934Z" }, - { url = "https://files.pythonhosted.org/packages/eb/fa/13ac5eda7300e160bf98f082e75f5c5b4189bf3a883dd1ee42dbedfdc617/coverage-7.10.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7c155fc0f9cee8c9803ea0ad153ab6a3b956baa5d4cd993405dc0b45b2a0b9e0", size = 251178, upload-time = "2025-08-17T00:24:56.353Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bc/f63b56a58ad0bec68a840e7be6b7ed9d6f6288d790760647bb88f5fea41e/coverage-7.10.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5f2ab6e451d4b07855d8bcf063adf11e199bff421a4ba57f5bb95b7444ca62", size = 252313, upload-time = "2025-08-17T00:24:57.692Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b6/79338f1ea27b01266f845afb4485976211264ab92407d1c307babe3592a7/coverage-7.10.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:685b67d99b945b0c221be0780c336b303a7753b3e0ec0d618c795aada25d5e7a", size = 250230, upload-time = "2025-08-17T00:24:59.293Z" }, - { url = "https://files.pythonhosted.org/packages/bc/93/3b24f1da3e0286a4dc5832427e1d448d5296f8287464b1ff4a222abeeeb5/coverage-7.10.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0c079027e50c2ae44da51c2e294596cbc9dbb58f7ca45b30651c7e411060fc23", size = 248351, upload-time = "2025-08-17T00:25:00.676Z" }, - { url = "https://files.pythonhosted.org/packages/de/5f/d59412f869e49dcc5b89398ef3146c8bfaec870b179cc344d27932e0554b/coverage-7.10.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3749aa72b93ce516f77cf5034d8e3c0dfd45c6e8a163a602ede2dc5f9a0bb927", size = 249788, upload-time = "2025-08-17T00:25:02.354Z" }, - { url = "https://files.pythonhosted.org/packages/cc/52/04a3b733f40a0cc7c4a5b9b010844111dbf906df3e868b13e1ce7b39ac31/coverage-7.10.4-cp312-cp312-win32.whl", hash = "sha256:fecb97b3a52fa9bcd5a7375e72fae209088faf671d39fae67261f37772d5559a", size = 219131, upload-time = "2025-08-17T00:25:03.79Z" }, - { url = "https://files.pythonhosted.org/packages/83/dd/12909fc0b83888197b3ec43a4ac7753589591c08d00d9deda4158df2734e/coverage-7.10.4-cp312-cp312-win_amd64.whl", hash = "sha256:26de58f355626628a21fe6a70e1e1fad95702dafebfb0685280962ae1449f17b", size = 219939, upload-time = "2025-08-17T00:25:05.494Z" }, - { url = "https://files.pythonhosted.org/packages/83/c7/058bb3220fdd6821bada9685eadac2940429ab3c97025ce53549ff423cc1/coverage-7.10.4-cp312-cp312-win_arm64.whl", hash = "sha256:67e8885408f8325198862bc487038a4980c9277d753cb8812510927f2176437a", size = 218572, upload-time = "2025-08-17T00:25:06.897Z" }, - { url = "https://files.pythonhosted.org/packages/46/b0/4a3662de81f2ed792a4e425d59c4ae50d8dd1d844de252838c200beed65a/coverage-7.10.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b8e1d2015d5dfdbf964ecef12944c0c8c55b885bb5c0467ae8ef55e0e151233", size = 216735, upload-time = "2025-08-17T00:25:08.617Z" }, - { url = "https://files.pythonhosted.org/packages/c5/e8/e2dcffea01921bfffc6170fb4406cffb763a3b43a047bbd7923566708193/coverage-7.10.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:25735c299439018d66eb2dccf54f625aceb78645687a05f9f848f6e6c751e169", size = 216982, upload-time = "2025-08-17T00:25:10.384Z" }, - { url = "https://files.pythonhosted.org/packages/9d/59/cc89bb6ac869704d2781c2f5f7957d07097c77da0e8fdd4fd50dbf2ac9c0/coverage-7.10.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:715c06cb5eceac4d9b7cdf783ce04aa495f6aff657543fea75c30215b28ddb74", size = 247981, upload-time = "2025-08-17T00:25:11.854Z" }, - { url = "https://files.pythonhosted.org/packages/aa/23/3da089aa177ceaf0d3f96754ebc1318597822e6387560914cc480086e730/coverage-7.10.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e017ac69fac9aacd7df6dc464c05833e834dc5b00c914d7af9a5249fcccf07ef", size = 250584, upload-time = "2025-08-17T00:25:13.483Z" }, - { url = "https://files.pythonhosted.org/packages/ad/82/e8693c368535b4e5fad05252a366a1794d481c79ae0333ed943472fd778d/coverage-7.10.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bad180cc40b3fccb0f0e8c702d781492654ac2580d468e3ffc8065e38c6c2408", size = 251856, upload-time = "2025-08-17T00:25:15.27Z" }, - { url = "https://files.pythonhosted.org/packages/56/19/8b9cb13292e602fa4135b10a26ac4ce169a7fc7c285ff08bedd42ff6acca/coverage-7.10.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:becbdcd14f685fada010a5f792bf0895675ecf7481304fe159f0cd3f289550bd", size = 250015, upload-time = "2025-08-17T00:25:16.759Z" }, - { url = "https://files.pythonhosted.org/packages/10/e7/e5903990ce089527cf1c4f88b702985bd65c61ac245923f1ff1257dbcc02/coverage-7.10.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0b485ca21e16a76f68060911f97ebbe3e0d891da1dbbce6af7ca1ab3f98b9097", size = 247908, upload-time = "2025-08-17T00:25:18.232Z" }, - { url = "https://files.pythonhosted.org/packages/dd/c9/7d464f116df1df7fe340669af1ddbe1a371fc60f3082ff3dc837c4f1f2ab/coverage-7.10.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6c1d098ccfe8e1e0a1ed9a0249138899948afd2978cbf48eb1cc3fcd38469690", size = 249525, upload-time = "2025-08-17T00:25:20.141Z" }, - { url = "https://files.pythonhosted.org/packages/ce/42/722e0cdbf6c19e7235c2020837d4e00f3b07820fd012201a983238cc3a30/coverage-7.10.4-cp313-cp313-win32.whl", hash = "sha256:8630f8af2ca84b5c367c3df907b1706621abe06d6929f5045fd628968d421e6e", size = 219173, upload-time = "2025-08-17T00:25:21.56Z" }, - { url = "https://files.pythonhosted.org/packages/97/7e/aa70366f8275955cd51fa1ed52a521c7fcebcc0fc279f53c8c1ee6006dfe/coverage-7.10.4-cp313-cp313-win_amd64.whl", hash = "sha256:f68835d31c421736be367d32f179e14ca932978293fe1b4c7a6a49b555dff5b2", size = 219969, upload-time = "2025-08-17T00:25:23.501Z" }, - { url = "https://files.pythonhosted.org/packages/ac/96/c39d92d5aad8fec28d4606556bfc92b6fee0ab51e4a548d9b49fb15a777c/coverage-7.10.4-cp313-cp313-win_arm64.whl", hash = "sha256:6eaa61ff6724ca7ebc5326d1fae062d85e19b38dd922d50903702e6078370ae7", size = 218601, upload-time = "2025-08-17T00:25:25.295Z" }, - { url = "https://files.pythonhosted.org/packages/79/13/34d549a6177bd80fa5db758cb6fd3057b7ad9296d8707d4ab7f480b0135f/coverage-7.10.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:702978108876bfb3d997604930b05fe769462cc3000150b0e607b7b444f2fd84", size = 217445, upload-time = "2025-08-17T00:25:27.129Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c0/433da866359bf39bf595f46d134ff2d6b4293aeea7f3328b6898733b0633/coverage-7.10.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e8f978e8c5521d9c8f2086ac60d931d583fab0a16f382f6eb89453fe998e2484", size = 217676, upload-time = "2025-08-17T00:25:28.641Z" }, - { url = "https://files.pythonhosted.org/packages/7e/d7/2b99aa8737f7801fd95222c79a4ebc8c5dd4460d4bed7ef26b17a60c8d74/coverage-7.10.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:df0ac2ccfd19351411c45e43ab60932b74472e4648b0a9edf6a3b58846e246a9", size = 259002, upload-time = "2025-08-17T00:25:30.065Z" }, - { url = "https://files.pythonhosted.org/packages/08/cf/86432b69d57debaef5abf19aae661ba8f4fcd2882fa762e14added4bd334/coverage-7.10.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:73a0d1aaaa3796179f336448e1576a3de6fc95ff4f07c2d7251d4caf5d18cf8d", size = 261178, upload-time = "2025-08-17T00:25:31.517Z" }, - { url = "https://files.pythonhosted.org/packages/23/78/85176593f4aa6e869cbed7a8098da3448a50e3fac5cb2ecba57729a5220d/coverage-7.10.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:873da6d0ed6b3ffc0bc01f2c7e3ad7e2023751c0d8d86c26fe7322c314b031dc", size = 263402, upload-time = "2025-08-17T00:25:33.339Z" }, - { url = "https://files.pythonhosted.org/packages/88/1d/57a27b6789b79abcac0cc5805b31320d7a97fa20f728a6a7c562db9a3733/coverage-7.10.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c6446c75b0e7dda5daa876a1c87b480b2b52affb972fedd6c22edf1aaf2e00ec", size = 260957, upload-time = "2025-08-17T00:25:34.795Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e5/3e5ddfd42835c6def6cd5b2bdb3348da2e34c08d9c1211e91a49e9fd709d/coverage-7.10.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6e73933e296634e520390c44758d553d3b573b321608118363e52113790633b9", size = 258718, upload-time = "2025-08-17T00:25:36.259Z" }, - { url = "https://files.pythonhosted.org/packages/1a/0b/d364f0f7ef111615dc4e05a6ed02cac7b6f2ac169884aa57faeae9eb5fa0/coverage-7.10.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52073d4b08d2cb571234c8a71eb32af3c6923149cf644a51d5957ac128cf6aa4", size = 259848, upload-time = "2025-08-17T00:25:37.754Z" }, - { url = "https://files.pythonhosted.org/packages/10/c6/bbea60a3b309621162e53faf7fac740daaf083048ea22077418e1ecaba3f/coverage-7.10.4-cp313-cp313t-win32.whl", hash = "sha256:e24afb178f21f9ceb1aefbc73eb524769aa9b504a42b26857243f881af56880c", size = 219833, upload-time = "2025-08-17T00:25:39.252Z" }, - { url = "https://files.pythonhosted.org/packages/44/a5/f9f080d49cfb117ddffe672f21eab41bd23a46179a907820743afac7c021/coverage-7.10.4-cp313-cp313t-win_amd64.whl", hash = "sha256:be04507ff1ad206f4be3d156a674e3fb84bbb751ea1b23b142979ac9eebaa15f", size = 220897, upload-time = "2025-08-17T00:25:40.772Z" }, - { url = "https://files.pythonhosted.org/packages/46/89/49a3fc784fa73d707f603e586d84a18c2e7796707044e9d73d13260930b7/coverage-7.10.4-cp313-cp313t-win_arm64.whl", hash = "sha256:f3e3ff3f69d02b5dad67a6eac68cc9c71ae343b6328aae96e914f9f2f23a22e2", size = 219160, upload-time = "2025-08-17T00:25:42.229Z" }, - { url = "https://files.pythonhosted.org/packages/b5/22/525f84b4cbcff66024d29f6909d7ecde97223f998116d3677cfba0d115b5/coverage-7.10.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a59fe0af7dd7211ba595cf7e2867458381f7e5d7b4cffe46274e0b2f5b9f4eb4", size = 216717, upload-time = "2025-08-17T00:25:43.875Z" }, - { url = "https://files.pythonhosted.org/packages/a6/58/213577f77efe44333a416d4bcb251471e7f64b19b5886bb515561b5ce389/coverage-7.10.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3a6c35c5b70f569ee38dc3350cd14fdd0347a8b389a18bb37538cc43e6f730e6", size = 216994, upload-time = "2025-08-17T00:25:45.405Z" }, - { url = "https://files.pythonhosted.org/packages/17/85/34ac02d0985a09472f41b609a1d7babc32df87c726c7612dc93d30679b5a/coverage-7.10.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:acb7baf49f513554c4af6ef8e2bd6e8ac74e6ea0c7386df8b3eb586d82ccccc4", size = 248038, upload-time = "2025-08-17T00:25:46.981Z" }, - { url = "https://files.pythonhosted.org/packages/47/4f/2140305ec93642fdaf988f139813629cbb6d8efa661b30a04b6f7c67c31e/coverage-7.10.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a89afecec1ed12ac13ed203238b560cbfad3522bae37d91c102e690b8b1dc46c", size = 250575, upload-time = "2025-08-17T00:25:48.613Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b5/41b5784180b82a083c76aeba8f2c72ea1cb789e5382157b7dc852832aea2/coverage-7.10.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:480442727f464407d8ade6e677b7f21f3b96a9838ab541b9a28ce9e44123c14e", size = 251927, upload-time = "2025-08-17T00:25:50.881Z" }, - { url = "https://files.pythonhosted.org/packages/78/ca/c1dd063e50b71f5aea2ebb27a1c404e7b5ecf5714c8b5301f20e4e8831ac/coverage-7.10.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a89bf193707f4a17f1ed461504031074d87f035153239f16ce86dfb8f8c7ac76", size = 249930, upload-time = "2025-08-17T00:25:52.422Z" }, - { url = "https://files.pythonhosted.org/packages/8d/66/d8907408612ffee100d731798e6090aedb3ba766ecf929df296c1a7ee4fb/coverage-7.10.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:3ddd912c2fc440f0fb3229e764feec85669d5d80a988ff1b336a27d73f63c818", size = 247862, upload-time = "2025-08-17T00:25:54.316Z" }, - { url = "https://files.pythonhosted.org/packages/29/db/53cd8ec8b1c9c52d8e22a25434785bfc2d1e70c0cfb4d278a1326c87f741/coverage-7.10.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8a538944ee3a42265e61c7298aeba9ea43f31c01271cf028f437a7b4075592cf", size = 249360, upload-time = "2025-08-17T00:25:55.833Z" }, - { url = "https://files.pythonhosted.org/packages/4f/75/5ec0a28ae4a0804124ea5a5becd2b0fa3adf30967ac656711fb5cdf67c60/coverage-7.10.4-cp314-cp314-win32.whl", hash = "sha256:fd2e6002be1c62476eb862b8514b1ba7e7684c50165f2a8d389e77da6c9a2ebd", size = 219449, upload-time = "2025-08-17T00:25:57.984Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ab/66e2ee085ec60672bf5250f11101ad8143b81f24989e8c0e575d16bb1e53/coverage-7.10.4-cp314-cp314-win_amd64.whl", hash = "sha256:ec113277f2b5cf188d95fb66a65c7431f2b9192ee7e6ec9b72b30bbfb53c244a", size = 220246, upload-time = "2025-08-17T00:25:59.868Z" }, - { url = "https://files.pythonhosted.org/packages/37/3b/00b448d385f149143190846217797d730b973c3c0ec2045a7e0f5db3a7d0/coverage-7.10.4-cp314-cp314-win_arm64.whl", hash = "sha256:9744954bfd387796c6a091b50d55ca7cac3d08767795b5eec69ad0f7dbf12d38", size = 218825, upload-time = "2025-08-17T00:26:01.44Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2e/55e20d3d1ce00b513efb6fd35f13899e1c6d4f76c6cbcc9851c7227cd469/coverage-7.10.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5af4829904dda6aabb54a23879f0f4412094ba9ef153aaa464e3c1b1c9bc98e6", size = 217462, upload-time = "2025-08-17T00:26:03.014Z" }, - { url = "https://files.pythonhosted.org/packages/47/b3/aab1260df5876f5921e2c57519e73a6f6eeacc0ae451e109d44ee747563e/coverage-7.10.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7bba5ed85e034831fac761ae506c0644d24fd5594727e174b5a73aff343a7508", size = 217675, upload-time = "2025-08-17T00:26:04.606Z" }, - { url = "https://files.pythonhosted.org/packages/67/23/1cfe2aa50c7026180989f0bfc242168ac7c8399ccc66eb816b171e0ab05e/coverage-7.10.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d57d555b0719834b55ad35045de6cc80fc2b28e05adb6b03c98479f9553b387f", size = 259176, upload-time = "2025-08-17T00:26:06.159Z" }, - { url = "https://files.pythonhosted.org/packages/9d/72/5882b6aeed3f9de7fc4049874fd7d24213bf1d06882f5c754c8a682606ec/coverage-7.10.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ba62c51a72048bb1ea72db265e6bd8beaabf9809cd2125bbb5306c6ce105f214", size = 261341, upload-time = "2025-08-17T00:26:08.137Z" }, - { url = "https://files.pythonhosted.org/packages/1b/70/a0c76e3087596ae155f8e71a49c2c534c58b92aeacaf4d9d0cbbf2dde53b/coverage-7.10.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0acf0c62a6095f07e9db4ec365cc58c0ef5babb757e54745a1aa2ea2a2564af1", size = 263600, upload-time = "2025-08-17T00:26:11.045Z" }, - { url = "https://files.pythonhosted.org/packages/cb/5f/27e4cd4505b9a3c05257fb7fc509acbc778c830c450cb4ace00bf2b7bda7/coverage-7.10.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1033bf0f763f5cf49ffe6594314b11027dcc1073ac590b415ea93463466deec", size = 261036, upload-time = "2025-08-17T00:26:12.693Z" }, - { url = "https://files.pythonhosted.org/packages/02/d6/cf2ae3a7f90ab226ea765a104c4e76c5126f73c93a92eaea41e1dc6a1892/coverage-7.10.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:92c29eff894832b6a40da1789b1f252305af921750b03ee4535919db9179453d", size = 258794, upload-time = "2025-08-17T00:26:14.261Z" }, - { url = "https://files.pythonhosted.org/packages/9e/b1/39f222eab0d78aa2001cdb7852aa1140bba632db23a5cfd832218b496d6c/coverage-7.10.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:822c4c830989c2093527e92acd97be4638a44eb042b1bdc0e7a278d84a070bd3", size = 259946, upload-time = "2025-08-17T00:26:15.899Z" }, - { url = "https://files.pythonhosted.org/packages/74/b2/49d82acefe2fe7c777436a3097f928c7242a842538b190f66aac01f29321/coverage-7.10.4-cp314-cp314t-win32.whl", hash = "sha256:e694d855dac2e7cf194ba33653e4ba7aad7267a802a7b3fc4347d0517d5d65cd", size = 220226, upload-time = "2025-08-17T00:26:17.566Z" }, - { url = "https://files.pythonhosted.org/packages/06/b0/afb942b6b2fc30bdbc7b05b087beae11c2b0daaa08e160586cf012b6ad70/coverage-7.10.4-cp314-cp314t-win_amd64.whl", hash = "sha256:efcc54b38ef7d5bfa98050f220b415bc5bb3d432bd6350a861cf6da0ede2cdcd", size = 221346, upload-time = "2025-08-17T00:26:19.311Z" }, - { url = "https://files.pythonhosted.org/packages/d8/66/e0531c9d1525cb6eac5b5733c76f27f3053ee92665f83f8899516fea6e76/coverage-7.10.4-cp314-cp314t-win_arm64.whl", hash = "sha256:6f3a3496c0fa26bfac4ebc458747b778cff201c8ae94fa05e1391bab0dbc473c", size = 219368, upload-time = "2025-08-17T00:26:21.011Z" }, - { url = "https://files.pythonhosted.org/packages/d1/61/4e38d86d31a268778d69bb3fd1fc88e0c7a78ffdee48f2b5d9e028a3dce5/coverage-7.10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48fd4d52600c2a9d5622e52dfae674a7845c5e1dceaf68b88c99feb511fbcfd6", size = 216393, upload-time = "2025-08-17T00:26:22.648Z" }, - { url = "https://files.pythonhosted.org/packages/17/16/5c2fdb1d213f57e0ff107738397aff68582fa90a6575ca165b49eae5a809/coverage-7.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:56217b470d09d69e6b7dcae38200f95e389a77db801cb129101697a4553b18b6", size = 216779, upload-time = "2025-08-17T00:26:24.422Z" }, - { url = "https://files.pythonhosted.org/packages/26/99/3aca6b4028e3667ccfbaef9cfd9dca8d85eb14deee7868373cc48cbee553/coverage-7.10.4-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:44ac3f21a6e28c5ff7f7a47bca5f87885f6a1e623e637899125ba47acd87334d", size = 243214, upload-time = "2025-08-17T00:26:26.468Z" }, - { url = "https://files.pythonhosted.org/packages/0d/33/27a7d2557f85001b2edb6a2f14037851f87ca7d69a4ca79460e1859f4c7f/coverage-7.10.4-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3387739d72c84d17b4d2f7348749cac2e6700e7152026912b60998ee9a40066b", size = 245037, upload-time = "2025-08-17T00:26:28.071Z" }, - { url = "https://files.pythonhosted.org/packages/6d/68/92c0e18d36d34c774cb5053c9413188c27f8b3f9587e315193a30c1695ce/coverage-7.10.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f111ff20d9a6348e0125be892608e33408dd268f73b020940dfa8511ad05503", size = 246809, upload-time = "2025-08-17T00:26:29.828Z" }, - { url = "https://files.pythonhosted.org/packages/03/22/f0618594010903401e782459c100755af3f275ea86d49b0d4f3afa3658d9/coverage-7.10.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:01a852f0a9859734b018a3f483cc962d0b381d48d350b1a0c47d618c73a0c398", size = 244695, upload-time = "2025-08-17T00:26:31.495Z" }, - { url = "https://files.pythonhosted.org/packages/e5/45/e704923a037a4a38a3c13ae6405c31236db2d274307ab28fd1a23b961cad/coverage-7.10.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:225111dd06759ba4e37cee4c0b4f3df2b15c879e9e3c37bf986389300b9917c3", size = 242766, upload-time = "2025-08-17T00:26:33.425Z" }, - { url = "https://files.pythonhosted.org/packages/e4/b7/4dc6f2b41aa907ae330ed841deb49c9487f6ec5072a577fc3a3b284fe855/coverage-7.10.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2178d4183bd1ba608f0bb12e71e55838ba1b7dbb730264f8b08de9f8ef0c27d0", size = 243723, upload-time = "2025-08-17T00:26:35.688Z" }, - { url = "https://files.pythonhosted.org/packages/b7/62/0e58abc2ce2d9a5b906dd1c08802864f756365843c413aebf0184148ddfb/coverage-7.10.4-cp39-cp39-win32.whl", hash = "sha256:93d175fe81913aee7a6ea430abbdf2a79f1d9fd451610e12e334e4fe3264f563", size = 218927, upload-time = "2025-08-17T00:26:37.725Z" }, - { url = "https://files.pythonhosted.org/packages/a4/3e/4668a5b5601450d9c8aa71cc4f7e6c6c259350e577c758b894443598322a/coverage-7.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:2221a823404bb941c7721cf0ef55ac6ee5c25d905beb60c0bba5e5e85415d353", size = 219838, upload-time = "2025-08-17T00:26:39.786Z" }, - { url = "https://files.pythonhosted.org/packages/bb/78/983efd23200921d9edb6bd40512e1aa04af553d7d5a171e50f9b2b45d109/coverage-7.10.4-py3-none-any.whl", hash = "sha256:065d75447228d05121e5c938ca8f0e91eed60a1eb2d1258d42d5084fecfc3302", size = 208365, upload-time = "2025-08-17T00:26:41.479Z" }, +version = "7.10.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, + { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, + { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, + { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, + { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, + { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, + { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, + { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, + { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, + { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, + { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, + { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, + { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, + { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, + { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, ] [package.optional-dependencies] @@ -690,6 +795,58 @@ toml = [ { name = "tomli", marker = "python_full_version <= '3.11'" }, ] +[[package]] +name = "crc32c" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/4c/4e40cc26347ac8254d3f25b9f94710b8e8df24ee4dddc1ba41907a88a94d/crc32c-2.7.1.tar.gz", hash = "sha256:f91b144a21eef834d64178e01982bb9179c354b3e9e5f4c803b0e5096384968c", size = 45712, upload-time = "2024-09-24T06:20:17.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/fd/8972a70d7c39f37240f554c348fd9e15a4d8d0a548b1bc3139cd4e1cfb66/crc32c-2.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f0fadc741e79dc705e2d9ee967473e8a061d26b04310ed739f1ee292f33674f", size = 54110, upload-time = "2024-09-24T06:18:06.758Z" }, + { url = "https://files.pythonhosted.org/packages/35/be/0b045f84c7acc36312a91211190bf84e73a0bbd30f21cbaf3670c4dba9b2/crc32c-2.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91ced31055d26d59385d708bbd36689e1a1d604d4b0ceb26767eb5a83156f85d", size = 51792, upload-time = "2024-09-24T06:18:07.767Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e2/acaabbc172b7c45ec62f273cd2e214f626e2b4324eca9152dea6095a26f4/crc32c-2.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ffa999b72e3c17f6a066ae9e970b40f8c65f38716e436c39a33b809bc6ed9f", size = 52884, upload-time = "2024-09-24T06:18:09.449Z" }, + { url = "https://files.pythonhosted.org/packages/60/40/963ba3d2ec0d8e4a2ceaf90e8f9cb10911a926fe75d4329e013a51343122/crc32c-2.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e80114dd7f462297e54d5da1b9ff472e5249c5a2b406aa51c371bb0edcbf76bd", size = 53888, upload-time = "2024-09-24T06:18:11.039Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b8/8a093b9dc1792b2cec9805e1428e97be0338a45ac9fae2fd5911613eacb1/crc32c-2.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:676f5b46da268b5190f9fb91b3f037a00d114b411313664438525db876adc71f", size = 52098, upload-time = "2024-09-24T06:18:12.522Z" }, + { url = "https://files.pythonhosted.org/packages/26/76/a254ddb4ae83b545f6e08af384d62268a99d00f5c58a468754f8416468ce/crc32c-2.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8d0e660c9ed269e90692993a4457a932fc22c9cc96caf79dd1f1a84da85bb312", size = 52716, upload-time = "2024-09-24T06:18:14.118Z" }, + { url = "https://files.pythonhosted.org/packages/b6/cb/6062806e5b6cb8d9af3c62945a5a07fa22c3b4dc59084d2fa2e533f9aaa1/crc32c-2.7.1-cp310-cp310-win32.whl", hash = "sha256:17a2c3f8c6d85b04b5511af827b5dbbda4e672d188c0b9f20a8156e93a1aa7b6", size = 38363, upload-time = "2024-09-24T06:18:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a9/dc935e26c8d7bd4722bc1312ed88f443e6e36816b46835b4464baa3f7c6d/crc32c-2.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3208764c29688f91a35392073229975dd7687b6cb9f76b919dae442cabcd5126", size = 39795, upload-time = "2024-09-24T06:18:17.182Z" }, + { url = "https://files.pythonhosted.org/packages/aa/92/c878aaba81c431fcd93a059e9f6c90db397c585742793f0bf6e0c531cc67/crc32c-2.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96b794fd11945298fdd5eb1290a812efb497c14bc42592c5c992ca077458eeba", size = 54879, upload-time = "2024-09-24T06:18:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f5/ab828ab3907095e06b18918408748950a9f726ee2b37be1b0839fb925ee1/crc32c-2.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df7194dd3c0efb5a21f5d70595b7a8b4fd9921fbbd597d6d8e7a11eca3e2d27", size = 52588, upload-time = "2024-09-24T06:18:24.463Z" }, + { url = "https://files.pythonhosted.org/packages/6a/2b/9e29e9ac4c4213d60491db09487125db358cd9263490fbadbd55e48fbe03/crc32c-2.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d698eec444b18e296a104d0b9bb6c596c38bdcb79d24eba49604636e9d747305", size = 53674, upload-time = "2024-09-24T06:18:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/79/ed/df3c4c14bf1b29f5c9b52d51fb6793e39efcffd80b2941d994e8f7f5f688/crc32c-2.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e07cf10ef852d219d179333fd706d1c415626f1f05e60bd75acf0143a4d8b225", size = 54691, upload-time = "2024-09-24T06:18:26.578Z" }, + { url = "https://files.pythonhosted.org/packages/0c/47/4917af3c9c1df2fff28bbfa6492673c9adeae5599dcc207bbe209847489c/crc32c-2.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d2a051f296e6e92e13efee3b41db388931cdb4a2800656cd1ed1d9fe4f13a086", size = 52896, upload-time = "2024-09-24T06:18:28.174Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6f/26fc3dda5835cda8f6cd9d856afe62bdeae428de4c34fea200b0888e8835/crc32c-2.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1738259802978cdf428f74156175da6a5fdfb7256f647fdc0c9de1bc6cd7173", size = 53554, upload-time = "2024-09-24T06:18:29.104Z" }, + { url = "https://files.pythonhosted.org/packages/56/3e/6f39127f7027c75d130c0ba348d86a6150dff23761fbc6a5f71659f4521e/crc32c-2.7.1-cp311-cp311-win32.whl", hash = "sha256:f7786d219a1a1bf27d0aa1869821d11a6f8e90415cfffc1e37791690d4a848a1", size = 38370, upload-time = "2024-09-24T06:18:30.013Z" }, + { url = "https://files.pythonhosted.org/packages/c9/fb/1587c2705a3a47a3d0067eecf9a6fec510761c96dec45c7b038fb5c8ff46/crc32c-2.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:887f6844bb3ad35f0778cd10793ad217f7123a5422e40041231b8c4c7329649d", size = 39795, upload-time = "2024-09-24T06:18:31.324Z" }, + { url = "https://files.pythonhosted.org/packages/4d/41/4aedc961893f26858ab89fc772d0eaba91f9870f19eaa933999dcacb94ec/crc32c-2.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ef661b34e9f25991fface7f9ad85e81bbc1b3fe3b916fd58c893eabe2fa0b8", size = 54675, upload-time = "2024-09-24T06:18:35.954Z" }, + { url = "https://files.pythonhosted.org/packages/d6/63/8cabf09b7e39b9fec8f7010646c8b33057fc8d67e6093b3cc15563d23533/crc32c-2.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571aa4429444b5d7f588e4377663592145d2d25eb1635abb530f1281794fc7c9", size = 52386, upload-time = "2024-09-24T06:18:36.896Z" }, + { url = "https://files.pythonhosted.org/packages/79/13/13576941bf7cf95026abae43d8427c812c0054408212bf8ed490eda846b0/crc32c-2.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02a3bd67dea95cdb25844aaf44ca2e1b0c1fd70b287ad08c874a95ef4bb38db", size = 53495, upload-time = "2024-09-24T06:18:38.099Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b6/55ffb26d0517d2d6c6f430ce2ad36ae7647c995c5bfd7abce7f32bb2bad1/crc32c-2.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d17637c4867672cb8adeea007294e3c3df9d43964369516cfe2c1f47ce500a", size = 54456, upload-time = "2024-09-24T06:18:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1a/5562e54cb629ecc5543d3604dba86ddfc7c7b7bf31d64005b38a00d31d31/crc32c-2.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4a400ac3c69a32e180d8753fd7ec7bccb80ade7ab0812855dce8a208e72495f", size = 52647, upload-time = "2024-09-24T06:18:40.021Z" }, + { url = "https://files.pythonhosted.org/packages/48/ec/ce4138eaf356cd9aae60bbe931755e5e0151b3eca5f491fce6c01b97fd59/crc32c-2.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:588587772e55624dd9c7a906ec9e8773ae0b6ac5e270fc0bc84ee2758eba90d5", size = 53332, upload-time = "2024-09-24T06:18:40.925Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b5/144b42cd838a901175a916078781cb2c3c9f977151c9ba085aebd6d15b22/crc32c-2.7.1-cp312-cp312-win32.whl", hash = "sha256:9f14b60e5a14206e8173dd617fa0c4df35e098a305594082f930dae5488da428", size = 38371, upload-time = "2024-09-24T06:18:42.711Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c4/7929dcd5d9b57db0cce4fe6f6c191049380fc6d8c9b9f5581967f4ec018e/crc32c-2.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:7c810a246660a24dc818047dc5f89c7ce7b2814e1e08a8e99993f4103f7219e8", size = 39805, upload-time = "2024-09-24T06:18:43.6Z" }, + { url = "https://files.pythonhosted.org/packages/a9/0d/3e797d1ed92d357a6a4c5b41cea15a538b27a8fdf18c7863747eb50b73ad/crc32c-2.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c277f9d16a3283e064d54854af0976b72abaa89824955579b2b3f37444f89aae", size = 54641, upload-time = "2024-09-24T06:18:47.207Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/4ddeef755caaa75680c559562b6c71f5910fee4c4f3a2eb5ea8b57f0e48c/crc32c-2.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881af0478a01331244e27197356929edbdeaef6a9f81b5c6bacfea18d2139289", size = 52338, upload-time = "2024-09-24T06:18:49.31Z" }, + { url = "https://files.pythonhosted.org/packages/01/cf/32f019be5de9f6e180926a50ee5f08648e686c7d9a59f2c5d0806a77b1c7/crc32c-2.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724d5ff4d29ff093a983ae656be3307093706d850ea2a233bf29fcacc335d945", size = 53447, upload-time = "2024-09-24T06:18:50.296Z" }, + { url = "https://files.pythonhosted.org/packages/b2/8b/92f3f62f3bafe8f7ab4af7bfb7246dc683fd11ec0d6dfb73f91e09079f69/crc32c-2.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2416c4d88696ac322632555c0f81ab35e15f154bc96055da6cf110d642dbc10", size = 54484, upload-time = "2024-09-24T06:18:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/98/b2/113a50f8781f76af5ac65ffdb907e72bddbe974de8e02247f0d58bc48040/crc32c-2.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:60254251b88ec9b9795215f0f9ec015a6b5eef8b2c5fba1267c672d83c78fc02", size = 52703, upload-time = "2024-09-24T06:18:52.488Z" }, + { url = "https://files.pythonhosted.org/packages/b4/6c/309229e9acda8cf36a8ff4061d70b54d905f79b7037e16883ce6590a24ab/crc32c-2.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:edefc0e46f3c37372183f70338e5bdee42f6789b62fcd36ec53aa933e9dfbeaf", size = 53367, upload-time = "2024-09-24T06:18:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/6c6324d920396e1bd9f3efbe8753da071be0ca52bd22d6c82d446b8d6975/crc32c-2.7.1-cp313-cp313-win32.whl", hash = "sha256:813af8111218970fe2adb833c5e5239f091b9c9e76f03b4dd91aaba86e99b499", size = 38377, upload-time = "2024-09-24T06:18:54.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/a0/f01ccfab538db07ef3f6b4ede46357ff147a81dd4f3c59ca6a34c791a549/crc32c-2.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:7d9ede7be8e4ec1c9e90aaf6884decbeef10e3473e6ddac032706d710cab5888", size = 39803, upload-time = "2024-09-24T06:18:55.419Z" }, + { url = "https://files.pythonhosted.org/packages/03/de/fef962e898a953558fe1c55141644553e84ef4190693a31244c59a0856c7/crc32c-2.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03a92551a343702629af91f78d205801219692b6909f8fa126b830e332bfb0e0", size = 54223, upload-time = "2024-09-24T06:18:59.675Z" }, + { url = "https://files.pythonhosted.org/packages/21/14/fceca1a6f45c0a1814fe8602a65657b75c27425162445925ba87438cad6b/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb9424ec1a8ca54763155a703e763bcede82e6569fe94762614bb2de1412d4e1", size = 51588, upload-time = "2024-09-24T06:19:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/13/3b/13d40a7dfbf9ef05c84a0da45544ee72080dca4ce090679e5105689984bd/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88732070f6175530db04e0bb36880ac45c33d49f8ac43fa0e50cfb1830049d23", size = 52678, upload-time = "2024-09-24T06:19:02.661Z" }, + { url = "https://files.pythonhosted.org/packages/36/09/65ffc4fb9fa60ff6714eeb50a92284a4525e5943f0b040b572c0c76368c1/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a20dfc27995f568f64775eea2bbb58ae269f1a1144561df5e4a4955f79db32", size = 53847, upload-time = "2024-09-24T06:19:03.705Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/938e926085b7288da052db7c84416f3ce25e71baf7ab5b63824c7bcb6f22/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f7186d098bfd2cff25eac6880b7c7ad80431b90610036131c1c7dd0eab42a332", size = 51860, upload-time = "2024-09-24T06:19:04.726Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d8/4526d5380189d6f2fa27256c204100f30214fe402f47cf6e9fb9a91ab890/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:55a77e29a265418fa34bef15bd0f2c60afae5348988aaf35ed163b4bbf93cf37", size = 52508, upload-time = "2024-09-24T06:19:05.731Z" }, + { url = "https://files.pythonhosted.org/packages/19/30/15f7e35176488b77e5b88751947d321d603fccac273099ace27c7b2d50a6/crc32c-2.7.1-cp313-cp313t-win32.whl", hash = "sha256:ae38a4b6aa361595d81cab441405fbee905c72273e80a1c010fb878ae77ac769", size = 38319, upload-time = "2024-09-24T06:19:07.233Z" }, + { url = "https://files.pythonhosted.org/packages/19/c4/0b3eee04dac195f4730d102d7a9fbea894ae7a32ce075f84336df96a385d/crc32c-2.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:eee2a43b663feb6c79a6c1c6e5eae339c2b72cfac31ee54ec0209fa736cf7ee5", size = 39781, upload-time = "2024-09-24T06:19:08.182Z" }, + { url = "https://files.pythonhosted.org/packages/03/27/f1dab3066c90e9424d22bc942eecdc2e77267f7e805ddb5a2419bbcbace6/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30004a7383538ef93bda9b22f7b3805bc0aa5625ab2675690e1b676b19417d4b", size = 38184, upload-time = "2024-09-24T06:19:51.466Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f3/479acfa99803c261cdd6b44f37b55bd77bdbce6163ec1f51b2014b095495/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01b0983aa87f517c12418f9898ecf2083bf86f4ea04122e053357c3edb0d73f", size = 38256, upload-time = "2024-09-24T06:19:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/7b/31/4edb9c45457c54d51ca539f850761f31b7ab764177902b6f3247ff8c1b75/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb2b963c42128b38872e9ed63f04a73ce1ff89a1dfad7ea38add6fe6296497b8", size = 37868, upload-time = "2024-09-24T06:19:54.159Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b0/5680db08eff8f2116a4f9bd949f8bbe9cf260e1c3451228f54c60b110d79/crc32c-2.7.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cdd5e576fee5d255c1e68a4dae4420f21e57e6f05900b38d5ae47c713fc3330d", size = 39826, upload-time = "2024-09-24T06:19:55.4Z" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -701,21 +858,21 @@ wheels = [ [[package]] name = "dask" -version = "2024.8.0" +version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "python_full_version < '3.10'" }, - { name = "cloudpickle", marker = "python_full_version < '3.10'" }, - { name = "fsspec", marker = "python_full_version < '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "partd", marker = "python_full_version < '3.10'" }, - { name = "pyyaml", marker = "python_full_version < '3.10'" }, - { name = "toolz", marker = "python_full_version < '3.10'" }, + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1f/2e/568a422d907745a3a897a732c83d05a3923d8cfa2511a6abea2a0e19994e/dask-2024.8.0.tar.gz", hash = "sha256:f1fec39373d2f101bc045529ad4e9b30e34e6eb33b7aa0fa7073aec7b1bf9eee", size = 9895684, upload-time = "2024-08-06T20:23:54.464Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/87/87af914aaf5bfaa0ee8b9da060a836477d8cc49fe4978637da8b6a47d8a3/dask-2025.9.1.tar.gz", hash = "sha256:718df73e1fd3d7e2b8546e0f04ce08e1ed7f9aa3da1eecd0c1f44c8b6d52f7e0", size = 10973663, upload-time = "2025-09-16T10:54:59.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl", hash = "sha256:250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309", size = 1233681, upload-time = "2024-08-06T20:23:42.258Z" }, + { url = "https://files.pythonhosted.org/packages/25/60/3fcd548bed6d25016933e4b2984c9b82e4c1e760380e03d4100b1b4726e0/dask-2025.9.1-py3-none-any.whl", hash = "sha256:2a8a7dc933caaea2f47745a65a6ec93d9e616e12aab53b4f03ee161d31939110", size = 1479274, upload-time = "2025-09-16T10:54:46.159Z" }, ] [[package]] @@ -723,8 +880,8 @@ name = "dataclasses-json" version = "0.6.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow", marker = "python_full_version < '3.10'" }, - { name = "typing-inspect", marker = "python_full_version < '3.10'" }, + { 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 = [ @@ -733,31 +890,31 @@ wheels = [ [[package]] name = "debugpy" -version = "1.8.16" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/d4/722d0bcc7986172ac2ef3c979ad56a1030e3afd44ced136d45f8142b1f4a/debugpy-1.8.16.tar.gz", hash = "sha256:31e69a1feb1cf6b51efbed3f6c9b0ef03bc46ff050679c4be7ea6d2e23540870", size = 1643809, upload-time = "2025-08-06T18:00:02.647Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/fd/f1b75ebc61d90882595b81d808efd3573c082e1c3407850d9dccac4ae904/debugpy-1.8.16-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:2a3958fb9c2f40ed8ea48a0d34895b461de57a1f9862e7478716c35d76f56c65", size = 2085511, upload-time = "2025-08-06T18:00:05.067Z" }, - { url = "https://files.pythonhosted.org/packages/df/5e/c5c1934352871128b30a1a144a58b5baa546e1b57bd47dbed788bad4431c/debugpy-1.8.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5ca7314042e8a614cc2574cd71f6ccd7e13a9708ce3c6d8436959eae56f2378", size = 3562094, upload-time = "2025-08-06T18:00:06.66Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d5/2ebe42377e5a78dc786afc25e61ee83c5628d63f32dfa41092597d52fe83/debugpy-1.8.16-cp310-cp310-win32.whl", hash = "sha256:8624a6111dc312ed8c363347a0b59c5acc6210d897e41a7c069de3c53235c9a6", size = 5234277, upload-time = "2025-08-06T18:00:08.429Z" }, - { url = "https://files.pythonhosted.org/packages/54/f8/e774ad16a60b9913213dbabb7472074c5a7b0d84f07c1f383040a9690057/debugpy-1.8.16-cp310-cp310-win_amd64.whl", hash = "sha256:fee6db83ea5c978baf042440cfe29695e1a5d48a30147abf4c3be87513609817", size = 5266011, upload-time = "2025-08-06T18:00:10.162Z" }, - { url = "https://files.pythonhosted.org/packages/63/d6/ad70ba8b49b23fa286fb21081cf732232cc19374af362051da9c7537ae52/debugpy-1.8.16-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:67371b28b79a6a12bcc027d94a06158f2fde223e35b5c4e0783b6f9d3b39274a", size = 2184063, upload-time = "2025-08-06T18:00:11.885Z" }, - { url = "https://files.pythonhosted.org/packages/aa/49/7b03e88dea9759a4c7910143f87f92beb494daaae25560184ff4ae883f9e/debugpy-1.8.16-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2abae6dd02523bec2dee16bd6b0781cccb53fd4995e5c71cc659b5f45581898", size = 3134837, upload-time = "2025-08-06T18:00:13.782Z" }, - { url = "https://files.pythonhosted.org/packages/5d/52/b348930316921de7565fbe37a487d15409041713004f3d74d03eb077dbd4/debugpy-1.8.16-cp311-cp311-win32.whl", hash = "sha256:f8340a3ac2ed4f5da59e064aa92e39edd52729a88fbde7bbaa54e08249a04493", size = 5159142, upload-time = "2025-08-06T18:00:15.391Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ef/9aa9549ce1e10cea696d980292e71672a91ee4a6a691ce5f8629e8f48c49/debugpy-1.8.16-cp311-cp311-win_amd64.whl", hash = "sha256:70f5fcd6d4d0c150a878d2aa37391c52de788c3dc680b97bdb5e529cb80df87a", size = 5183117, upload-time = "2025-08-06T18:00:17.251Z" }, - { url = "https://files.pythonhosted.org/packages/61/fb/0387c0e108d842c902801bc65ccc53e5b91d8c169702a9bbf4f7efcedf0c/debugpy-1.8.16-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:b202e2843e32e80b3b584bcebfe0e65e0392920dc70df11b2bfe1afcb7a085e4", size = 2511822, upload-time = "2025-08-06T18:00:18.526Z" }, - { url = "https://files.pythonhosted.org/packages/37/44/19e02745cae22bf96440141f94e15a69a1afaa3a64ddfc38004668fcdebf/debugpy-1.8.16-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64473c4a306ba11a99fe0bb14622ba4fbd943eb004847d9b69b107bde45aa9ea", size = 4230135, upload-time = "2025-08-06T18:00:19.997Z" }, - { url = "https://files.pythonhosted.org/packages/f3/0b/19b1ba5ee4412f303475a2c7ad5858efb99c90eae5ec627aa6275c439957/debugpy-1.8.16-cp312-cp312-win32.whl", hash = "sha256:833a61ed446426e38b0dd8be3e9d45ae285d424f5bf6cd5b2b559c8f12305508", size = 5281271, upload-time = "2025-08-06T18:00:21.281Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/bc62e2dc141de53bd03e2c7cb9d7011de2e65e8bdcdaa26703e4d28656ba/debugpy-1.8.16-cp312-cp312-win_amd64.whl", hash = "sha256:75f204684581e9ef3dc2f67687c3c8c183fde2d6675ab131d94084baf8084121", size = 5323149, upload-time = "2025-08-06T18:00:23.033Z" }, - { url = "https://files.pythonhosted.org/packages/62/66/607ab45cc79e60624df386e233ab64a6d8d39ea02e7f80e19c1d451345bb/debugpy-1.8.16-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:85df3adb1de5258dca910ae0bb185e48c98801ec15018a263a92bb06be1c8787", size = 2496157, upload-time = "2025-08-06T18:00:24.361Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a0/c95baae08a75bceabb79868d663a0736655e427ab9c81fb848da29edaeac/debugpy-1.8.16-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee89e948bc236a5c43c4214ac62d28b29388453f5fd328d739035e205365f0b", size = 4222491, upload-time = "2025-08-06T18:00:25.806Z" }, - { url = "https://files.pythonhosted.org/packages/5b/2f/1c8db6ddd8a257c3cd2c46413b267f1d5fa3df910401c899513ce30392d6/debugpy-1.8.16-cp313-cp313-win32.whl", hash = "sha256:cf358066650439847ec5ff3dae1da98b5461ea5da0173d93d5e10f477c94609a", size = 5281126, upload-time = "2025-08-06T18:00:27.207Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ba/c3e154ab307366d6c5a9c1b68de04914e2ce7fa2f50d578311d8cc5074b2/debugpy-1.8.16-cp313-cp313-win_amd64.whl", hash = "sha256:b5aea1083f6f50023e8509399d7dc6535a351cc9f2e8827d1e093175e4d9fa4c", size = 5323094, upload-time = "2025-08-06T18:00:29.03Z" }, - { url = "https://files.pythonhosted.org/packages/35/40/acdad5944e508d5e936979ad3e96e56b78ba6d7fa75aaffc4426cb921e12/debugpy-1.8.16-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:135ccd2b1161bade72a7a099c9208811c137a150839e970aeaf121c2467debe8", size = 2086696, upload-time = "2025-08-06T18:00:36.469Z" }, - { url = "https://files.pythonhosted.org/packages/2d/eb/8d6a2cf3b29e272b5dfebe6f384f8457977d4fd7a02dab2cae4d421dbae2/debugpy-1.8.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:211238306331a9089e253fd997213bc4a4c65f949271057d6695953254095376", size = 3557329, upload-time = "2025-08-06T18:00:38.189Z" }, - { url = "https://files.pythonhosted.org/packages/00/7b/63b9cc4d3c6980c702911c0f6a9748933ce4e4f16ae0ec4fdef7690f6662/debugpy-1.8.16-cp39-cp39-win32.whl", hash = "sha256:88eb9ffdfb59bf63835d146c183d6dba1f722b3ae2a5f4b9fc03e925b3358922", size = 5235114, upload-time = "2025-08-06T18:00:39.586Z" }, - { url = "https://files.pythonhosted.org/packages/05/cf/80947f57e0ef4d6e33ec9c3a109a542678eba465723bf8b599719238eb93/debugpy-1.8.16-cp39-cp39-win_amd64.whl", hash = "sha256:c2c47c2e52b40449552843b913786499efcc3dbc21d6c49287d939cd0dbc49fd", size = 5266799, upload-time = "2025-08-06T18:00:41.013Z" }, - { url = "https://files.pythonhosted.org/packages/52/57/ecc9ae29fa5b2d90107cd1d9bf8ed19aacb74b2264d986ae9d44fe9bdf87/debugpy-1.8.16-py2.py3-none-any.whl", hash = "sha256:19c9521962475b87da6f673514f7fd610328757ec993bf7ec0d8c96f9a325f9e", size = 5287700, upload-time = "2025-08-06T18:00:42.333Z" }, +version = "1.8.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129, upload-time = "2025-09-17T16:33:20.633Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/36/b57c6e818d909f6e59c0182252921cf435e0951126a97e11de37e72ab5e1/debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542", size = 2098021, upload-time = "2025-09-17T16:33:22.556Z" }, + { url = "https://files.pythonhosted.org/packages/be/01/0363c7efdd1e9febd090bb13cee4fb1057215b157b2979a4ca5ccb678217/debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3", size = 3087399, upload-time = "2025-09-17T16:33:24.292Z" }, + { url = "https://files.pythonhosted.org/packages/79/bc/4a984729674aa9a84856650438b9665f9a1d5a748804ac6f37932ce0d4aa/debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4", size = 5230292, upload-time = "2025-09-17T16:33:26.137Z" }, + { url = "https://files.pythonhosted.org/packages/5d/19/2b9b3092d0cf81a5aa10c86271999453030af354d1a5a7d6e34c574515d7/debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a", size = 5261885, upload-time = "2025-09-17T16:33:27.592Z" }, + { url = "https://files.pythonhosted.org/packages/d8/53/3af72b5c159278c4a0cf4cffa518675a0e73bdb7d1cac0239b815502d2ce/debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840", size = 2207154, upload-time = "2025-09-17T16:33:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/8f/6d/204f407df45600e2245b4a39860ed4ba32552330a0b3f5f160ae4cc30072/debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f", size = 3170322, upload-time = "2025-09-17T16:33:30.837Z" }, + { url = "https://files.pythonhosted.org/packages/f2/13/1b8f87d39cf83c6b713de2620c31205299e6065622e7dd37aff4808dd410/debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da", size = 5155078, upload-time = "2025-09-17T16:33:33.331Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c5/c012c60a2922cc91caa9675d0ddfbb14ba59e1e36228355f41cab6483469/debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4", size = 5179011, upload-time = "2025-09-17T16:33:35.711Z" }, + { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522, upload-time = "2025-09-17T16:33:38.466Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417, upload-time = "2025-09-17T16:33:41.299Z" }, + { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130, upload-time = "2025-09-17T16:33:43.554Z" }, + { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053, upload-time = "2025-09-17T16:33:53.033Z" }, + { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386, upload-time = "2025-09-17T16:33:54.594Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100, upload-time = "2025-09-17T16:33:56.353Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002, upload-time = "2025-09-17T16:33:58.231Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047, upload-time = "2025-09-17T16:34:00.586Z" }, + { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899, upload-time = "2025-09-17T16:34:02.657Z" }, + { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254, upload-time = "2025-09-17T16:34:04.486Z" }, + { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203, upload-time = "2025-09-17T16:34:06.65Z" }, + { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493, upload-time = "2025-09-17T16:34:08.483Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload-time = "2025-09-17T16:34:25.835Z" }, ] [[package]] @@ -771,14 +928,14 @@ wheels = [ [[package]] name = "deepdiff" -version = "8.6.0" +version = "8.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "orderly-set", marker = "python_full_version < '3.10'" }, + { name = "orderly-set" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/65/57d5047a03700ccb3eaab9d86837168701b1527fdd2bd9fe7a212bee83b1/deepdiff-8.6.0.tar.gz", hash = "sha256:6197216c2d777c3106a9989055c230e25848e599b26dcbcdc66226bd8d7fe901", size = 631801, upload-time = "2025-08-08T19:00:27.563Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/76/36c9aab3d5c19a94091f7c6c6e784efca50d87b124bf026c36e94719f33c/deepdiff-8.6.1.tar.gz", hash = "sha256:ec56d7a769ca80891b5200ec7bd41eec300ced91ebcc7797b41eb2b3f3ff643a", size = 634054, upload-time = "2025-09-03T19:40:41.461Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/4d/4c9ba906175430d6f1cb40b7aa90673720c2c4b3fcea03a3719b1906f983/deepdiff-8.6.0-py3-none-any.whl", hash = "sha256:db80677a434ac1f84147fd1598e93f1beb06d467e107af45fcf77cf8a681169f", size = 91121, upload-time = "2025-08-08T19:00:25.575Z" }, + { url = "https://files.pythonhosted.org/packages/f7/e6/efe534ef0952b531b630780e19cabd416e2032697019d5295defc6ef9bd9/deepdiff-8.6.1-py3-none-any.whl", hash = "sha256:ee8708a7f7d37fb273a541fa24ad010ed484192cd0c4ffc0fa0ed5e2d4b9e78b", size = 91378, upload-time = "2025-09-03T19:40:39.679Z" }, ] [[package]] @@ -809,12 +966,15 @@ wheels = [ ] [[package]] -name = "docopt-ng" -version = "0.9.0" +name = "donfig" +version = "0.8.1.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/50/8d6806cf13138127692ae6ff79ddeb4e25eb3b0bcc3c1bd033e7e04531a9/docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7", size = 32264, upload-time = "2023-05-30T20:46:25.064Z" } +dependencies = [ + { name = "pyyaml", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/71/80cc718ff6d7abfbabacb1f57aaa42e9c1552bfdd01e64ddd704e4a03638/donfig-0.8.1.post1.tar.gz", hash = "sha256:3bef3413a4c1c601b585e8d297256d0c1470ea012afa6e8461dc28bfb7c23f52", size = 19506, upload-time = "2024-05-23T14:14:31.513Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/4a/c3b77fc1a24510b08918b43a473410c0168f6e657118807015f1f1edceea/docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9", size = 16689, upload-time = "2023-05-30T20:46:45.294Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl", hash = "sha256:2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d", size = 21592, upload-time = "2024-05-23T14:13:55.283Z" }, ] [[package]] @@ -831,11 +991,11 @@ wheels = [ [[package]] name = "executing" -version = "2.2.0" +version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } +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/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, + { 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]] @@ -867,53 +1027,47 @@ wheels = [ [[package]] name = "fonttools" -version = "4.59.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/7f/29c9c3fe4246f6ad96fee52b88d0dc3a863c7563b0afc959e36d78b965dc/fonttools-4.59.1.tar.gz", hash = "sha256:74995b402ad09822a4c8002438e54940d9f1ecda898d2bb057729d7da983e4cb", size = 3534394, upload-time = "2025-08-14T16:28:14.266Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/f6/4a13657c9ca134ac62d9a68e4b3412b95b059537eab459cc1df653f45862/fonttools-4.59.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f9721a564978a10d5c12927f99170d18e9a32e5a727c61eae56f956a4d118b", size = 4846293, upload-time = "2025-08-14T16:26:15.586Z" }, - { url = "https://files.pythonhosted.org/packages/69/e3/9f0c8c30eaea5b2d891bd95b000381b3b2dcaa89b5a064cce25157aba973/fonttools-4.59.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8c8758a7d97848fc8b514b3d9b4cb95243714b2f838dde5e1e3c007375de6214", size = 4776105, upload-time = "2025-08-14T16:26:17.624Z" }, - { url = "https://files.pythonhosted.org/packages/e2/73/1e6a06e2eecdc7b054b035507694b4f480e83b94dcb0d19f8a010d95350a/fonttools-4.59.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2aeb829ad9d41a2ef17cab8bb5d186049ba38a840f10352e654aa9062ec32dc1", size = 4825142, upload-time = "2025-08-14T16:26:19.936Z" }, - { url = "https://files.pythonhosted.org/packages/72/7d/a512521ec44c37bda27d08193e79e48a510a073554c30400ccc600494830/fonttools-4.59.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac216a2980a2d2b3b88c68a24f8a9bfb203e2490e991b3238502ad8f1e7bfed0", size = 4935220, upload-time = "2025-08-14T16:26:22.22Z" }, - { url = "https://files.pythonhosted.org/packages/62/f1/71f9a9c4e5df44d861975538a5c56b58f1662cd32ebbea5a02eb86028fc1/fonttools-4.59.1-cp310-cp310-win32.whl", hash = "sha256:d31dc137ed8ec71dbc446949eba9035926e6e967b90378805dcf667ff57cabb1", size = 2216883, upload-time = "2025-08-14T16:26:24.037Z" }, - { url = "https://files.pythonhosted.org/packages/f9/6d/92b2e3e0350bb3ef88024ae19513c12cee61896220e3df421c47a439af28/fonttools-4.59.1-cp310-cp310-win_amd64.whl", hash = "sha256:5265bc52ed447187d39891b5f21d7217722735d0de9fe81326566570d12851a9", size = 2261310, upload-time = "2025-08-14T16:26:26.184Z" }, - { url = "https://files.pythonhosted.org/packages/a4/cc/fcbb606dd6871f457ac32f281c20bcd6cc77d9fce77b5a4e2b2afab1f500/fonttools-4.59.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39dfd42cc2dc647b2c5469bc7a5b234d9a49e72565b96dd14ae6f11c2c59ef15", size = 5022222, upload-time = "2025-08-14T16:26:32.447Z" }, - { url = "https://files.pythonhosted.org/packages/61/96/c0b1cf2b74d08eb616a80dbf5564351fe4686147291a25f7dce8ace51eb3/fonttools-4.59.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b11bc177a0d428b37890825d7d025040d591aa833f85f8d8878ed183354f47df", size = 4966512, upload-time = "2025-08-14T16:26:34.621Z" }, - { url = "https://files.pythonhosted.org/packages/a4/26/51ce2e3e0835ffc2562b1b11d1fb9dafd0aca89c9041b64a9e903790a761/fonttools-4.59.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b9b4c35b3be45e5bc774d3fc9608bbf4f9a8d371103b858c80edbeed31dd5aa", size = 5001645, upload-time = "2025-08-14T16:26:36.876Z" }, - { url = "https://files.pythonhosted.org/packages/36/11/ef0b23f4266349b6d5ccbd1a07b7adc998d5bce925792aa5d1ec33f593e3/fonttools-4.59.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:01158376b8a418a0bae9625c476cebfcfcb5e6761e9d243b219cd58341e7afbb", size = 5113777, upload-time = "2025-08-14T16:26:39.002Z" }, - { url = "https://files.pythonhosted.org/packages/d0/da/b398fe61ef433da0a0472cdb5d4399124f7581ffe1a31b6242c91477d802/fonttools-4.59.1-cp311-cp311-win32.whl", hash = "sha256:cf7c5089d37787387123f1cb8f1793a47c5e1e3d1e4e7bfbc1cc96e0f925eabe", size = 2215076, upload-time = "2025-08-14T16:26:41.196Z" }, - { url = "https://files.pythonhosted.org/packages/94/bd/e2624d06ab94e41c7c77727b2941f1baed7edb647e63503953e6888020c9/fonttools-4.59.1-cp311-cp311-win_amd64.whl", hash = "sha256:c866eef7a0ba320486ade6c32bfc12813d1a5db8567e6904fb56d3d40acc5116", size = 2262779, upload-time = "2025-08-14T16:26:43.483Z" }, - { url = "https://files.pythonhosted.org/packages/8b/b1/890360a7e3d04a30ba50b267aca2783f4c1364363797e892e78a4f036076/fonttools-4.59.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d601b153e51a5a6221f0d4ec077b6bfc6ac35bfe6c19aeaa233d8990b2b71726", size = 4909215, upload-time = "2025-08-14T16:26:49.682Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ec/2490599550d6c9c97a44c1e36ef4de52d6acf742359eaa385735e30c05c4/fonttools-4.59.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c735e385e30278c54f43a0d056736942023c9043f84ee1021eff9fd616d17693", size = 4951958, upload-time = "2025-08-14T16:26:51.616Z" }, - { url = "https://files.pythonhosted.org/packages/d1/40/bd053f6f7634234a9b9805ff8ae4f32df4f2168bee23cafd1271ba9915a9/fonttools-4.59.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1017413cdc8555dce7ee23720da490282ab7ec1cf022af90a241f33f9a49afc4", size = 4894738, upload-time = "2025-08-14T16:26:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/ac/a1/3cd12a010d288325a7cfcf298a84825f0f9c29b01dee1baba64edfe89257/fonttools-4.59.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5c6d8d773470a5107052874341ed3c487c16ecd179976d81afed89dea5cd7406", size = 5045983, upload-time = "2025-08-14T16:26:56.153Z" }, - { url = "https://files.pythonhosted.org/packages/a2/af/8a2c3f6619cc43cf87951405337cc8460d08a4e717bb05eaa94b335d11dc/fonttools-4.59.1-cp312-cp312-win32.whl", hash = "sha256:2a2d0d33307f6ad3a2086a95dd607c202ea8852fa9fb52af9b48811154d1428a", size = 2203407, upload-time = "2025-08-14T16:26:58.165Z" }, - { url = "https://files.pythonhosted.org/packages/8e/f2/a19b874ddbd3ebcf11d7e25188ef9ac3f68b9219c62263acb34aca8cde05/fonttools-4.59.1-cp312-cp312-win_amd64.whl", hash = "sha256:0b9e4fa7eaf046ed6ac470f6033d52c052481ff7a6e0a92373d14f556f298dc0", size = 2251561, upload-time = "2025-08-14T16:27:00.646Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8387876a8011caec52d327d5e5bca705d9399ec4b17afb8b431ec50d47c17d23", size = 4889254, upload-time = "2025-08-14T16:27:07.02Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e5/54a6dc811eba018d022ca2e8bd6f2969291f9586ccf9a22a05fc55f91250/fonttools-4.59.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb13823a74b3a9204a8ed76d3d6d5ec12e64cc5bc44914eb9ff1cdac04facd43", size = 4949109, upload-time = "2025-08-14T16:27:09.3Z" }, - { url = "https://files.pythonhosted.org/packages/db/15/b05c72a248a95bea0fd05fbd95acdf0742945942143fcf961343b7a3663a/fonttools-4.59.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e1ca10da138c300f768bb68e40e5b20b6ecfbd95f91aac4cc15010b6b9d65455", size = 4888428, upload-time = "2025-08-14T16:27:11.514Z" }, - { url = "https://files.pythonhosted.org/packages/63/71/c7d6840f858d695adc0c4371ec45e3fb1c8e060b276ba944e2800495aca4/fonttools-4.59.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2beb5bfc4887a3130f8625349605a3a45fe345655ce6031d1bac11017454b943", size = 5032668, upload-time = "2025-08-14T16:27:13.872Z" }, - { url = "https://files.pythonhosted.org/packages/90/54/57be4aca6f1312e2bc4d811200dd822325794e05bdb26eeff0976edca651/fonttools-4.59.1-cp313-cp313-win32.whl", hash = "sha256:419f16d750d78e6d704bfe97b48bba2f73b15c9418f817d0cb8a9ca87a5b94bf", size = 2201832, upload-time = "2025-08-14T16:27:16.126Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1f/1899a6175a5f900ed8730a0d64f53ca1b596ed7609bfda033cf659114258/fonttools-4.59.1-cp313-cp313-win_amd64.whl", hash = "sha256:c536f8a852e8d3fa71dde1ec03892aee50be59f7154b533f0bf3c1174cfd5126", size = 2250673, upload-time = "2025-08-14T16:27:18.033Z" }, - { url = "https://files.pythonhosted.org/packages/17/41/b3ba43f78afb321e2e50232c87304c8d0f5ab39b64389b8286cc39cdb824/fonttools-4.59.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57a3708ca6bfccb790f585fa6d8f29432ec329618a09ff94c16bcb3c55994643", size = 4832020, upload-time = "2025-08-14T16:27:24.214Z" }, - { url = "https://files.pythonhosted.org/packages/67/b1/3af871c7fb325a68938e7ce544ca48bfd2c6bb7b357f3c8252933b29100a/fonttools-4.59.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:729367c91eb1ee84e61a733acc485065a00590618ca31c438e7dd4d600c01486", size = 4930687, upload-time = "2025-08-14T16:27:26.484Z" }, - { url = "https://files.pythonhosted.org/packages/c5/4f/299fc44646b30d9ef03ffaa78b109c7bd32121f0d8f10009ee73ac4514bc/fonttools-4.59.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f8ef66ac6db450193ed150e10b3b45dde7aded10c5d279968bc63368027f62b", size = 4875794, upload-time = "2025-08-14T16:27:28.887Z" }, - { url = "https://files.pythonhosted.org/packages/90/cf/a0a3d763ab58f5f81ceff104ddb662fd9da94248694862b9c6cbd509fdd5/fonttools-4.59.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:075f745d539a998cd92cb84c339a82e53e49114ec62aaea8307c80d3ad3aef3a", size = 4985780, upload-time = "2025-08-14T16:27:30.858Z" }, - { url = "https://files.pythonhosted.org/packages/72/c5/ba76511aaae143d89c29cd32ce30bafb61c477e8759a1590b8483f8065f8/fonttools-4.59.1-cp314-cp314-win32.whl", hash = "sha256:c2b0597522d4c5bb18aa5cf258746a2d4a90f25878cbe865e4d35526abd1b9fc", size = 2205610, upload-time = "2025-08-14T16:27:32.578Z" }, - { url = "https://files.pythonhosted.org/packages/a9/65/b250e69d6caf35bc65cddbf608be0662d741c248f2e7503ab01081fc267e/fonttools-4.59.1-cp314-cp314-win_amd64.whl", hash = "sha256:e9ad4ce044e3236f0814c906ccce8647046cc557539661e35211faadf76f283b", size = 2255376, upload-time = "2025-08-14T16:27:34.653Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ff/d14b4c283879e8cb57862d9624a34fe6522b6fcdd46ccbfc58900958794a/fonttools-4.59.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e54437651e1440ee53a95e6ceb6ee440b67a3d348c76f45f4f48de1a5ecab019", size = 4831575, upload-time = "2025-08-14T16:27:41.885Z" }, - { url = "https://files.pythonhosted.org/packages/9c/04/a277d9a584a49d98ca12d3b2c6663bdf333ae97aaa83bd0cdabf7c5a6c84/fonttools-4.59.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6065fdec8ff44c32a483fd44abe5bcdb40dd5e2571a5034b555348f2b3a52cea", size = 5069962, upload-time = "2025-08-14T16:27:44.284Z" }, - { url = "https://files.pythonhosted.org/packages/16/6f/3d2ae69d96c4cdee6dfe7598ca5519a1514487700ca3d7c49c5a1ad65308/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42052b56d176f8b315fbc09259439c013c0cb2109df72447148aeda677599612", size = 4942926, upload-time = "2025-08-14T16:27:46.523Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d3/c17379e0048d03ce26b38e4ab0e9a98280395b00529e093fe2d663ac0658/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bcd52eaa5c4c593ae9f447c1d13e7e4a00ca21d755645efa660b6999425b3c88", size = 4958678, upload-time = "2025-08-14T16:27:48.555Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3f/c5543a1540abdfb4d375e3ebeb84de365ab9b153ec14cb7db05f537dd1e7/fonttools-4.59.1-cp314-cp314t-win32.whl", hash = "sha256:02e4fdf27c550dded10fe038a5981c29f81cb9bc649ff2eaa48e80dab8998f97", size = 2266706, upload-time = "2025-08-14T16:27:50.556Z" }, - { url = "https://files.pythonhosted.org/packages/3e/99/85bff6e674226bc8402f983e365f07e76d990e7220ba72bcc738fef52391/fonttools-4.59.1-cp314-cp314t-win_amd64.whl", hash = "sha256:412a5fd6345872a7c249dac5bcce380393f40c1c316ac07f447bc17d51900922", size = 2329994, upload-time = "2025-08-14T16:27:52.36Z" }, - { url = "https://files.pythonhosted.org/packages/72/df/63d586609002057d3e214f7d45c0c2bf0a5c5030f61d282dc39943546199/fonttools-4.59.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:58a8844f96cff35860647a65345bfca87f47a2494bfb4bef754e58c082511443", size = 4822086, upload-time = "2025-08-14T16:27:58.659Z" }, - { url = "https://files.pythonhosted.org/packages/d2/82/d019c4499202c22fc6d8d122aad1175d2541289be76b8888546ac1f71d4a/fonttools-4.59.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f021cea6e36410874763f4a517a5e2d6ac36ca8f95521f3a9fdaad0fe73dc", size = 4755144, upload-time = "2025-08-14T16:28:00.71Z" }, - { url = "https://files.pythonhosted.org/packages/7d/32/130226b1da79fc67f623707bd20394ea87ca1ea9d858fa0e8e7d38847ce7/fonttools-4.59.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf5fb864f80061a40c1747e0dbc4f6e738de58dd6675b07eb80bd06a93b063c4", size = 4804680, upload-time = "2025-08-14T16:28:02.676Z" }, - { url = "https://files.pythonhosted.org/packages/fd/8c/73a4af65e2318d63719354730a700c21a9e271e74789c83d9d5d77621fcf/fonttools-4.59.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c29ea087843e27a7cffc78406d32a5abf166d92afde7890394e9e079c9b4dbe9", size = 4914623, upload-time = "2025-08-14T16:28:04.917Z" }, - { url = "https://files.pythonhosted.org/packages/a8/af/0763b655c9b713c70a9081a322e5411c4c85222471d0b7d6730cfcccbae9/fonttools-4.59.1-cp39-cp39-win32.whl", hash = "sha256:a960b09ff50c2e87864e83f352e5a90bcf1ad5233df579b1124660e1643de272", size = 1485466, upload-time = "2025-08-14T16:28:07.195Z" }, - { url = "https://files.pythonhosted.org/packages/ee/b2/c2bb086f0525b6c458f2b72b994341f8ae1d5dac556e3073c70b2c973685/fonttools-4.59.1-cp39-cp39-win_amd64.whl", hash = "sha256:e3680884189e2b7c3549f6d304376e64711fd15118e4b1ae81940cb6b1eaa267", size = 1529833, upload-time = "2025-08-14T16:28:09.88Z" }, - { url = "https://files.pythonhosted.org/packages/0f/64/9d606e66d498917cd7a2ff24f558010d42d6fd4576d9dd57f0bd98333f5a/fonttools-4.59.1-py3-none-any.whl", hash = "sha256:647db657073672a8330608970a984d51573557f328030566521bc03415535042", size = 1130094, upload-time = "2025-08-14T16:28:12.048Z" }, +version = "4.60.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/42/97a13e47a1e51a5a7142475bbcf5107fe3a68fc34aef331c897d5fb98ad0/fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9", size = 3559823, upload-time = "2025-09-29T21:13:27.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/18/e5970aa96c8fad1cb19a9479cc3b7602c0c98d250fcdc06a5da994309c50/fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c", size = 4864572, upload-time = "2025-09-29T21:11:05.096Z" }, + { url = "https://files.pythonhosted.org/packages/ce/20/9b2b4051b6ec6689480787d506b5003f72648f50972a92d04527a456192c/fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea", size = 4794635, upload-time = "2025-09-29T21:11:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/10/52/c791f57347c1be98f8345e3dca4ac483eb97666dd7c47f3059aeffab8b59/fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652", size = 4843878, upload-time = "2025-09-29T21:11:10.893Z" }, + { url = "https://files.pythonhosted.org/packages/69/e9/35c24a8d01644cee8c090a22fad34d5b61d1e0a8ecbc9945ad785ebf2e9e/fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a", size = 4954555, upload-time = "2025-09-29T21:11:13.24Z" }, + { url = "https://files.pythonhosted.org/packages/f7/86/fb1e994971be4bdfe3a307de6373ef69a9df83fb66e3faa9c8114893d4cc/fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce", size = 2232019, upload-time = "2025-09-29T21:11:15.73Z" }, + { url = "https://files.pythonhosted.org/packages/40/84/62a19e2bd56f0e9fb347486a5b26376bade4bf6bbba64dda2c103bd08c94/fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038", size = 2276803, upload-time = "2025-09-29T21:11:18.152Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/1934b537c86fcf99f9761823f1fc37a98fbd54568e8e613f29a90fed95a9/fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914", size = 5042189, upload-time = "2025-09-29T21:11:25.061Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d2/9f4e4c4374dd1daa8367784e1bd910f18ba886db1d6b825b12edf6db3edc/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1", size = 4978683, upload-time = "2025-09-29T21:11:27.693Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c4/0fb2dfd1ecbe9a07954cc13414713ed1eab17b1c0214ef07fc93df234a47/fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d", size = 5021372, upload-time = "2025-09-29T21:11:30.257Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d5/495fc7ae2fab20223cc87179a8f50f40f9a6f821f271ba8301ae12bb580f/fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa", size = 5132562, upload-time = "2025-09-29T21:11:32.737Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fa/021dab618526323c744e0206b3f5c8596a2e7ae9aa38db5948a131123e83/fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258", size = 2230288, upload-time = "2025-09-29T21:11:35.015Z" }, + { url = "https://files.pythonhosted.org/packages/bb/78/0e1a6d22b427579ea5c8273e1c07def2f325b977faaf60bb7ddc01456cb1/fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf", size = 2278184, upload-time = "2025-09-29T21:11:37.434Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ca/4bb48a26ed95a1e7eba175535fe5805887682140ee0a0d10a88e1de84208/fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c", size = 4923716, upload-time = "2025-09-29T21:11:43.893Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9f/2cb82999f686c1d1ddf06f6ae1a9117a880adbec113611cc9d22b2fdd465/fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401", size = 4968175, upload-time = "2025-09-29T21:11:46.439Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/be569699e37d166b78e6218f2cde8c550204f2505038cdd83b42edc469b9/fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903", size = 4911031, upload-time = "2025-09-29T21:11:48.977Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9f/89411cc116effaec5260ad519162f64f9c150e5522a27cbb05eb62d0c05b/fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed", size = 5062966, upload-time = "2025-09-29T21:11:54.344Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/f888221934b5731d46cb9991c7a71f30cb1f97c0ef5fcf37f8da8fce6c8e/fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6", size = 2218750, upload-time = "2025-09-29T21:11:56.601Z" }, + { url = "https://files.pythonhosted.org/packages/88/8f/a55b5550cd33cd1028601df41acd057d4be20efa5c958f417b0c0613924d/fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383", size = 2267026, upload-time = "2025-09-29T21:11:58.852Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c", size = 4903082, upload-time = "2025-09-29T21:12:06.382Z" }, + { url = "https://files.pythonhosted.org/packages/04/05/06b1455e4bc653fcb2117ac3ef5fa3a8a14919b93c60742d04440605d058/fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77", size = 4960125, upload-time = "2025-09-29T21:12:09.314Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/f3b840fcb2666f6cb97038793606bdd83488dca2d0b0fc542ccc20afa668/fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199", size = 4901454, upload-time = "2025-09-29T21:12:11.931Z" }, + { url = "https://files.pythonhosted.org/packages/fd/9e/eb76f77e82f8d4a46420aadff12cec6237751b0fb9ef1de373186dcffb5f/fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c", size = 5044495, upload-time = "2025-09-29T21:12:15.241Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b3/cede8f8235d42ff7ae891bae8d619d02c8ac9fd0cfc450c5927a6200c70d/fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272", size = 2217028, upload-time = "2025-09-29T21:12:17.96Z" }, + { url = "https://files.pythonhosted.org/packages/75/4d/b022c1577807ce8b31ffe055306ec13a866f2337ecee96e75b24b9b753ea/fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac", size = 2266200, upload-time = "2025-09-29T21:12:20.14Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2e/d4831caa96d85a84dd0da1d9f90d81cec081f551e0ea216df684092c6c97/fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537", size = 4843490, upload-time = "2025-09-29T21:12:29.123Z" }, + { url = "https://files.pythonhosted.org/packages/49/13/5e2ea7c7a101b6fc3941be65307ef8df92cbbfa6ec4804032baf1893b434/fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003", size = 4944184, upload-time = "2025-09-29T21:12:31.414Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2b/cf9603551c525b73fc47c52ee0b82a891579a93d9651ed694e4e2cd08bb8/fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08", size = 4890218, upload-time = "2025-09-29T21:12:33.936Z" }, + { url = "https://files.pythonhosted.org/packages/fd/2f/933d2352422e25f2376aae74f79eaa882a50fb3bfef3c0d4f50501267101/fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99", size = 4999324, upload-time = "2025-09-29T21:12:36.637Z" }, + { url = "https://files.pythonhosted.org/packages/38/99/234594c0391221f66216bc2c886923513b3399a148defaccf81dc3be6560/fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6", size = 2220861, upload-time = "2025-09-29T21:12:39.108Z" }, + { url = "https://files.pythonhosted.org/packages/3e/1d/edb5b23726dde50fc4068e1493e4fc7658eeefcaf75d4c5ffce067d07ae5/fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987", size = 2270934, upload-time = "2025-09-29T21:12:41.339Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/e9bcf51980f98e59bb5bb7c382a63c6f6cac0eec5f67de6d8f2322382065/fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801", size = 4849758, upload-time = "2025-09-29T21:12:48.694Z" }, + { url = "https://files.pythonhosted.org/packages/e3/dc/1d2cf7d1cba82264b2f8385db3f5960e3d8ce756b4dc65b700d2c496f7e9/fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc", size = 5085598, upload-time = "2025-09-29T21:12:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/5d/4d/279e28ba87fb20e0c69baf72b60bbf1c4d873af1476806a7b5f2b7fac1ff/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc", size = 4957603, upload-time = "2025-09-29T21:12:53.423Z" }, + { url = "https://files.pythonhosted.org/packages/78/d4/ff19976305e0c05aa3340c805475abb00224c954d3c65e82c0a69633d55d/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed", size = 4974184, upload-time = "2025-09-29T21:12:55.962Z" }, + { url = "https://files.pythonhosted.org/packages/63/22/8553ff6166f5cd21cfaa115aaacaa0dc73b91c079a8cfd54a482cbc0f4f5/fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259", size = 2282241, upload-time = "2025-09-29T21:12:58.179Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cb/fa7b4d148e11d5a72761a22e595344133e83a9507a4c231df972e657579b/fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c", size = 2345760, upload-time = "2025-09-29T21:13:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" }, ] [[package]] @@ -927,11 +1081,11 @@ wheels = [ [[package]] name = "fsspec" -version = "2025.7.0" +version = "2025.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/02/0835e6ab9cfc03916fe3f78c0956cfcdb6ff2669ffa6651065d5ebf7fc98/fsspec-2025.7.0.tar.gz", hash = "sha256:786120687ffa54b8283d942929540d8bc5ccfa820deb555a2b5d0ed2b737bf58", size = 304432, upload-time = "2025-07-15T16:05:21.19Z" } +sdist = { url = "https://files.pythonhosted.org/packages/de/e0/bab50af11c2d75c9c4a2a26a5254573c0bd97cea152254401510950486fa/fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19", size = 304847, upload-time = "2025-09-02T19:10:49.215Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/70db47e4f6ce3e5c37a607355f80da8860a33226be640226ac52cb05ef2e/fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7", size = 199289, upload-time = "2025-09-02T19:10:47.708Z" }, ] [[package]] @@ -948,14 +1102,14 @@ wheels = [ [[package]] name = "griffe" -version = "1.12.1" +version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/ca/29f36e00c74844ae50d139cf5a8b1751887b2f4d5023af65d460268ad7aa/griffe-1.12.1.tar.gz", hash = "sha256:29f5a6114c0aeda7d9c86a570f736883f8a2c5b38b57323d56b3d1c000565567", size = 411863, upload-time = "2025-08-14T21:08:15.38Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684, upload-time = "2025-09-05T15:02:29.167Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/f2/4fab6c3e5bcaf38a44cc8a974d2752eaad4c129e45d6533d926a30edd133/griffe-1.12.1-py3-none-any.whl", hash = "sha256:2d7c12334de00089c31905424a00abcfd931b45b8b516967f224133903d302cc", size = 138940, upload-time = "2025-08-14T21:08:13.382Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439, upload-time = "2025-09-05T15:02:27.511Z" }, ] [[package]] @@ -972,8 +1126,8 @@ name = "h5netcdf" version = "1.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "h5py" }, + { name = "packaging" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/a1/e3ca842fd0895fcfb21c754a18fd8cd7362d1625b3a93408c982c38f4ec1/h5netcdf-1.6.4.tar.gz", hash = "sha256:83db7e5eb9b822bed2c79050d6cf8f36ecbd1039f4252bd90fab200edcaaf67d", size = 65832, upload-time = "2025-08-05T06:26:56.707Z" } wheels = [ @@ -985,7 +1139,8 @@ name = "h5py" version = "3.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5d/57/dfb3c5c3f1bf5f5ef2e59a22dec4ff1f3d7408b55bfcefcfb0ea69ef21c6/h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4", size = 424323, upload-time = "2025-06-06T14:06:15.01Z" } wheels = [ @@ -1001,9 +1156,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0d/ce/3a21d87896bc7e3e9255e0ad5583ae31ae9e6b4b00e0bcb2a67e2b6acdbc/h5py-3.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8cbaf6910fa3983c46172666b0b8da7b7bd90d764399ca983236f2400436eeb", size = 4700675, upload-time = "2025-06-06T14:05:37.38Z" }, { url = "https://files.pythonhosted.org/packages/e7/ec/86f59025306dcc6deee5fda54d980d077075b8d9889aac80f158bd585f1b/h5py-3.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d90e6445ab7c146d7f7981b11895d70bc1dd91278a4f9f9028bc0c95e4a53f13", size = 4921632, upload-time = "2025-06-06T14:05:43.464Z" }, { url = "https://files.pythonhosted.org/packages/3f/6d/0084ed0b78d4fd3e7530c32491f2884140d9b06365dac8a08de726421d4a/h5py-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae18e3de237a7a830adb76aaa68ad438d85fe6e19e0d99944a3ce46b772c69b3", size = 2852929, upload-time = "2025-06-06T14:05:47.659Z" }, - { url = "https://files.pythonhosted.org/packages/66/40/b423b57696514e05aa7bb06150ef96667d0e0006cc6de7ab52c71734ab51/h5py-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:573c33ad056ac7c1ab6d567b6db9df3ffc401045e3f605736218f96c1e0490c6", size = 4326368, upload-time = "2025-06-06T14:06:00.782Z" }, - { url = "https://files.pythonhosted.org/packages/f7/07/e088f89f04fdbe57ddf9de377f857158d3daa38cf5d0fb20ef9bd489e313/h5py-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccbe17dc187c0c64178f1a10aa274ed3a57d055117588942b8a08793cc448216", size = 4559686, upload-time = "2025-06-06T14:06:07.416Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e4/fb8032d0e5480b1db9b419b5b50737b61bb3c7187c49d809975d62129fb0/h5py-3.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f025cf30ae738c4c4e38c7439a761a71ccfcce04c2b87b2a2ac64e8c5171d43", size = 2877166, upload-time = "2025-06-06T14:06:13.05Z" }, ] [[package]] @@ -1011,8 +1163,9 @@ name = "hickle" version = "5.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "h5py" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/42/09a543153c1609b656f5c8e33210d6bdd1b7045c0d6e33bc96bb9afbb704/hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e", size = 117601, upload-time = "2024-03-30T09:15:08.818Z" } wheels = [ @@ -1034,14 +1187,14 @@ wheels = [ [[package]] name = "httplib2" -version = "0.22.0" +version = "0.31.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyparsing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/ad/2371116b22d616c194aa25ec410c9c6c37f23599dcd590502b74db197584/httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81", size = 351116, upload-time = "2023-03-21T22:29:37.214Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/77/6653db69c1f7ecfe5e3f9726fdadc981794656fcd7d98c4209fecfea9993/httplib2-0.31.0.tar.gz", hash = "sha256:ac7ab497c50975147d4f7b1ade44becc7df2f8954d42b38b3d69c515f531135c", size = 250759, upload-time = "2025-09-11T12:16:03.403Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc", size = 96854, upload-time = "2023-03-21T22:29:35.683Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl", hash = "sha256:b9cd78abea9b4e43a7714c6e0f8b6b8561a6fc1e95d5dbd367f5bf0ef35f5d24", size = 91148, upload-time = "2025-09-11T12:16:01.803Z" }, ] [[package]] @@ -1093,9 +1246,6 @@ wheels = [ name = "importlib-resources" version = "6.5.2" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, @@ -1136,7 +1286,7 @@ wheels = [ [[package]] name = "ipython" -version = "8.18.1" +version = "8.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1144,16 +1294,16 @@ dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "jedi" }, { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'win32'" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "prompt-toolkit" }, { name = "pygments" }, { name = "stack-data" }, { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330, upload-time = "2023-11-27T09:58:34.596Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161, upload-time = "2023-11-27T09:58:30.538Z" }, + { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864, upload-time = "2025-05-31T16:39:06.38Z" }, ] [[package]] @@ -1210,11 +1360,11 @@ wheels = [ [[package]] name = "joblib" -version = "1.5.1" +version = "1.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/fe/0f5a938c54105553436dbff7a61dc4fed4b1b2c98852f8833beaf4d5968f/joblib-1.5.1.tar.gz", hash = "sha256:f4f86e351f39fe3d0d32a9f2c3d8af1ee4cec285aafcb27003dda5205576b444", size = 330475, upload-time = "2025-05-23T12:04:37.097Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload-time = "2025-08-27T12:15:46.575Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/4f/1195bbac8e0c2acc5f740661631d8d750dc38d4a32b23ee5df3cde6f4e0d/joblib-1.5.1-py3-none-any.whl", hash = "sha256:4719a31f054c7d766948dcd83e9613686b27114f190f717cec7eaa2084f8a74a", size = 307746, upload-time = "2025-05-23T12:04:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" }, ] [[package]] @@ -1265,14 +1415,14 @@ format-nongpl = [ [[package]] name = "jsonschema-specifications" -version = "2025.4.1" +version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } +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/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, + { 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]] @@ -1297,7 +1447,6 @@ name = "jupyter-client" version = "8.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jupyter-core" }, { name = "python-dateutil" }, { name = "pyzmq" }, @@ -1363,20 +1512,19 @@ wheels = [ [[package]] name = "jupyter-lsp" -version = "2.2.6" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823, upload-time = "2025-08-27T17:47:34.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/7c/12f68daf85b469b4896d5e4a629baa33c806d61de75ac5b39d8ef27ec4a2/jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d", size = 69371, upload-time = "2025-07-18T21:35:16.585Z" }, + { url = "https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f", size = 76687, upload-time = "2025-08-27T17:47:33.15Z" }, ] [[package]] name = "jupyter-server" -version = "2.16.0" +version = "2.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1388,7 +1536,7 @@ dependencies = [ { name = "jupyter-server-terminals" }, { name = "nbconvert" }, { name = "nbformat" }, - { name = "overrides" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, { name = "packaging" }, { name = "prometheus-client" }, { name = "pywinpty", marker = "os_name == 'nt'" }, @@ -1399,9 +1547,9 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177, upload-time = "2025-05-12T16:44:46.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949, upload-time = "2025-08-21T14:42:54.042Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904, upload-time = "2025-05-12T16:44:43.335Z" }, + { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221, upload-time = "2025-08-21T14:42:52.034Z" }, ] [[package]] @@ -1419,12 +1567,11 @@ wheels = [ [[package]] name = "jupyterlab" -version = "4.4.6" +version = "4.4.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "ipykernel" }, { name = "jinja2" }, { name = "jupyter-core" }, @@ -1438,9 +1585,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1e/5c/14f0852233d60d30bf0f22a817d6c20ac555d73526cc915274f97c07a2b9/jupyterlab-4.4.6.tar.gz", hash = "sha256:e0b720ff5392846bdbc01745f32f29f4d001c071a4bff94d8b516ba89b5a4157", size = 23040936, upload-time = "2025-08-15T11:44:15.915Z" } +sdist = { url = "https://files.pythonhosted.org/packages/45/b2/7dad2d0049a904d17c070226a4f78f81905f93bfe09503722d210ccf9335/jupyterlab-4.4.9.tar.gz", hash = "sha256:ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2", size = 22966654, upload-time = "2025-09-26T17:28:20.158Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/38/6182d63f39428821e705e86fba61704fc69769a24ca5a9578c2c04986c9a/jupyterlab-4.4.6-py3-none-any.whl", hash = "sha256:e877e930f46dde2e3ee9da36a935c6cd4fdb15aa7440519d0fde696f9fadb833", size = 12268564, upload-time = "2025-08-15T11:44:11.42Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/ac0979ebd1b1975c266c99b96930b0a66609c3f6e5d76979ca6eb3073896/jupyterlab-4.4.9-py3-none-any.whl", hash = "sha256:394c902827350c017430a8370b9f40c03c098773084bc53930145c146d3d2cb2", size = 12292552, upload-time = "2025-09-26T17:28:15.663Z" }, ] [[package]] @@ -1458,7 +1605,6 @@ version = "2.27.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "json5" }, { name = "jsonschema" }, @@ -1482,92 +1628,94 @@ wheels = [ [[package]] name = "kiwisolver" -version = "1.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286, upload-time = "2024-09-04T09:39:44.302Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109, upload-time = "2024-09-04T09:03:49.281Z" }, - { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814, upload-time = "2024-09-04T09:03:51.444Z" }, - { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881, upload-time = "2024-09-04T09:03:53.357Z" }, - { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972, upload-time = "2024-09-04T09:03:55.082Z" }, - { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787, upload-time = "2024-09-04T09:03:56.588Z" }, - { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212, upload-time = "2024-09-04T09:03:58.557Z" }, - { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399, upload-time = "2024-09-04T09:04:00.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688, upload-time = "2024-09-04T09:04:02.216Z" }, - { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493, upload-time = "2024-09-04T09:04:04.571Z" }, - { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191, upload-time = "2024-09-04T09:04:05.969Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644, upload-time = "2024-09-04T09:04:07.408Z" }, - { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877, upload-time = "2024-09-04T09:04:08.869Z" }, - { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347, upload-time = "2024-09-04T09:04:10.106Z" }, - { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260, upload-time = "2024-09-04T09:04:14.878Z" }, - { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589, upload-time = "2024-09-04T09:04:16.514Z" }, - { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080, upload-time = "2024-09-04T09:04:18.322Z" }, - { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049, upload-time = "2024-09-04T09:04:20.266Z" }, - { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376, upload-time = "2024-09-04T09:04:22.419Z" }, - { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231, upload-time = "2024-09-04T09:04:24.526Z" }, - { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634, upload-time = "2024-09-04T09:04:25.899Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024, upload-time = "2024-09-04T09:04:28.523Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484, upload-time = "2024-09-04T09:04:30.547Z" }, - { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078, upload-time = "2024-09-04T09:04:33.218Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645, upload-time = "2024-09-04T09:04:34.371Z" }, - { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022, upload-time = "2024-09-04T09:04:35.786Z" }, - { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536, upload-time = "2024-09-04T09:04:37.525Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296, upload-time = "2024-09-04T09:04:42.886Z" }, - { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450, upload-time = "2024-09-04T09:04:46.284Z" }, - { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168, upload-time = "2024-09-04T09:04:47.91Z" }, - { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308, upload-time = "2024-09-04T09:04:49.465Z" }, - { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186, upload-time = "2024-09-04T09:04:50.949Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877, upload-time = "2024-09-04T09:04:52.388Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204, upload-time = "2024-09-04T09:04:54.385Z" }, - { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461, upload-time = "2024-09-04T09:04:56.307Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358, upload-time = "2024-09-04T09:04:57.922Z" }, - { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119, upload-time = "2024-09-04T09:04:59.332Z" }, - { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367, upload-time = "2024-09-04T09:05:00.804Z" }, - { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884, upload-time = "2024-09-04T09:05:01.924Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528, upload-time = "2024-09-04T09:05:02.983Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145, upload-time = "2024-09-04T09:05:07.919Z" }, - { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448, upload-time = "2024-09-04T09:05:10.01Z" }, - { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750, upload-time = "2024-09-04T09:05:11.598Z" }, - { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175, upload-time = "2024-09-04T09:05:13.22Z" }, - { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963, upload-time = "2024-09-04T09:05:15.925Z" }, - { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220, upload-time = "2024-09-04T09:05:17.434Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463, upload-time = "2024-09-04T09:05:18.997Z" }, - { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842, upload-time = "2024-09-04T09:05:21.299Z" }, - { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635, upload-time = "2024-09-04T09:05:23.588Z" }, - { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556, upload-time = "2024-09-04T09:05:25.907Z" }, - { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364, upload-time = "2024-09-04T09:05:27.184Z" }, - { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887, upload-time = "2024-09-04T09:05:28.372Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530, upload-time = "2024-09-04T09:05:30.225Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966, upload-time = "2024-09-04T09:05:59.855Z" }, - { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044, upload-time = "2024-09-04T09:06:02.16Z" }, - { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879, upload-time = "2024-09-04T09:06:03.908Z" }, - { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751, upload-time = "2024-09-04T09:06:05.58Z" }, - { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990, upload-time = "2024-09-04T09:06:08.126Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122, upload-time = "2024-09-04T09:06:10.345Z" }, - { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126, upload-time = "2024-09-04T09:06:12.321Z" }, - { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313, upload-time = "2024-09-04T09:06:14.562Z" }, - { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784, upload-time = "2024-09-04T09:06:16.767Z" }, - { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988, upload-time = "2024-09-04T09:06:18.705Z" }, - { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980, upload-time = "2024-09-04T09:06:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847, upload-time = "2024-09-04T09:06:21.407Z" }, - { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494, upload-time = "2024-09-04T09:06:22.648Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257, upload-time = "2024-09-04T09:06:27.038Z" }, - { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906, upload-time = "2024-09-04T09:06:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951, upload-time = "2024-09-04T09:06:29.966Z" }, - { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715, upload-time = "2024-09-04T09:06:31.489Z" }, - { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321, upload-time = "2024-09-04T09:06:47.557Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776, upload-time = "2024-09-04T09:06:49.235Z" }, - { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984, upload-time = "2024-09-04T09:06:51.336Z" }, - { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811, upload-time = "2024-09-04T09:06:53.078Z" }, +version = "1.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/42/0f333164e6307a0687d1eb9ad256215aae2f4bd5d28f4653d6cd319a3ba3/kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9", size = 1628458, upload-time = "2025-08-10T21:25:39.067Z" }, + { url = "https://files.pythonhosted.org/packages/86/b6/2dccb977d651943995a90bfe3495c2ab2ba5cd77093d9f2318a20c9a6f59/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415", size = 1225640, upload-time = "2025-08-10T21:25:40.489Z" }, + { url = "https://files.pythonhosted.org/packages/50/2b/362ebd3eec46c850ccf2bfe3e30f2fc4c008750011f38a850f088c56a1c6/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b", size = 1244074, upload-time = "2025-08-10T21:25:42.221Z" }, + { url = "https://files.pythonhosted.org/packages/6f/bb/f09a1e66dab8984773d13184a10a29fe67125337649d26bdef547024ed6b/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154", size = 1293036, upload-time = "2025-08-10T21:25:43.801Z" }, + { url = "https://files.pythonhosted.org/packages/ea/01/11ecf892f201cafda0f68fa59212edaea93e96c37884b747c181303fccd1/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48", size = 2175310, upload-time = "2025-08-10T21:25:45.045Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5f/bfe11d5b934f500cc004314819ea92427e6e5462706a498c1d4fc052e08f/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220", size = 2270943, upload-time = "2025-08-10T21:25:46.393Z" }, + { url = "https://files.pythonhosted.org/packages/3d/de/259f786bf71f1e03e73d87e2db1a9a3bcab64d7b4fd780167123161630ad/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586", size = 2440488, upload-time = "2025-08-10T21:25:48.074Z" }, + { url = "https://files.pythonhosted.org/packages/1b/76/c989c278faf037c4d3421ec07a5c452cd3e09545d6dae7f87c15f54e4edf/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634", size = 2246787, upload-time = "2025-08-10T21:25:49.442Z" }, + { url = "https://files.pythonhosted.org/packages/a2/55/c2898d84ca440852e560ca9f2a0d28e6e931ac0849b896d77231929900e7/kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611", size = 73730, upload-time = "2025-08-10T21:25:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/e8/09/486d6ac523dd33b80b368247f238125d027964cfacb45c654841e88fb2ae/kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536", size = 65036, upload-time = "2025-08-10T21:25:52.063Z" }, + { url = "https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61", size = 1435596, upload-time = "2025-08-10T21:25:56.861Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/51b73c7347f9aabdc7215aa79e8b15299097dc2f8e67dee2b095faca9cb0/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1", size = 1246548, upload-time = "2025-08-10T21:25:58.246Z" }, + { url = "https://files.pythonhosted.org/packages/21/aa/72a1c5d1e430294f2d32adb9542719cfb441b5da368d09d268c7757af46c/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872", size = 1263618, upload-time = "2025-08-10T21:25:59.857Z" }, + { url = "https://files.pythonhosted.org/packages/a3/af/db1509a9e79dbf4c260ce0cfa3903ea8945f6240e9e59d1e4deb731b1a40/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26", size = 1317437, upload-time = "2025-08-10T21:26:01.105Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f2/3ea5ee5d52abacdd12013a94130436e19969fa183faa1e7c7fbc89e9a42f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028", size = 2195742, upload-time = "2025-08-10T21:26:02.675Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9b/1efdd3013c2d9a2566aa6a337e9923a00590c516add9a1e89a768a3eb2fc/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771", size = 2290810, upload-time = "2025-08-10T21:26:04.009Z" }, + { url = "https://files.pythonhosted.org/packages/fb/e5/cfdc36109ae4e67361f9bc5b41323648cb24a01b9ade18784657e022e65f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a", size = 2461579, upload-time = "2025-08-10T21:26:05.317Z" }, + { url = "https://files.pythonhosted.org/packages/62/86/b589e5e86c7610842213994cdea5add00960076bef4ae290c5fa68589cac/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464", size = 2268071, upload-time = "2025-08-10T21:26:06.686Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2", size = 73840, upload-time = "2025-08-10T21:26:07.94Z" }, + { url = "https://files.pythonhosted.org/packages/e2/2d/16e0581daafd147bc11ac53f032a2b45eabac897f42a338d0a13c1e5c436/kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7", size = 65159, upload-time = "2025-08-10T21:26:09.048Z" }, + { url = "https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04", size = 1474756, upload-time = "2025-08-10T21:26:13.096Z" }, + { url = "https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752", size = 1276404, upload-time = "2025-08-10T21:26:14.457Z" }, + { url = "https://files.pythonhosted.org/packages/2e/64/bc2de94800adc830c476dce44e9b40fd0809cddeef1fde9fcf0f73da301f/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77", size = 1294410, upload-time = "2025-08-10T21:26:15.73Z" }, + { url = "https://files.pythonhosted.org/packages/5f/42/2dc82330a70aa8e55b6d395b11018045e58d0bb00834502bf11509f79091/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198", size = 1343631, upload-time = "2025-08-10T21:26:17.045Z" }, + { url = "https://files.pythonhosted.org/packages/22/fd/f4c67a6ed1aab149ec5a8a401c323cee7a1cbe364381bb6c9c0d564e0e20/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d", size = 2224963, upload-time = "2025-08-10T21:26:18.737Z" }, + { url = "https://files.pythonhosted.org/packages/45/aa/76720bd4cb3713314677d9ec94dcc21ced3f1baf4830adde5bb9b2430a5f/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab", size = 2321295, upload-time = "2025-08-10T21:26:20.11Z" }, + { url = "https://files.pythonhosted.org/packages/80/19/d3ec0d9ab711242f56ae0dc2fc5d70e298bb4a1f9dfab44c027668c673a1/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2", size = 2487987, upload-time = "2025-08-10T21:26:21.49Z" }, + { url = "https://files.pythonhosted.org/packages/39/e9/61e4813b2c97e86b6fdbd4dd824bf72d28bcd8d4849b8084a357bc0dd64d/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145", size = 2291817, upload-time = "2025-08-10T21:26:22.812Z" }, + { url = "https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54", size = 73895, upload-time = "2025-08-10T21:26:24.37Z" }, + { url = "https://files.pythonhosted.org/packages/e2/92/5f3068cf15ee5cb624a0c7596e67e2a0bb2adee33f71c379054a491d07da/kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60", size = 64992, upload-time = "2025-08-10T21:26:25.732Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607, upload-time = "2025-08-10T21:26:29.798Z" }, + { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546, upload-time = "2025-08-10T21:26:31.401Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482, upload-time = "2025-08-10T21:26:32.721Z" }, + { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720, upload-time = "2025-08-10T21:26:34.032Z" }, + { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907, upload-time = "2025-08-10T21:26:35.824Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334, upload-time = "2025-08-10T21:26:37.534Z" }, + { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313, upload-time = "2025-08-10T21:26:39.191Z" }, + { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970, upload-time = "2025-08-10T21:26:40.828Z" }, + { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894, upload-time = "2025-08-10T21:26:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995, upload-time = "2025-08-10T21:26:43.889Z" }, + { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135, upload-time = "2025-08-10T21:26:48.665Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409, upload-time = "2025-08-10T21:26:50.335Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763, upload-time = "2025-08-10T21:26:51.867Z" }, + { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643, upload-time = "2025-08-10T21:26:53.592Z" }, + { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818, upload-time = "2025-08-10T21:26:55.051Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963, upload-time = "2025-08-10T21:26:56.421Z" }, + { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, + { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, + { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, + { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, + { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, + { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, + { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, + { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, + { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, + { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, + { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1a/23d855a702bb35a76faed5ae2ba3de57d323f48b1f6b17ee2176c4849463/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e", size = 80277, upload-time = "2025-08-10T21:27:40.129Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5b/5239e3c2b8fb5afa1e8508f721bb77325f740ab6994d963e61b2b7abcc1e/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9", size = 77994, upload-time = "2025-08-10T21:27:41.181Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1c/5d4d468fb16f8410e596ed0eac02d2c68752aa7dc92997fe9d60a7147665/kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb", size = 73744, upload-time = "2025-08-10T21:27:42.254Z" }, + { url = "https://files.pythonhosted.org/packages/33/01/a8ea7c5ea32a9b45ceeaee051a04c8ed4320f5add3c51bfa20879b765b70/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2", size = 80281, upload-time = "2025-08-10T21:27:45.369Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/dbd2ecdce306f1d07a1aaf324817ee993aab7aee9db47ceac757deabafbe/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f", size = 78009, upload-time = "2025-08-10T21:27:46.376Z" }, + { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" }, ] [[package]] name = "lark" -version = "1.2.2" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/37/a13baf0135f348af608c667633cbe5d13aa2c5c15a56ae9ad3e6cba45ae3/lark-1.3.0.tar.gz", hash = "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48", size = 259551, upload-time = "2025-09-22T13:45:05.072Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3e/1c6b43277de64fc3c0333b0e72ab7b52ddaaea205210d60d9b9f83c3d0c7/lark-1.3.0-py3-none-any.whl", hash = "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831", size = 113002, upload-time = "2025-09-22T13:45:03.747Z" }, ] [[package]] @@ -1575,19 +1723,29 @@ name = "lazy-loader" version = "0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "packaging" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431, upload-time = "2024-04-05T13:03:12.261Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097, upload-time = "2024-04-05T13:03:10.514Z" }, ] +[[package]] +name = "legacy-cgi" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/ed/300cabc9693209d5a03e2ebc5eb5c4171b51607c08ed84a2b71c9015e0f3/legacy_cgi-2.6.3.tar.gz", hash = "sha256:4c119d6cb8e9d8b6ad7cc0ddad880552c62df4029622835d06dfd18f438a8154", size = 24401, upload-time = "2025-03-27T00:48:56.957Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/33/68c6c38193684537757e0d50a7ccb4f4656e5c2f7cd2be737a9d4a1bff71/legacy_cgi-2.6.3-py3-none-any.whl", hash = "sha256:6df2ea5ae14c71ef6f097f8b6372b44f6685283dc018535a75c924564183cdab", size = 19851, upload-time = "2025-03-27T00:48:55.366Z" }, +] + [[package]] name = "libqasm" version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/67/28/bbb9fdb69bc129a4ce3bbd2abe1f994bcb3c990a23a74958ee9ff2b67280/libqasm-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6146a6ee22c00542fc15323aaaca7105a2e45653193e73c97096ab86dec0560", size = 1270891, upload-time = "2025-07-28T14:02:40.297Z" }, @@ -1610,11 +1768,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/5f/a92b65d8cbd96fa8201da49c191b521324d62112867d93137e70deef5944/libqasm-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca69e354a22d80c1ca7f6ae2a7dd095cb33fbc0b49de4afdf66463722321165d", size = 1768542, upload-time = "2025-07-28T14:02:56.488Z" }, { url = "https://files.pythonhosted.org/packages/5d/a1/ea55f32186f785213d82cbc92aae3d54083046dad182f6b7631ec2c636a7/libqasm-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c418cdb7cd84f78ef987c6ca55225f2f8ffdeec4283aeabca427346f40e1f741", size = 1926607, upload-time = "2025-07-28T14:03:03.027Z" }, { url = "https://files.pythonhosted.org/packages/d1/ef/6d32c19edd4d4f9f446cb0b086e4e6666fc0f2f4f4b8bec382fe0fa2cafc/libqasm-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:dfe354c3bffbb2404fd0e7c91c33845a5c06488771050e9f9ec76c2117752c4d", size = 813224, upload-time = "2025-07-28T14:03:08.71Z" }, - { url = "https://files.pythonhosted.org/packages/95/9c/c337cfcce696b5feedf9a55459e87cc13db829df65444dfe14f2a18168d0/libqasm-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ad0b673314569a90c0c96e81b18af0bc0ea41a5a3b9822eb508d2e76b37a6ed", size = 1270899, upload-time = "2025-07-28T14:02:45.997Z" }, - { url = "https://files.pythonhosted.org/packages/c0/18/bddc69b5def3ef5a5682580a4e09adc3324fdd60d57e712bc74bea4cd8e9/libqasm-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acd1b45de6385253fe7479d173b4d5ee808baa2cff651810ddd5b56928ca467", size = 1142062, upload-time = "2025-07-28T14:02:52.05Z" }, - { url = "https://files.pythonhosted.org/packages/c0/fd/10d1d11631056e0a9b204b9f833295837cc90f92ab7a2e94d6d2bdcda708/libqasm-1.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac38d6592f755ad6ed21bcd3d7fe7b7cd941746a0595e985cbd778803368d79f", size = 1767766, upload-time = "2025-07-28T14:02:57.573Z" }, - { url = "https://files.pythonhosted.org/packages/29/a1/267eabad6868ac78b9b8d8f5c16de88c6c8a95c2a45d7ba034c6f061aef8/libqasm-1.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c89e8c223ab3eec42fc5d1975410333d644daa94a9f0adc6e24103d43abc86a", size = 1926335, upload-time = "2025-07-28T14:03:04.539Z" }, - { url = "https://files.pythonhosted.org/packages/6f/0e/2df22d1fe01eff56b674e64d5577fc413841c9e043d8e6d0cf9b417305b7/libqasm-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9163a438f0a566e94048d62c824a6728b7328e8a5cc8eb48d93c5ddb289d9ee3", size = 812858, upload-time = "2025-07-28T14:03:10.037Z" }, ] [[package]] @@ -1622,11 +1775,13 @@ name = "lmfit" version = "1.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "asteval", marker = "python_full_version < '3.10'" }, - { name = "dill", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "uncertainties", marker = "python_full_version < '3.10'" }, + { name = "asteval" }, + { name = "dill" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "uncertainties" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/e5/a35942aed2de95e228728c34609b51fe3ec9182398eac50d288eef313aa2/lmfit-1.3.4.tar.gz", hash = "sha256:3c22c28c43f717f6c5b4a3bd81e893a2149739c26a592c046f2e33c23cfbe497", size = 630720, upload-time = "2025-07-19T20:09:01.876Z" } wheels = [ @@ -1644,188 +1799,230 @@ wheels = [ [[package]] name = "loky" -version = "3.5.5" +version = "3.5.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cloudpickle", marker = "python_full_version < '3.10'" }, + { name = "cloudpickle" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e4/b1/059b0b3e5d98cb5085cb8611bf6e89bc36999dc056d5470a784bfdc74e49/loky-3.5.5.tar.gz", hash = "sha256:0730c7180a35972532f22fe09be600db9d69fed3552aad0410c570acbb47cf41", size = 101789, upload-time = "2025-05-23T08:58:51.242Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/61/690a4503ede61d36cc7fa2d5fa11fe02d94f030bd82155cd8935b2694580/loky-3.5.6.tar.gz", hash = "sha256:d96935ed689aa53eeb7b329769544950fa10a52706968f5d0af3d9c33a761e77", size = 102275, upload-time = "2025-08-27T09:53:52.4Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/3e/4c14113f8b9f8109a437f7148cca584147a611e1b0fc5012b87c7db9876b/loky-3.5.5-py3-none-any.whl", hash = "sha256:0cd7655df3579c4d2f5cf9c6c6f222f44a3cffe6a27e29edc10a573c138995af", size = 56038, upload-time = "2025-05-23T08:58:49.335Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl", hash = "sha256:6d5300ac68cbd5084e89a6a0a187785d6a79950d461c80223d2c9a41d672b3d4", size = 56515, upload-time = "2025-08-27T09:53:51.145Z" }, ] [[package]] name = "lxml" -version = "6.0.0" +version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c5/ed/60eb6fa2923602fba988d9ca7c5cdbd7cf25faa795162ed538b527a35411/lxml-6.0.0.tar.gz", hash = "sha256:032e65120339d44cdc3efc326c9f660f5f7205f3a535c1fdbf898b29ea01fb72", size = 4096938, upload-time = "2025-06-26T16:28:19.373Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/a5/378033415ff61d9175c81de23e7ad20a3ffb614df4ffc2ffc86bc6746ffd/lxml-6.0.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2793a627e95d119e9f1e19720730472f5543a6d84c50ea33313ce328d870f2dd", size = 5291361, upload-time = "2025-06-26T16:25:07.901Z" }, - { url = "https://files.pythonhosted.org/packages/5a/a6/19c87c4f3b9362b08dc5452a3c3bce528130ac9105fc8fff97ce895ce62e/lxml-6.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:46b9ed911f36bfeb6338e0b482e7fe7c27d362c52fde29f221fddbc9ee2227e7", size = 5008290, upload-time = "2025-06-28T18:47:13.196Z" }, - { url = "https://files.pythonhosted.org/packages/09/d1/e9b7ad4b4164d359c4d87ed8c49cb69b443225cb495777e75be0478da5d5/lxml-6.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b4790b558bee331a933e08883c423f65bbcd07e278f91b2272489e31ab1e2b4", size = 5163192, upload-time = "2025-06-28T18:47:17.279Z" }, - { url = "https://files.pythonhosted.org/packages/56/d6/b3eba234dc1584744b0b374a7f6c26ceee5dc2147369a7e7526e25a72332/lxml-6.0.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2030956cf4886b10be9a0285c6802e078ec2391e1dd7ff3eb509c2c95a69b76", size = 5076973, upload-time = "2025-06-26T16:25:10.936Z" }, - { url = "https://files.pythonhosted.org/packages/8e/47/897142dd9385dcc1925acec0c4afe14cc16d310ce02c41fcd9010ac5d15d/lxml-6.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d23854ecf381ab1facc8f353dcd9adeddef3652268ee75297c1164c987c11dc", size = 5297795, upload-time = "2025-06-26T16:25:14.282Z" }, - { url = "https://files.pythonhosted.org/packages/fb/db/551ad84515c6f415cea70193a0ff11d70210174dc0563219f4ce711655c6/lxml-6.0.0-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:43fe5af2d590bf4691531b1d9a2495d7aab2090547eaacd224a3afec95706d76", size = 4776547, upload-time = "2025-06-26T16:25:17.123Z" }, - { url = "https://files.pythonhosted.org/packages/e0/14/c4a77ab4f89aaf35037a03c472f1ccc54147191888626079bd05babd6808/lxml-6.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74e748012f8c19b47f7d6321ac929a9a94ee92ef12bc4298c47e8b7219b26541", size = 5124904, upload-time = "2025-06-26T16:25:19.485Z" }, - { url = "https://files.pythonhosted.org/packages/70/b4/12ae6a51b8da106adec6a2e9c60f532350a24ce954622367f39269e509b1/lxml-6.0.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:43cfbb7db02b30ad3926e8fceaef260ba2fb7df787e38fa2df890c1ca7966c3b", size = 4805804, upload-time = "2025-06-26T16:25:21.949Z" }, - { url = "https://files.pythonhosted.org/packages/a9/b6/2e82d34d49f6219cdcb6e3e03837ca5fb8b7f86c2f35106fb8610ac7f5b8/lxml-6.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34190a1ec4f1e84af256495436b2d196529c3f2094f0af80202947567fdbf2e7", size = 5323477, upload-time = "2025-06-26T16:25:24.475Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e6/b83ddc903b05cd08a5723fefd528eee84b0edd07bdf87f6c53a1fda841fd/lxml-6.0.0-cp310-cp310-win32.whl", hash = "sha256:5967fe415b1920a3877a4195e9a2b779249630ee49ece22021c690320ff07452", size = 3613840, upload-time = "2025-06-26T16:25:27.345Z" }, - { url = "https://files.pythonhosted.org/packages/40/af/874fb368dd0c663c030acb92612341005e52e281a102b72a4c96f42942e1/lxml-6.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f3389924581d9a770c6caa4df4e74b606180869043b9073e2cec324bad6e306e", size = 3993584, upload-time = "2025-06-26T16:25:29.391Z" }, - { url = "https://files.pythonhosted.org/packages/4a/f4/d296bc22c17d5607653008f6dd7b46afdfda12efd31021705b507df652bb/lxml-6.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:522fe7abb41309e9543b0d9b8b434f2b630c5fdaf6482bee642b34c8c70079c8", size = 3681400, upload-time = "2025-06-26T16:25:31.421Z" }, - { url = "https://files.pythonhosted.org/packages/2b/2e/45b7ca8bee304c07f54933c37afe7dd4d39ff61ba2757f519dcc71bc5d44/lxml-6.0.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:d7ae472f74afcc47320238b5dbfd363aba111a525943c8a34a1b657c6be934c3", size = 5221628, upload-time = "2025-06-26T16:25:40.878Z" }, - { url = "https://files.pythonhosted.org/packages/32/23/526d19f7eb2b85da1f62cffb2556f647b049ebe2a5aa8d4d41b1fb2c7d36/lxml-6.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5592401cdf3dc682194727c1ddaa8aa0f3ddc57ca64fd03226a430b955eab6f6", size = 4949429, upload-time = "2025-06-28T18:47:20.046Z" }, - { url = "https://files.pythonhosted.org/packages/ac/cc/f6be27a5c656a43a5344e064d9ae004d4dcb1d3c9d4f323c8189ddfe4d13/lxml-6.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58ffd35bd5425c3c3b9692d078bf7ab851441434531a7e517c4984d5634cd65b", size = 5087909, upload-time = "2025-06-28T18:47:22.834Z" }, - { url = "https://files.pythonhosted.org/packages/3b/e6/8ec91b5bfbe6972458bc105aeb42088e50e4b23777170404aab5dfb0c62d/lxml-6.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f720a14aa102a38907c6d5030e3d66b3b680c3e6f6bc95473931ea3c00c59967", size = 5031713, upload-time = "2025-06-26T16:25:43.226Z" }, - { url = "https://files.pythonhosted.org/packages/33/cf/05e78e613840a40e5be3e40d892c48ad3e475804db23d4bad751b8cadb9b/lxml-6.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2a5e8d207311a0170aca0eb6b160af91adc29ec121832e4ac151a57743a1e1e", size = 5232417, upload-time = "2025-06-26T16:25:46.111Z" }, - { url = "https://files.pythonhosted.org/packages/ac/8c/6b306b3e35c59d5f0b32e3b9b6b3b0739b32c0dc42a295415ba111e76495/lxml-6.0.0-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:2dd1cc3ea7e60bfb31ff32cafe07e24839df573a5e7c2d33304082a5019bcd58", size = 4681443, upload-time = "2025-06-26T16:25:48.837Z" }, - { url = "https://files.pythonhosted.org/packages/59/43/0bd96bece5f7eea14b7220476835a60d2b27f8e9ca99c175f37c085cb154/lxml-6.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cfcf84f1defed7e5798ef4f88aa25fcc52d279be731ce904789aa7ccfb7e8d2", size = 5074542, upload-time = "2025-06-26T16:25:51.65Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3d/32103036287a8ca012d8518071f8852c68f2b3bfe048cef2a0202eb05910/lxml-6.0.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a52a4704811e2623b0324a18d41ad4b9fabf43ce5ff99b14e40a520e2190c851", size = 4729471, upload-time = "2025-06-26T16:25:54.571Z" }, - { url = "https://files.pythonhosted.org/packages/ca/a8/7be5d17df12d637d81854bd8648cd329f29640a61e9a72a3f77add4a311b/lxml-6.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c16304bba98f48a28ae10e32a8e75c349dd742c45156f297e16eeb1ba9287a1f", size = 5256285, upload-time = "2025-06-26T16:25:56.997Z" }, - { url = "https://files.pythonhosted.org/packages/cd/d0/6cb96174c25e0d749932557c8d51d60c6e292c877b46fae616afa23ed31a/lxml-6.0.0-cp311-cp311-win32.whl", hash = "sha256:f8d19565ae3eb956d84da3ef367aa7def14a2735d05bd275cd54c0301f0d0d6c", size = 3612004, upload-time = "2025-06-26T16:25:59.11Z" }, - { url = "https://files.pythonhosted.org/packages/ca/77/6ad43b165dfc6dead001410adeb45e88597b25185f4479b7ca3b16a5808f/lxml-6.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b2d71cdefda9424adff9a3607ba5bbfc60ee972d73c21c7e3c19e71037574816", size = 4003470, upload-time = "2025-06-26T16:26:01.655Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bc/4c50ec0eb14f932a18efc34fc86ee936a66c0eb5f2fe065744a2da8a68b2/lxml-6.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:8a2e76efbf8772add72d002d67a4c3d0958638696f541734304c7f28217a9cab", size = 3682477, upload-time = "2025-06-26T16:26:03.808Z" }, - { url = "https://files.pythonhosted.org/packages/a3/28/e1a9a881e6d6e29dda13d633885d13acb0058f65e95da67841c8dd02b4a8/lxml-6.0.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2930aa001a3776c3e2601cb8e0a15d21b8270528d89cc308be4843ade546b9ab", size = 5228928, upload-time = "2025-06-26T16:26:12.337Z" }, - { url = "https://files.pythonhosted.org/packages/9a/55/2cb24ea48aa30c99f805921c1c7860c1f45c0e811e44ee4e6a155668de06/lxml-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:219e0431ea8006e15005767f0351e3f7f9143e793e58519dc97fe9e07fae5563", size = 4952289, upload-time = "2025-06-28T18:47:25.602Z" }, - { url = "https://files.pythonhosted.org/packages/31/c0/b25d9528df296b9a3306ba21ff982fc5b698c45ab78b94d18c2d6ae71fd9/lxml-6.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bd5913b4972681ffc9718bc2d4c53cde39ef81415e1671ff93e9aa30b46595e7", size = 5111310, upload-time = "2025-06-28T18:47:28.136Z" }, - { url = "https://files.pythonhosted.org/packages/e9/af/681a8b3e4f668bea6e6514cbcb297beb6de2b641e70f09d3d78655f4f44c/lxml-6.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:390240baeb9f415a82eefc2e13285016f9c8b5ad71ec80574ae8fa9605093cd7", size = 5025457, upload-time = "2025-06-26T16:26:15.068Z" }, - { url = "https://files.pythonhosted.org/packages/99/b6/3a7971aa05b7be7dfebc7ab57262ec527775c2c3c5b2f43675cac0458cad/lxml-6.0.0-cp312-cp312-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d6e200909a119626744dd81bae409fc44134389e03fbf1d68ed2a55a2fb10991", size = 5657016, upload-time = "2025-07-03T19:19:06.008Z" }, - { url = "https://files.pythonhosted.org/packages/69/f8/693b1a10a891197143c0673fcce5b75fc69132afa81a36e4568c12c8faba/lxml-6.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca50bd612438258a91b5b3788c6621c1f05c8c478e7951899f492be42defc0da", size = 5257565, upload-time = "2025-06-26T16:26:17.906Z" }, - { url = "https://files.pythonhosted.org/packages/a8/96/e08ff98f2c6426c98c8964513c5dab8d6eb81dadcd0af6f0c538ada78d33/lxml-6.0.0-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:c24b8efd9c0f62bad0439283c2c795ef916c5a6b75f03c17799775c7ae3c0c9e", size = 4713390, upload-time = "2025-06-26T16:26:20.292Z" }, - { url = "https://files.pythonhosted.org/packages/a8/83/6184aba6cc94d7413959f6f8f54807dc318fdcd4985c347fe3ea6937f772/lxml-6.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:afd27d8629ae94c5d863e32ab0e1d5590371d296b87dae0a751fb22bf3685741", size = 5066103, upload-time = "2025-06-26T16:26:22.765Z" }, - { url = "https://files.pythonhosted.org/packages/ee/01/8bf1f4035852d0ff2e36a4d9aacdbcc57e93a6cd35a54e05fa984cdf73ab/lxml-6.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:54c4855eabd9fc29707d30141be99e5cd1102e7d2258d2892314cf4c110726c3", size = 4791428, upload-time = "2025-06-26T16:26:26.461Z" }, - { url = "https://files.pythonhosted.org/packages/29/31/c0267d03b16954a85ed6b065116b621d37f559553d9339c7dcc4943a76f1/lxml-6.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c907516d49f77f6cd8ead1322198bdfd902003c3c330c77a1c5f3cc32a0e4d16", size = 5678523, upload-time = "2025-07-03T19:19:09.837Z" }, - { url = "https://files.pythonhosted.org/packages/5c/f7/5495829a864bc5f8b0798d2b52a807c89966523140f3d6fa3a58ab6720ea/lxml-6.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36531f81c8214e293097cd2b7873f178997dae33d3667caaae8bdfb9666b76c0", size = 5281290, upload-time = "2025-06-26T16:26:29.406Z" }, - { url = "https://files.pythonhosted.org/packages/79/56/6b8edb79d9ed294ccc4e881f4db1023af56ba451909b9ce79f2a2cd7c532/lxml-6.0.0-cp312-cp312-win32.whl", hash = "sha256:690b20e3388a7ec98e899fd54c924e50ba6693874aa65ef9cb53de7f7de9d64a", size = 3613495, upload-time = "2025-06-26T16:26:31.588Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1e/cc32034b40ad6af80b6fd9b66301fc0f180f300002e5c3eb5a6110a93317/lxml-6.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:310b719b695b3dd442cdfbbe64936b2f2e231bb91d998e99e6f0daf991a3eba3", size = 4014711, upload-time = "2025-06-26T16:26:33.723Z" }, - { url = "https://files.pythonhosted.org/packages/55/10/dc8e5290ae4c94bdc1a4c55865be7e1f31dfd857a88b21cbba68b5fea61b/lxml-6.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:8cb26f51c82d77483cdcd2b4a53cda55bbee29b3c2f3ddeb47182a2a9064e4eb", size = 3674431, upload-time = "2025-06-26T16:26:35.959Z" }, - { url = "https://files.pythonhosted.org/packages/8e/74/dd595d92a40bda3c687d70d4487b2c7eff93fd63b568acd64fedd2ba00fe/lxml-6.0.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:51a5e4c61a4541bd1cd3ba74766d0c9b6c12d6a1a4964ef60026832aac8e79b3", size = 5214329, upload-time = "2025-06-26T16:26:44.669Z" }, - { url = "https://files.pythonhosted.org/packages/52/46/3572761efc1bd45fcafb44a63b3b0feeb5b3f0066886821e94b0254f9253/lxml-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d18a25b19ca7307045581b18b3ec9ead2b1db5ccd8719c291f0cd0a5cec6cb81", size = 4947559, upload-time = "2025-06-28T18:47:31.091Z" }, - { url = "https://files.pythonhosted.org/packages/94/8a/5e40de920e67c4f2eef9151097deb9b52d86c95762d8ee238134aff2125d/lxml-6.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4f0c66df4386b75d2ab1e20a489f30dc7fd9a06a896d64980541506086be1f1", size = 5102143, upload-time = "2025-06-28T18:47:33.612Z" }, - { url = "https://files.pythonhosted.org/packages/7c/4b/20555bdd75d57945bdabfbc45fdb1a36a1a0ff9eae4653e951b2b79c9209/lxml-6.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f4b481b6cc3a897adb4279216695150bbe7a44c03daba3c894f49d2037e0a24", size = 5021931, upload-time = "2025-06-26T16:26:47.503Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6e/cf03b412f3763d4ca23b25e70c96a74cfece64cec3addf1c4ec639586b13/lxml-6.0.0-cp313-cp313-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a78d6c9168f5bcb20971bf3329c2b83078611fbe1f807baadc64afc70523b3a", size = 5645469, upload-time = "2025-07-03T19:19:13.32Z" }, - { url = "https://files.pythonhosted.org/packages/d4/dd/39c8507c16db6031f8c1ddf70ed95dbb0a6d466a40002a3522c128aba472/lxml-6.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae06fbab4f1bb7db4f7c8ca9897dc8db4447d1a2b9bee78474ad403437bcc29", size = 5247467, upload-time = "2025-06-26T16:26:49.998Z" }, - { url = "https://files.pythonhosted.org/packages/4d/56/732d49def0631ad633844cfb2664563c830173a98d5efd9b172e89a4800d/lxml-6.0.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:1fa377b827ca2023244a06554c6e7dc6828a10aaf74ca41965c5d8a4925aebb4", size = 4720601, upload-time = "2025-06-26T16:26:52.564Z" }, - { url = "https://files.pythonhosted.org/packages/8f/7f/6b956fab95fa73462bca25d1ea7fc8274ddf68fb8e60b78d56c03b65278e/lxml-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1676b56d48048a62ef77a250428d1f31f610763636e0784ba67a9740823988ca", size = 5060227, upload-time = "2025-06-26T16:26:55.054Z" }, - { url = "https://files.pythonhosted.org/packages/97/06/e851ac2924447e8b15a294855caf3d543424364a143c001014d22c8ca94c/lxml-6.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e32698462aacc5c1cf6bdfebc9c781821b7e74c79f13e5ffc8bfe27c42b1abf", size = 4790637, upload-time = "2025-06-26T16:26:57.384Z" }, - { url = "https://files.pythonhosted.org/packages/06/d4/fd216f3cd6625022c25b336c7570d11f4a43adbaf0a56106d3d496f727a7/lxml-6.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4d6036c3a296707357efb375cfc24bb64cd955b9ec731abf11ebb1e40063949f", size = 5662049, upload-time = "2025-07-03T19:19:16.409Z" }, - { url = "https://files.pythonhosted.org/packages/52/03/0e764ce00b95e008d76b99d432f1807f3574fb2945b496a17807a1645dbd/lxml-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7488a43033c958637b1a08cddc9188eb06d3ad36582cebc7d4815980b47e27ef", size = 5272430, upload-time = "2025-06-26T16:27:00.031Z" }, - { url = "https://files.pythonhosted.org/packages/5f/01/d48cc141bc47bc1644d20fe97bbd5e8afb30415ec94f146f2f76d0d9d098/lxml-6.0.0-cp313-cp313-win32.whl", hash = "sha256:5fcd7d3b1d8ecb91445bd71b9c88bdbeae528fefee4f379895becfc72298d181", size = 3612896, upload-time = "2025-06-26T16:27:04.251Z" }, - { url = "https://files.pythonhosted.org/packages/f4/87/6456b9541d186ee7d4cb53bf1b9a0d7f3b1068532676940fdd594ac90865/lxml-6.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2f34687222b78fff795feeb799a7d44eca2477c3d9d3a46ce17d51a4f383e32e", size = 4013132, upload-time = "2025-06-26T16:27:06.415Z" }, - { url = "https://files.pythonhosted.org/packages/b7/42/85b3aa8f06ca0d24962f8100f001828e1f1f1a38c954c16e71154ed7d53a/lxml-6.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:21db1ec5525780fd07251636eb5f7acb84003e9382c72c18c542a87c416ade03", size = 3672642, upload-time = "2025-06-26T16:27:09.888Z" }, - { url = "https://files.pythonhosted.org/packages/61/aa/b0a8ee233c00f2f437dbb6e7bd2df115a996d8211b7d03f4ab029b8e3378/lxml-6.0.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:b372d10d17a701b0945f67be58fae4664fd056b85e0ff0fbc1e6c951cdbc0512", size = 5292694, upload-time = "2025-06-26T16:27:34.037Z" }, - { url = "https://files.pythonhosted.org/packages/53/7f/e6f377489b2ac4289418b879c34ed664e5a1174b2a91590936ec4174e773/lxml-6.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a674c0948789e9136d69065cc28009c1b1874c6ea340253db58be7622ce6398f", size = 5009177, upload-time = "2025-06-28T18:47:39.377Z" }, - { url = "https://files.pythonhosted.org/packages/c6/05/ae239e997374680741b768044545251a29abc21ada42248638dbed749a0a/lxml-6.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:edf6e4c8fe14dfe316939711e3ece3f9a20760aabf686051b537a7562f4da91a", size = 5163787, upload-time = "2025-06-28T18:47:42.452Z" }, - { url = "https://files.pythonhosted.org/packages/2a/da/4f27222570d008fd2386e19d6923af6e64c317ee6116bbb2b98247f98f31/lxml-6.0.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:048a930eb4572829604982e39a0c7289ab5dc8abc7fc9f5aabd6fbc08c154e93", size = 5075755, upload-time = "2025-06-26T16:27:36.611Z" }, - { url = "https://files.pythonhosted.org/packages/1f/65/12552caf7b3e3b9b9aba12349370dc53a36d4058e4ed482811f1d262deee/lxml-6.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c0b5fa5eda84057a4f1bbb4bb77a8c28ff20ae7ce211588d698ae453e13c6281", size = 5297070, upload-time = "2025-06-26T16:27:39.232Z" }, - { url = "https://files.pythonhosted.org/packages/3e/6a/f053a8369fdf4e3b8127a6ffb079c519167e684e956a1281392c5c3679b6/lxml-6.0.0-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:c352fc8f36f7e9727db17adbf93f82499457b3d7e5511368569b4c5bd155a922", size = 4779864, upload-time = "2025-06-26T16:27:41.713Z" }, - { url = "https://files.pythonhosted.org/packages/df/7b/b2a392ad34ce37a17d1cf3aec303e15125768061cf0e355a92d292d20d37/lxml-6.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8db5dc617cb937ae17ff3403c3a70a7de9df4852a046f93e71edaec678f721d0", size = 5122039, upload-time = "2025-06-26T16:27:44.252Z" }, - { url = "https://files.pythonhosted.org/packages/80/0e/6459ff8ae7d87188e1f99f11691d0f32831caa6429599c3b289de9f08b21/lxml-6.0.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:2181e4b1d07dde53986023482673c0f1fba5178ef800f9ab95ad791e8bdded6a", size = 4805117, upload-time = "2025-06-26T16:27:46.769Z" }, - { url = "https://files.pythonhosted.org/packages/ca/78/4186f573805ff623d28a8736788a3b29eeaf589afdcf0233de2c9bb9fc50/lxml-6.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3c98d5b24c6095e89e03d65d5c574705be3d49c0d8ca10c17a8a4b5201b72f5", size = 5322300, upload-time = "2025-06-26T16:27:49.278Z" }, - { url = "https://files.pythonhosted.org/packages/e8/97/352e07992901473529c8e19dbfdba6430ba6a37f6b46a4d0fa93321f8fee/lxml-6.0.0-cp39-cp39-win32.whl", hash = "sha256:04d67ceee6db4bcb92987ccb16e53bef6b42ced872509f333c04fb58a3315256", size = 3615832, upload-time = "2025-06-26T16:27:51.728Z" }, - { url = "https://files.pythonhosted.org/packages/71/93/8f3b880e2618e548fb0ca157349abb526d81cb4f01ef5ea3a0f22bd4d0df/lxml-6.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e0b1520ef900e9ef62e392dd3d7ae4f5fa224d1dd62897a792cf353eb20b6cae", size = 4038551, upload-time = "2025-06-26T16:27:54.193Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8a/046cbf5b262dd2858c6e65833339100fd5f1c017b37b26bc47c92d4584d7/lxml-6.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:e35e8aaaf3981489f42884b59726693de32dabfc438ac10ef4eb3409961fd402", size = 3684237, upload-time = "2025-06-26T16:27:57.117Z" }, - { url = "https://files.pythonhosted.org/packages/2b/3a/d68cbcb4393a2a0a867528741fafb7ce92dac5c9f4a1680df98e5e53e8f5/lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:40442e2a4456e9910875ac12951476d36c0870dcb38a68719f8c4686609897c4", size = 4216406, upload-time = "2025-06-28T18:47:45.518Z" }, - { url = "https://files.pythonhosted.org/packages/15/8f/d9bfb13dff715ee3b2a1ec2f4a021347ea3caf9aba93dea0cfe54c01969b/lxml-6.0.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db0efd6bae1c4730b9c863fc4f5f3c0fa3e8f05cae2c44ae141cb9dfc7d091dc", size = 4326455, upload-time = "2025-06-28T18:47:48.411Z" }, - { url = "https://files.pythonhosted.org/packages/01/8b/fde194529ee8a27e6f5966d7eef05fa16f0567e4a8e8abc3b855ef6b3400/lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ab542c91f5a47aaa58abdd8ea84b498e8e49fe4b883d67800017757a3eb78e8", size = 4268788, upload-time = "2025-06-26T16:28:02.776Z" }, - { url = "https://files.pythonhosted.org/packages/99/a8/3b8e2581b4f8370fc9e8dc343af4abdfadd9b9229970fc71e67bd31c7df1/lxml-6.0.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:013090383863b72c62a702d07678b658fa2567aa58d373d963cca245b017e065", size = 4411394, upload-time = "2025-06-26T16:28:05.179Z" }, - { url = "https://files.pythonhosted.org/packages/e7/a5/899a4719e02ff4383f3f96e5d1878f882f734377f10dfb69e73b5f223e44/lxml-6.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c86df1c9af35d903d2b52d22ea3e66db8058d21dc0f59842ca5deb0595921141", size = 3517946, upload-time = "2025-06-26T16:28:07.665Z" }, - { url = "https://files.pythonhosted.org/packages/09/8a/1410b9e1ec43f606f9aac0661d09892509d86032e229711798906e1b5e7a/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ae74f7c762270196d2dda56f8dd7309411f08a4084ff2dfcc0b095a218df2e06", size = 4210839, upload-time = "2025-06-28T18:47:50.768Z" }, - { url = "https://files.pythonhosted.org/packages/79/cb/6696ce0d1712c5ae94b18bdf225086a5fb04b23938ac4d2011b323b3860b/lxml-6.0.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:059c4cbf3973a621b62ea3132934ae737da2c132a788e6cfb9b08d63a0ef73f9", size = 4321235, upload-time = "2025-06-28T18:47:53.338Z" }, - { url = "https://files.pythonhosted.org/packages/f3/98/04997f61d720cf320a0daee66b3096e3a3b57453e15549c14b87058c2acd/lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f090a9bc0ce8da51a5632092f98a7e7f84bca26f33d161a98b57f7fb0004ca", size = 4265071, upload-time = "2025-06-26T16:28:12.367Z" }, - { url = "https://files.pythonhosted.org/packages/e6/86/e5f6fa80154a5f5bf2c1e89d6265892299942edeb115081ca72afe7c7199/lxml-6.0.0-pp39-pypy39_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9da022c14baeec36edfcc8daf0e281e2f55b950249a455776f0d1adeeada4734", size = 4406816, upload-time = "2025-06-26T16:28:14.744Z" }, - { url = "https://files.pythonhosted.org/packages/18/a6/ae69e0e6f5fb6293eb8cbfbf8a259e37d71608bbae3658a768dd26b69f3e/lxml-6.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a55da151d0b0c6ab176b4e761670ac0e2667817a1e0dadd04a01d0561a219349", size = 3515499, upload-time = "2025-06-26T16:28:17.035Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/5a/a7d53b3291c324e0b6e48f3c797be63836cc52156ddf8f33cd72aac78866/lxml-6.0.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31", size = 4999961, upload-time = "2025-09-22T04:00:17.619Z" }, + { url = "https://files.pythonhosted.org/packages/f5/55/d465e9b89df1761674d8672bb3e4ae2c47033b01ec243964b6e334c6743f/lxml-6.0.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9", size = 5157087, upload-time = "2025-09-22T04:00:19.868Z" }, + { url = "https://files.pythonhosted.org/packages/62/38/3073cd7e3e8dfc3ba3c3a139e33bee3a82de2bfb0925714351ad3d255c13/lxml-6.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8", size = 5067620, upload-time = "2025-09-22T04:00:21.877Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d3/1e001588c5e2205637b08985597827d3827dbaaece16348c8822bfe61c29/lxml-6.0.2-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba", size = 5406664, upload-time = "2025-09-22T04:00:23.714Z" }, + { url = "https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c", size = 5289397, upload-time = "2025-09-22T04:00:25.544Z" }, + { url = "https://files.pythonhosted.org/packages/a3/84/02a2d0c38ac9a8b9f9e5e1bbd3f24b3f426044ad618b552e9549ee91bd63/lxml-6.0.2-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c", size = 4772178, upload-time = "2025-09-22T04:00:27.602Z" }, + { url = "https://files.pythonhosted.org/packages/56/87/e1ceadcc031ec4aa605fe95476892d0b0ba3b7f8c7dcdf88fdeff59a9c86/lxml-6.0.2-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321", size = 5358148, upload-time = "2025-09-22T04:00:29.323Z" }, + { url = "https://files.pythonhosted.org/packages/fe/13/5bb6cf42bb228353fd4ac5f162c6a84fd68a4d6f67c1031c8cf97e131fc6/lxml-6.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1", size = 5112035, upload-time = "2025-09-22T04:00:31.061Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e2/ea0498552102e59834e297c5c6dff8d8ded3db72ed5e8aad77871476f073/lxml-6.0.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34", size = 4799111, upload-time = "2025-09-22T04:00:33.11Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9e/8de42b52a73abb8af86c66c969b3b4c2a96567b6ac74637c037d2e3baa60/lxml-6.0.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a", size = 5351662, upload-time = "2025-09-22T04:00:35.237Z" }, + { url = "https://files.pythonhosted.org/packages/28/a2/de776a573dfb15114509a37351937c367530865edb10a90189d0b4b9b70a/lxml-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c", size = 5314973, upload-time = "2025-09-22T04:00:37.086Z" }, + { url = "https://files.pythonhosted.org/packages/50/a0/3ae1b1f8964c271b5eec91db2043cf8c6c0bce101ebb2a633b51b044db6c/lxml-6.0.2-cp310-cp310-win32.whl", hash = "sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b", size = 3611953, upload-time = "2025-09-22T04:00:39.224Z" }, + { url = "https://files.pythonhosted.org/packages/d1/70/bd42491f0634aad41bdfc1e46f5cff98825fb6185688dc82baa35d509f1a/lxml-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0", size = 4032695, upload-time = "2025-09-22T04:00:41.402Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d0/05c6a72299f54c2c561a6c6cbb2f512e047fca20ea97a05e57931f194ac4/lxml-6.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5", size = 3680051, upload-time = "2025-09-22T04:00:43.525Z" }, + { url = "https://files.pythonhosted.org/packages/11/84/549098ffea39dfd167e3f174b4ce983d0eed61f9d8d25b7bf2a57c3247fc/lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d", size = 4944362, upload-time = "2025-09-22T04:00:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/ac/bd/f207f16abf9749d2037453d56b643a7471d8fde855a231a12d1e095c4f01/lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438", size = 5083152, upload-time = "2025-09-22T04:00:51.709Z" }, + { url = "https://files.pythonhosted.org/packages/15/ae/bd813e87d8941d52ad5b65071b1affb48da01c4ed3c9c99e40abb266fbff/lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964", size = 5023539, upload-time = "2025-09-22T04:00:53.593Z" }, + { url = "https://files.pythonhosted.org/packages/02/cd/9bfef16bd1d874fbe0cb51afb00329540f30a3283beb9f0780adbb7eec03/lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d", size = 5344853, upload-time = "2025-09-22T04:00:55.524Z" }, + { url = "https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7", size = 5225133, upload-time = "2025-09-22T04:00:57.269Z" }, + { url = "https://files.pythonhosted.org/packages/b9/37/9c735274f5dbec726b2db99b98a43950395ba3d4a1043083dba2ad814170/lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178", size = 4677944, upload-time = "2025-09-22T04:00:59.052Z" }, + { url = "https://files.pythonhosted.org/packages/20/28/7dfe1ba3475d8bfca3878365075abe002e05d40dfaaeb7ec01b4c587d533/lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553", size = 5284535, upload-time = "2025-09-22T04:01:01.335Z" }, + { url = "https://files.pythonhosted.org/packages/e7/cf/5f14bc0de763498fc29510e3532bf2b4b3a1c1d5d0dff2e900c16ba021ef/lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb", size = 5067343, upload-time = "2025-09-22T04:01:03.13Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/bb8275ab5472f32b28cfbbcc6db7c9d092482d3439ca279d8d6fa02f7025/lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a", size = 4725419, upload-time = "2025-09-22T04:01:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/25/4c/7c222753bc72edca3b99dbadba1b064209bc8ed4ad448af990e60dcce462/lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c", size = 5275008, upload-time = "2025-09-22T04:01:07.327Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8c/478a0dc6b6ed661451379447cdbec77c05741a75736d97e5b2b729687828/lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7", size = 5248906, upload-time = "2025-09-22T04:01:09.452Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d9/5be3a6ab2784cdf9accb0703b65e1b64fcdd9311c9f007630c7db0cfcce1/lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46", size = 3610357, upload-time = "2025-09-22T04:01:11.102Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7d/ca6fb13349b473d5732fb0ee3eec8f6c80fc0688e76b7d79c1008481bf1f/lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078", size = 4036583, upload-time = "2025-09-22T04:01:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a2/51363b5ecd3eab46563645f3a2c3836a2fc67d01a1b87c5017040f39f567/lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285", size = 3680591, upload-time = "2025-09-22T04:01:14.874Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807, upload-time = "2025-09-22T04:01:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179, upload-time = "2025-09-22T04:01:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044, upload-time = "2025-09-22T04:01:25.118Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685, upload-time = "2025-09-22T04:01:27.398Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127, upload-time = "2025-09-22T04:01:29.629Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958, upload-time = "2025-09-22T04:01:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541, upload-time = "2025-09-22T04:01:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426, upload-time = "2025-09-22T04:01:35.639Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917, upload-time = "2025-09-22T04:01:37.448Z" }, + { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795, upload-time = "2025-09-22T04:01:39.165Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759, upload-time = "2025-09-22T04:01:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666, upload-time = "2025-09-22T04:01:43.363Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989, upload-time = "2025-09-22T04:01:45.215Z" }, + { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload-time = "2025-09-22T04:01:48.243Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload-time = "2025-09-22T04:01:50.042Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload-time = "2025-09-22T04:01:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload-time = "2025-09-22T04:01:58.989Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload-time = "2025-09-22T04:02:00.812Z" }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload-time = "2025-09-22T04:02:02.671Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload-time = "2025-09-22T04:02:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload-time = "2025-09-22T04:02:06.689Z" }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload-time = "2025-09-22T04:02:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload-time = "2025-09-22T04:02:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload-time = "2025-09-22T04:02:12.631Z" }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload-time = "2025-09-22T04:02:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload-time = "2025-09-22T04:02:16.957Z" }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload-time = "2025-09-22T04:02:18.815Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload-time = "2025-09-22T04:02:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload-time = "2025-09-22T04:02:22.489Z" }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload-time = "2025-09-22T04:02:24.465Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload-time = "2025-09-22T04:02:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload-time = "2025-09-22T04:02:27.918Z" }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5a/1ab260c00adf645d8bf7dec7f920f744b032f69130c681302821d5debea6/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba", size = 4216435, upload-time = "2025-09-22T04:04:34.907Z" }, + { url = "https://files.pythonhosted.org/packages/f2/37/565f3b3d7ffede22874b6d86be1a1763d00f4ea9fc5b9b6ccb11e4ec8612/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5", size = 4325913, upload-time = "2025-09-22T04:04:37.205Z" }, + { url = "https://files.pythonhosted.org/packages/22/ec/f3a1b169b2fb9d03467e2e3c0c752ea30e993be440a068b125fc7dd248b0/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4", size = 4269357, upload-time = "2025-09-22T04:04:39.322Z" }, + { url = "https://files.pythonhosted.org/packages/77/a2/585a28fe3e67daa1cf2f06f34490d556d121c25d500b10082a7db96e3bcd/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d", size = 4412295, upload-time = "2025-09-22T04:04:41.647Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/a57dd8bcebd7c69386c20263830d4fa72d27e6b72a229ef7a48e88952d9a/lxml-6.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d", size = 3516913, upload-time = "2025-09-22T04:04:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/12/b3/52ab9a3b31e5ab8238da241baa19eec44d2ab426532441ee607165aebb52/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee", size = 4226277, upload-time = "2025-09-22T04:04:47.754Z" }, + { url = "https://files.pythonhosted.org/packages/a0/33/1eaf780c1baad88224611df13b1c2a9dfa460b526cacfe769103ff50d845/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f", size = 4330433, upload-time = "2025-09-22T04:04:49.907Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c1/27428a2ff348e994ab4f8777d3a0ad510b6b92d37718e5887d2da99952a2/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9", size = 4272119, upload-time = "2025-09-22T04:04:51.801Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d0/3020fa12bcec4ab62f97aab026d57c2f0cfd480a558758d9ca233bb6a79d/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a", size = 4417314, upload-time = "2025-09-22T04:04:55.024Z" }, + { url = "https://files.pythonhosted.org/packages/6c/77/d7f491cbc05303ac6801651aabeb262d43f319288c1ea96c66b1d2692ff3/lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e", size = 3518768, upload-time = "2025-09-22T04:04:57.097Z" }, ] [[package]] name = "markdown" -version = "3.8.2" +version = "3.9" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585, upload-time = "2025-09-04T20:25:22.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441, upload-time = "2025-09-04T20:25:21.784Z" }, ] [[package]] name = "markdown-it-py" -version = "3.0.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mdurl", marker = "python_full_version < '3.10'" }, + { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, ] [[package]] name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" }, - { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" }, - { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" }, - { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" }, - { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" }, - { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" }, - { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" }, - { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" }, - { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" }, - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, - { url = "https://files.pythonhosted.org/packages/a7/ea/9b1530c3fdeeca613faeb0fb5cbcf2389d816072fab72a71b45749ef6062/MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", size = 14344, upload-time = "2024-10-18T15:21:43.721Z" }, - { url = "https://files.pythonhosted.org/packages/4b/c2/fbdbfe48848e7112ab05e627e718e854d20192b674952d9042ebd8c9e5de/MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", size = 12389, upload-time = "2024-10-18T15:21:44.666Z" }, - { url = "https://files.pythonhosted.org/packages/f0/25/7a7c6e4dbd4f867d95d94ca15449e91e52856f6ed1905d58ef1de5e211d0/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", size = 21607, upload-time = "2024-10-18T15:21:45.452Z" }, - { url = "https://files.pythonhosted.org/packages/53/8f/f339c98a178f3c1e545622206b40986a4c3307fe39f70ccd3d9df9a9e425/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", size = 20728, upload-time = "2024-10-18T15:21:46.295Z" }, - { url = "https://files.pythonhosted.org/packages/1a/03/8496a1a78308456dbd50b23a385c69b41f2e9661c67ea1329849a598a8f9/MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", size = 20826, upload-time = "2024-10-18T15:21:47.134Z" }, - { url = "https://files.pythonhosted.org/packages/e6/cf/0a490a4bd363048c3022f2f475c8c05582179bb179defcee4766fb3dcc18/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", size = 21843, upload-time = "2024-10-18T15:21:48.334Z" }, - { url = "https://files.pythonhosted.org/packages/19/a3/34187a78613920dfd3cdf68ef6ce5e99c4f3417f035694074beb8848cd77/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", size = 21219, upload-time = "2024-10-18T15:21:49.587Z" }, - { url = "https://files.pythonhosted.org/packages/17/d8/5811082f85bb88410ad7e452263af048d685669bbbfb7b595e8689152498/MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", size = 20946, upload-time = "2024-10-18T15:21:50.441Z" }, - { url = "https://files.pythonhosted.org/packages/7c/31/bd635fb5989440d9365c5e3c47556cfea121c7803f5034ac843e8f37c2f2/MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", size = 15063, upload-time = "2024-10-18T15:21:51.385Z" }, - { url = "https://files.pythonhosted.org/packages/b3/73/085399401383ce949f727afec55ec3abd76648d04b9f22e1c0e99cb4bec3/MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", size = 15506, upload-time = "2024-10-18T15:21:52.974Z" }, +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]] @@ -1833,7 +2030,7 @@ name = "marshmallow" version = "3.26.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "packaging" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } wheels = [ @@ -1842,48 +2039,59 @@ wheels = [ [[package]] name = "matplotlib" -version = "3.9.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy", marker = "python_full_version < '3.10'" }, - { name = "cycler", marker = "python_full_version < '3.10'" }, - { name = "fonttools", marker = "python_full_version < '3.10'" }, - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "kiwisolver", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pillow", marker = "python_full_version < '3.10'" }, - { name = "pyparsing", marker = "python_full_version < '3.10'" }, - { name = "python-dateutil", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529, upload-time = "2024-12-13T05:56:34.184Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/65/f841a422ec994da5123368d76b126acf4fc02ea7459b6e37c4891b555b83/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26", size = 8200138, upload-time = "2024-12-13T05:54:29.497Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/272aca07a38804d93b6050813de41ca7ab0e29ba7a9dd098e12037c919a9/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50", size = 8312711, upload-time = "2024-12-13T05:54:34.396Z" }, - { url = "https://files.pythonhosted.org/packages/98/37/f13e23b233c526b7e27ad61be0a771894a079e0f7494a10d8d81557e0e9a/matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5", size = 9090622, upload-time = "2024-12-13T05:54:36.808Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8c/b1f5bd2bd70e60f93b1b54c4d5ba7a992312021d0ddddf572f9a1a6d9348/matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d", size = 7828211, upload-time = "2024-12-13T05:54:40.596Z" }, - { url = "https://files.pythonhosted.org/packages/a2/73/ccb381026e3238c5c25c3609ba4157b2d1a617ec98d65a8b4ee4e1e74d02/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249", size = 8209906, upload-time = "2024-12-13T05:54:49.459Z" }, - { url = "https://files.pythonhosted.org/packages/ab/33/1648da77b74741c89f5ea95cbf42a291b4b364f2660b316318811404ed97/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423", size = 8322873, upload-time = "2024-12-13T05:54:53.066Z" }, - { url = "https://files.pythonhosted.org/packages/57/d3/8447ba78bc6593c9044c372d1609f8ea10fb1e071e7a9e0747bea74fc16c/matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e", size = 9099566, upload-time = "2024-12-13T05:54:55.522Z" }, - { url = "https://files.pythonhosted.org/packages/23/e1/4f0e237bf349c02ff9d1b6e7109f1a17f745263809b9714a8576dc17752b/matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3", size = 7838065, upload-time = "2024-12-13T05:54:58.337Z" }, - { url = "https://files.pythonhosted.org/packages/99/06/b991886c506506476e5d83625c5970c656a491b9f80161458fed94597808/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f", size = 8200707, upload-time = "2024-12-13T05:55:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e2/556b627498cb27e61026f2d1ba86a78ad1b836fef0996bef5440e8bc9559/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00", size = 8313761, upload-time = "2024-12-13T05:55:12.95Z" }, - { url = "https://files.pythonhosted.org/packages/58/ff/165af33ec766ff818306ea88e91f9f60d2a6ed543be1eb122a98acbf3b0d/matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0", size = 9095284, upload-time = "2024-12-13T05:55:16.199Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8b/3d0c7a002db3b1ed702731c2a9a06d78d035f1f2fb0fb936a8e43cc1e9f4/matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b", size = 7841160, upload-time = "2024-12-13T05:55:19.991Z" }, - { url = "https://files.pythonhosted.org/packages/65/87/ac498451aff739e515891bbb92e566f3c7ef31891aaa878402a71f9b0910/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858", size = 8200802, upload-time = "2024-12-13T05:55:28.461Z" }, - { url = "https://files.pythonhosted.org/packages/f8/6b/9eb761c00e1cb838f6c92e5f25dcda3f56a87a52f6cb8fdfa561e6cf6a13/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64", size = 8313880, upload-time = "2024-12-13T05:55:30.965Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a2/c8eaa600e2085eec7e38cbbcc58a30fc78f8224939d31d3152bdafc01fd1/matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df", size = 9094637, upload-time = "2024-12-13T05:55:33.701Z" }, - { url = "https://files.pythonhosted.org/packages/71/1f/c6e1daea55b7bfeb3d84c6cb1abc449f6a02b181e7e2a5e4db34c3afb793/matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799", size = 7841311, upload-time = "2024-12-13T05:55:36.737Z" }, - { url = "https://files.pythonhosted.org/packages/36/c8/c523fd2963156692916a8eb7d4069084cf729359f7955cf09075deddfeaf/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c", size = 8226258, upload-time = "2024-12-13T05:55:47.259Z" }, - { url = "https://files.pythonhosted.org/packages/f6/88/499bf4b8fa9349b6f5c0cf4cead0ebe5da9d67769129f1b5651e5ac51fbc/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764", size = 8335849, upload-time = "2024-12-13T05:55:49.763Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9f/20a4156b9726188646a030774ee337d5ff695a965be45ce4dbcb9312c170/matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041", size = 9102152, upload-time = "2024-12-13T05:55:51.997Z" }, - { url = "https://files.pythonhosted.org/packages/10/11/237f9c3a4e8d810b1759b67ff2da7c32c04f9c80aa475e7beb36ed43a8fb/matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965", size = 7896987, upload-time = "2024-12-13T05:55:55.941Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838, upload-time = "2024-12-13T05:56:06.792Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492, upload-time = "2024-12-13T05:56:09.964Z" }, - { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500, upload-time = "2024-12-13T05:56:13.55Z" }, - { url = "https://files.pythonhosted.org/packages/57/68/c2feb4667adbf882ffa4b3e0ac9967f848980d9f8b5bebd86644aa67ce6a/matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac", size = 7822962, upload-time = "2024-12-13T05:56:16.358Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1f/e709c6ec7b5321e6568769baa288c7178e60a93a9da9e682b39450da0e29/matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db", size = 8313423, upload-time = "2024-12-13T05:56:26.719Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b6/5a1f868782cd13f053a679984e222007ecff654a9bfbac6b27a65f4eeb05/matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865", size = 7854624, upload-time = "2024-12-13T05:56:29.359Z" }, +version = "3.10.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a0/59/c3e6453a9676ffba145309a73c462bb407f4400de7de3f2b41af70720a3c/matplotlib-3.10.6.tar.gz", hash = "sha256:ec01b645840dd1996df21ee37f208cd8ba57644779fa20464010638013d3203c", size = 34804264, upload-time = "2025-08-30T00:14:25.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/5b/a53f69bb0522db352b1135bb57cd9fe00fd7252072409392d991d3a755d0/matplotlib-3.10.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fa4c43d6bfdbfec09c733bca8667de11bfa4970e8324c471f3a3632a0301c15", size = 8680518, upload-time = "2025-08-30T00:12:34.387Z" }, + { url = "https://files.pythonhosted.org/packages/5f/31/e059ddce95f68819b005a2d6820b2d6ed0307827a04598891f00649bed2d/matplotlib-3.10.6-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea117a9c1627acaa04dbf36265691921b999cbf515a015298e54e1a12c3af837", size = 9514997, upload-time = "2025-08-30T00:12:36.272Z" }, + { url = "https://files.pythonhosted.org/packages/66/d5/28b408a7c0f07b41577ee27e4454fe329e78ca21fe46ae7a27d279165fb5/matplotlib-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08fc803293b4e1694ee325896030de97f74c141ccff0be886bb5915269247676", size = 9566440, upload-time = "2025-08-30T00:12:41.675Z" }, + { url = "https://files.pythonhosted.org/packages/2d/99/8325b3386b479b1d182ab1a7fd588fd393ff00a99dc04b7cf7d06668cf0f/matplotlib-3.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:2adf92d9b7527fbfb8818e050260f0ebaa460f79d61546374ce73506c9421d09", size = 8108186, upload-time = "2025-08-30T00:12:43.621Z" }, + { url = "https://files.pythonhosted.org/packages/d3/29/4a8650a3dcae97fa4f375d46efcb25920d67b512186f8a6788b896062a81/matplotlib-3.10.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:942a8de2b5bfff1de31d95722f702e2966b8a7e31f4e68f7cd963c7cd8861cf6", size = 8692682, upload-time = "2025-08-30T00:12:48.781Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d3/b793b9cb061cfd5d42ff0f69d1822f8d5dbc94e004618e48a97a8373179a/matplotlib-3.10.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3276c85370bc0dfca051ec65c5817d1e0f8f5ce1b7787528ec8ed2d524bbc2f", size = 9521065, upload-time = "2025-08-30T00:12:50.602Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c5/53de5629f223c1c66668d46ac2621961970d21916a4bc3862b174eb2a88f/matplotlib-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9df5851b219225731f564e4b9e7f2ac1e13c9e6481f941b5631a0f8e2d9387ce", size = 9576888, upload-time = "2025-08-30T00:12:52.92Z" }, + { url = "https://files.pythonhosted.org/packages/fc/8e/0a18d6d7d2d0a2e66585032a760d13662e5250c784d53ad50434e9560991/matplotlib-3.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:abb5d9478625dd9c9eb51a06d39aae71eda749ae9b3138afb23eb38824026c7e", size = 8115158, upload-time = "2025-08-30T00:12:54.863Z" }, + { url = "https://files.pythonhosted.org/packages/07/b3/1a5107bb66c261e23b9338070702597a2d374e5aa7004b7adfc754fbed02/matplotlib-3.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:886f989ccfae63659183173bb3fced7fd65e9eb793c3cc21c273add368536951", size = 7992444, upload-time = "2025-08-30T00:12:57.067Z" }, + { url = "https://files.pythonhosted.org/packages/67/c3/135fdbbbf84e0979712df58e5e22b4f257b3f5e52a3c4aacf1b8abec0d09/matplotlib-3.10.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:56cd2d20842f58c03d2d6e6c1f1cf5548ad6f66b91e1e48f814e4fb5abd1cb95", size = 8697008, upload-time = "2025-08-30T00:13:03.24Z" }, + { url = "https://files.pythonhosted.org/packages/9c/be/c443ea428fb2488a3ea7608714b1bd85a82738c45da21b447dc49e2f8e5d/matplotlib-3.10.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:662df55604a2f9a45435566d6e2660e41efe83cd94f4288dfbf1e6d1eae4b0bb", size = 9530166, upload-time = "2025-08-30T00:13:05.951Z" }, + { url = "https://files.pythonhosted.org/packages/a9/35/48441422b044d74034aea2a3e0d1a49023f12150ebc58f16600132b9bbaf/matplotlib-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08f141d55148cd1fc870c3387d70ca4df16dee10e909b3b038782bd4bda6ea07", size = 9593105, upload-time = "2025-08-30T00:13:08.356Z" }, + { url = "https://files.pythonhosted.org/packages/45/c3/994ef20eb4154ab84cc08d033834555319e4af970165e6c8894050af0b3c/matplotlib-3.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:590f5925c2d650b5c9d813c5b3b5fc53f2929c3f8ef463e4ecfa7e052044fb2b", size = 8122784, upload-time = "2025-08-30T00:13:10.367Z" }, + { url = "https://files.pythonhosted.org/packages/57/b8/5c85d9ae0e40f04e71bedb053aada5d6bab1f9b5399a0937afb5d6b02d98/matplotlib-3.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:f44c8d264a71609c79a78d50349e724f5d5fc3684ead7c2a473665ee63d868aa", size = 7992823, upload-time = "2025-08-30T00:13:12.24Z" }, + { url = "https://files.pythonhosted.org/packages/e5/b8/9eea6630198cb303d131d95d285a024b3b8645b1763a2916fddb44ca8760/matplotlib-3.10.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84e82d9e0fd70c70bc55739defbd8055c54300750cbacf4740c9673a24d6933a", size = 8698539, upload-time = "2025-08-30T00:13:17.297Z" }, + { url = "https://files.pythonhosted.org/packages/71/34/44c7b1f075e1ea398f88aeabcc2907c01b9cc99e2afd560c1d49845a1227/matplotlib-3.10.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25f7a3eb42d6c1c56e89eacd495661fc815ffc08d9da750bca766771c0fd9110", size = 9529702, upload-time = "2025-08-30T00:13:19.248Z" }, + { url = "https://files.pythonhosted.org/packages/b5/7f/e5c2dc9950c7facaf8b461858d1b92c09dd0cf174fe14e21953b3dda06f7/matplotlib-3.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9c862d91ec0b7842920a4cfdaaec29662195301914ea54c33e01f1a28d014b2", size = 9593742, upload-time = "2025-08-30T00:13:21.181Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1d/70c28528794f6410ee2856cd729fa1f1756498b8d3126443b0a94e1a8695/matplotlib-3.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:1b53bd6337eba483e2e7d29c5ab10eee644bc3a2491ec67cc55f7b44583ffb18", size = 8122753, upload-time = "2025-08-30T00:13:23.44Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/0e1670501fc7d02d981564caf7c4df42974464625935424ca9654040077c/matplotlib-3.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:cbd5eb50b7058b2892ce45c2f4e92557f395c9991f5c886d1bb74a1582e70fd6", size = 7992973, upload-time = "2025-08-30T00:13:26.632Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3f/3c38e78d2aafdb8829fcd0857d25aaf9e7dd2dfcf7ec742765b585774931/matplotlib-3.10.6-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:658bc91894adeab669cf4bb4a186d049948262987e80f0857216387d7435d833", size = 8711719, upload-time = "2025-08-30T00:13:31.72Z" }, + { url = "https://files.pythonhosted.org/packages/96/4b/2ec2bbf8cefaa53207cc56118d1fa8a0f9b80642713ea9390235d331ede4/matplotlib-3.10.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8913b7474f6dd83ac444c9459c91f7f0f2859e839f41d642691b104e0af056aa", size = 9541422, upload-time = "2025-08-30T00:13:33.611Z" }, + { url = "https://files.pythonhosted.org/packages/83/7d/40255e89b3ef11c7871020563b2dd85f6cb1b4eff17c0f62b6eb14c8fa80/matplotlib-3.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:091cea22e059b89f6d7d1a18e2c33a7376c26eee60e401d92a4d6726c4e12706", size = 9594068, upload-time = "2025-08-30T00:13:35.833Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a9/0213748d69dc842537a113493e1c27daf9f96bd7cc316f933dc8ec4de985/matplotlib-3.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:491e25e02a23d7207629d942c666924a6b61e007a48177fdd231a0097b7f507e", size = 8200100, upload-time = "2025-08-30T00:13:37.668Z" }, + { url = "https://files.pythonhosted.org/packages/be/15/79f9988066ce40b8a6f1759a934ea0cde8dc4adc2262255ee1bc98de6ad0/matplotlib-3.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3d80d60d4e54cda462e2cd9a086d85cd9f20943ead92f575ce86885a43a565d5", size = 8042142, upload-time = "2025-08-30T00:13:39.426Z" }, + { url = "https://files.pythonhosted.org/packages/94/bf/ff32f6ed76e78514e98775a53715eca4804b12bdcf35902cdd1cf759d324/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3b23315a01981689aa4e1a179dbf6ef9fbd17143c3eea77548c2ecfb0499438", size = 9533961, upload-time = "2025-08-30T00:13:44.372Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c3/6bf88c2fc2da7708a2ff8d2eeb5d68943130f50e636d5d3dcf9d4252e971/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:30fdd37edf41a4e6785f9b37969de57aea770696cb637d9946eb37470c94a453", size = 9804262, upload-time = "2025-08-30T00:13:46.614Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7a/e05e6d9446d2d577b459427ad060cd2de5742d0e435db3191fea4fcc7e8b/matplotlib-3.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bc31e693da1c08012c764b053e702c1855378e04102238e6a5ee6a7117c53a47", size = 9595508, upload-time = "2025-08-30T00:13:48.731Z" }, + { url = "https://files.pythonhosted.org/packages/39/fb/af09c463ced80b801629fd73b96f726c9f6124c3603aa2e480a061d6705b/matplotlib-3.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:05be9bdaa8b242bc6ff96330d18c52f1fc59c6fb3a4dd411d953d67e7e1baf98", size = 8252742, upload-time = "2025-08-30T00:13:50.539Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f9/b682f6db9396d9ab8f050c0a3bfbb5f14fb0f6518f08507c04cc02f8f229/matplotlib-3.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:f56a0d1ab05d34c628592435781d185cd99630bdfd76822cd686fb5a0aecd43a", size = 8124237, upload-time = "2025-08-30T00:13:54.3Z" }, + { url = "https://files.pythonhosted.org/packages/c4/89/1fbd5ad611802c34d1c7ad04607e64a1350b7fb9c567c4ec2c19e066ed35/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee1d607b3fb1590deb04b69f02ea1d53ed0b0bf75b2b1a5745f269afcbd3cdd3", size = 9541422, upload-time = "2025-08-30T00:14:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/65fec8716025b22c1d72d5a82ea079934c76a547696eaa55be6866bc89b1/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:376a624a218116461696b27b2bbf7a8945053e6d799f6502fc03226d077807bf", size = 9803678, upload-time = "2025-08-30T00:14:04.741Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b0/40fb2b3a1ab9381bb39a952e8390357c8be3bdadcf6d5055d9c31e1b35ae/matplotlib-3.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:83847b47f6524c34b4f2d3ce726bb0541c48c8e7692729865c3df75bfa0f495a", size = 9594077, upload-time = "2025-08-30T00:14:07.012Z" }, + { url = "https://files.pythonhosted.org/packages/76/34/c4b71b69edf5b06e635eee1ed10bfc73cf8df058b66e63e30e6a55e231d5/matplotlib-3.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c7e0518e0d223683532a07f4b512e2e0729b62674f1b3a1a69869f98e6b1c7e3", size = 8342822, upload-time = "2025-08-30T00:14:09.041Z" }, + { url = "https://files.pythonhosted.org/packages/e8/62/aeabeef1a842b6226a30d49dd13e8a7a1e81e9ec98212c0b5169f0a12d83/matplotlib-3.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:4dd83e029f5b4801eeb87c64efd80e732452781c16a9cf7415b7b63ec8f374d7", size = 8172588, upload-time = "2025-08-30T00:14:11.166Z" }, + { url = "https://files.pythonhosted.org/packages/27/27/c29696702b9317a6ade1ba6f8861e02d7423f18501729203d7a80b686f23/matplotlib-3.10.6-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f7173f8551b88f4ef810a94adae3128c2530e0d07529f7141be7f8d8c365f051", size = 8682271, upload-time = "2025-08-30T00:14:17.273Z" }, + { url = "https://files.pythonhosted.org/packages/16/53/8d8fa0ea32a8c8239e04d022f6c059ee5e1b77517769feccd50f1df43d6d/matplotlib-3.10.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d6ca6ef03dfd269f4ead566ec6f3fb9becf8dab146fb999022ed85ee9f6b3eb", size = 8693933, upload-time = "2025-08-30T00:14:22.942Z" }, ] [[package]] @@ -1921,7 +2129,7 @@ name = "methodtools" version = "0.4.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wirerope", marker = "python_full_version < '3.10'" }, + { name = "wirerope" }, ] sdist = { url = "https://files.pythonhosted.org/packages/13/3b/c21b74ac17befdf17b286494b02221b7a84affb1d410ff86e38ba0e14b13/methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba", size = 3586, upload-time = "2023-02-05T13:17:54.473Z" } wheels = [ @@ -1949,14 +2157,14 @@ wheels = [ [[package]] name = "mistune" -version = "3.1.3" +version = "3.1.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload-time = "2025-08-29T07:20:43.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload-time = "2025-03-19T14:27:23.451Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, ] [[package]] @@ -1967,7 +2175,6 @@ dependencies = [ { name = "click" }, { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "ghp-import" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, @@ -1986,16 +2193,16 @@ wheels = [ [[package]] name = "mkdocs-autorefs" -version = "1.4.2" +version = "1.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload-time = "2025-05-20T13:09:09.886Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425, upload-time = "2025-08-26T14:23:17.223Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload-time = "2025-05-20T13:09:08.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034, upload-time = "2025-08-26T14:23:15.906Z" }, ] [[package]] @@ -2037,7 +2244,6 @@ name = "mkdocs-get-deps" version = "0.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "mergedeep" }, { name = "platformdirs" }, { name = "pyyaml" }, @@ -2073,12 +2279,11 @@ wheels = [ [[package]] name = "mkdocs-material" -version = "9.6.17" +version = "9.6.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, { name = "backrefs" }, - { name = "click" }, { name = "colorama" }, { name = "jinja2" }, { name = "markdown" }, @@ -2089,9 +2294,9 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/02/51115cdda743e1551c5c13bdfaaf8c46b959acc57ba914d8ec479dd2fe1f/mkdocs_material-9.6.17.tar.gz", hash = "sha256:48ae7aec72a3f9f501a70be3fbd329c96ff5f5a385b67a1563e5ed5ce064affe", size = 4032898, upload-time = "2025-08-15T16:09:21.412Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/d5/ab83ca9aa314954b0a9e8849780bdd01866a3cfcb15ffb7e3a61ca06ff0b/mkdocs_material-9.6.21.tar.gz", hash = "sha256:b01aa6d2731322438056f360f0e623d3faae981f8f2d8c68b1b973f4f2657870", size = 4043097, upload-time = "2025-09-30T19:11:27.517Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/7c/0f0d44c92c8f3068930da495b752244bd59fd87b5b0f9571fa2d2a93aee7/mkdocs_material-9.6.17-py3-none-any.whl", hash = "sha256:221dd8b37a63f52e580bcab4a7e0290e4a6f59bd66190be9c3d40767e05f9417", size = 9229230, upload-time = "2025-08-15T16:09:18.301Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4f/98681c2030375fe9b057dbfb9008b68f46c07dddf583f4df09bf8075e37f/mkdocs_material-9.6.21-py3-none-any.whl", hash = "sha256:aa6a5ab6fb4f6d381588ac51da8782a4d3757cb3d1b174f81a2ec126e1f22c92", size = 9203097, upload-time = "2025-09-30T19:11:24.063Z" }, ] [[package]] @@ -2116,10 +2321,9 @@ wheels = [ [[package]] name = "mkdocstrings" -version = "0.30.0" +version = "0.30.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "markdown" }, { name = "markupsafe" }, @@ -2127,9 +2331,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/0a/7e4776217d4802009c8238c75c5345e23014a4706a8414a62c0498858183/mkdocstrings-0.30.0.tar.gz", hash = "sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444", size = 106597, upload-time = "2025-07-22T23:48:45.998Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350, upload-time = "2025-09-19T10:49:26.446Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl", hash = "sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2", size = 36579, upload-time = "2025-07-22T23:48:44.152Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704, upload-time = "2025-09-19T10:49:24.805Z" }, ] [package.optional-dependencies] @@ -2139,7 +2343,7 @@ python = [ [[package]] name = "mkdocstrings-python" -version = "1.17.0" +version = "1.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffe" }, @@ -2147,9 +2351,9 @@ dependencies = [ { name = "mkdocstrings" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/7c/6dfd8ad59c0eebae167168528ed6cad00116f58ef2327686149f7b25d175/mkdocstrings_python-1.17.0.tar.gz", hash = "sha256:c6295962b60542a9c7468a3b515ce8524616ca9f8c1a38c790db4286340ba501", size = 200408, upload-time = "2025-08-14T21:18:14.568Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972, upload-time = "2025-08-28T16:11:19.847Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/ac/b1fcc937f4ecd372f3e857162dea67c45c1e2eedbac80447be516e3372bb/mkdocstrings_python-1.17.0-py3-none-any.whl", hash = "sha256:49903fa355dfecc5ad0b891e78ff5d25d30ffd00846952801bbe8331e123d4b0", size = 124778, upload-time = "2025-08-14T21:18:12.821Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215, upload-time = "2025-08-28T16:11:18.176Z" }, ] [[package]] @@ -2163,7 +2367,7 @@ wheels = [ [[package]] name = "mypy" -version = "1.17.1" +version = "1.18.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, @@ -2171,45 +2375,39 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/a9/3d7aa83955617cdf02f94e50aab5c830d205cfa4320cf124ff64acce3a8e/mypy-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3fbe6d5555bf608c47203baa3e72dbc6ec9965b3d7c318aa9a4ca76f465bd972", size = 11003299, upload-time = "2025-07-31T07:54:06.425Z" }, - { url = "https://files.pythonhosted.org/packages/83/e8/72e62ff837dd5caaac2b4a5c07ce769c8e808a00a65e5d8f94ea9c6f20ab/mypy-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80ef5c058b7bce08c83cac668158cb7edea692e458d21098c7d3bce35a5d43e7", size = 10125451, upload-time = "2025-07-31T07:53:52.974Z" }, - { url = "https://files.pythonhosted.org/packages/7d/10/f3f3543f6448db11881776f26a0ed079865926b0c841818ee22de2c6bbab/mypy-1.17.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a580f8a70c69e4a75587bd925d298434057fe2a428faaf927ffe6e4b9a98df", size = 11916211, upload-time = "2025-07-31T07:53:18.879Z" }, - { url = "https://files.pythonhosted.org/packages/06/bf/63e83ed551282d67bb3f7fea2cd5561b08d2bb6eb287c096539feb5ddbc5/mypy-1.17.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd86bb649299f09d987a2eebb4d52d10603224500792e1bee18303bbcc1ce390", size = 12652687, upload-time = "2025-07-31T07:53:30.544Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/68f2eeef11facf597143e85b694a161868b3b006a5fbad50e09ea117ef24/mypy-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a76906f26bd8d51ea9504966a9c25419f2e668f012e0bdf3da4ea1526c534d94", size = 12896322, upload-time = "2025-07-31T07:53:50.74Z" }, - { url = "https://files.pythonhosted.org/packages/a3/87/8e3e9c2c8bd0d7e071a89c71be28ad088aaecbadf0454f46a540bda7bca6/mypy-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:e79311f2d904ccb59787477b7bd5d26f3347789c06fcd7656fa500875290264b", size = 9507962, upload-time = "2025-07-31T07:53:08.431Z" }, - { url = "https://files.pythonhosted.org/packages/46/cf/eadc80c4e0a70db1c08921dcc220357ba8ab2faecb4392e3cebeb10edbfa/mypy-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58", size = 10921009, upload-time = "2025-07-31T07:53:23.037Z" }, - { url = "https://files.pythonhosted.org/packages/5d/c1/c869d8c067829ad30d9bdae051046561552516cfb3a14f7f0347b7d973ee/mypy-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5", size = 10047482, upload-time = "2025-07-31T07:53:26.151Z" }, - { url = "https://files.pythonhosted.org/packages/98/b9/803672bab3fe03cee2e14786ca056efda4bb511ea02dadcedde6176d06d0/mypy-1.17.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd", size = 11832883, upload-time = "2025-07-31T07:53:47.948Z" }, - { url = "https://files.pythonhosted.org/packages/88/fb/fcdac695beca66800918c18697b48833a9a6701de288452b6715a98cfee1/mypy-1.17.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b", size = 12566215, upload-time = "2025-07-31T07:54:04.031Z" }, - { url = "https://files.pythonhosted.org/packages/7f/37/a932da3d3dace99ee8eb2043b6ab03b6768c36eb29a02f98f46c18c0da0e/mypy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5", size = 12751956, upload-time = "2025-07-31T07:53:36.263Z" }, - { url = "https://files.pythonhosted.org/packages/8c/cf/6438a429e0f2f5cab8bc83e53dbebfa666476f40ee322e13cac5e64b79e7/mypy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b", size = 9507307, upload-time = "2025-07-31T07:53:59.734Z" }, - { url = "https://files.pythonhosted.org/packages/17/a2/7034d0d61af8098ec47902108553122baa0f438df8a713be860f7407c9e6/mypy-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb", size = 11086295, upload-time = "2025-07-31T07:53:28.124Z" }, - { url = "https://files.pythonhosted.org/packages/14/1f/19e7e44b594d4b12f6ba8064dbe136505cec813549ca3e5191e40b1d3cc2/mypy-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403", size = 10112355, upload-time = "2025-07-31T07:53:21.121Z" }, - { url = "https://files.pythonhosted.org/packages/5b/69/baa33927e29e6b4c55d798a9d44db5d394072eef2bdc18c3e2048c9ed1e9/mypy-1.17.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056", size = 11875285, upload-time = "2025-07-31T07:53:55.293Z" }, - { url = "https://files.pythonhosted.org/packages/90/13/f3a89c76b0a41e19490b01e7069713a30949d9a6c147289ee1521bcea245/mypy-1.17.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341", size = 12737895, upload-time = "2025-07-31T07:53:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/23/a1/c4ee79ac484241301564072e6476c5a5be2590bc2e7bfd28220033d2ef8f/mypy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb", size = 12931025, upload-time = "2025-07-31T07:54:17.125Z" }, - { url = "https://files.pythonhosted.org/packages/89/b8/7409477be7919a0608900e6320b155c72caab4fef46427c5cc75f85edadd/mypy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19", size = 9584664, upload-time = "2025-07-31T07:54:12.842Z" }, - { url = "https://files.pythonhosted.org/packages/5b/82/aec2fc9b9b149f372850291827537a508d6c4d3664b1750a324b91f71355/mypy-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7", size = 11075338, upload-time = "2025-07-31T07:53:38.873Z" }, - { url = "https://files.pythonhosted.org/packages/07/ac/ee93fbde9d2242657128af8c86f5d917cd2887584cf948a8e3663d0cd737/mypy-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81", size = 10113066, upload-time = "2025-07-31T07:54:14.707Z" }, - { url = "https://files.pythonhosted.org/packages/5a/68/946a1e0be93f17f7caa56c45844ec691ca153ee8b62f21eddda336a2d203/mypy-1.17.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6", size = 11875473, upload-time = "2025-07-31T07:53:14.504Z" }, - { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, - { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, - { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, - { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, - { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, - { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, - { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, - { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, - { url = "https://files.pythonhosted.org/packages/29/cb/673e3d34e5d8de60b3a61f44f80150a738bff568cd6b7efb55742a605e98/mypy-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d1092694f166a7e56c805caaf794e0585cabdbf1df36911c414e4e9abb62ae9", size = 10992466, upload-time = "2025-07-31T07:53:57.574Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d0/fe1895836eea3a33ab801561987a10569df92f2d3d4715abf2cfeaa29cb2/mypy-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79d44f9bfb004941ebb0abe8eff6504223a9c1ac51ef967d1263c6572bbebc99", size = 10117638, upload-time = "2025-07-31T07:53:34.256Z" }, - { url = "https://files.pythonhosted.org/packages/97/f3/514aa5532303aafb95b9ca400a31054a2bd9489de166558c2baaeea9c522/mypy-1.17.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b01586eed696ec905e61bd2568f48740f7ac4a45b3a468e6423a03d3788a51a8", size = 11915673, upload-time = "2025-07-31T07:52:59.361Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c3/c0805f0edec96fe8e2c048b03769a6291523d509be8ee7f56ae922fa3882/mypy-1.17.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43808d9476c36b927fbcd0b0255ce75efe1b68a080154a38ae68a7e62de8f0f8", size = 12649022, upload-time = "2025-07-31T07:53:45.92Z" }, - { url = "https://files.pythonhosted.org/packages/45/3e/d646b5a298ada21a8512fa7e5531f664535a495efa672601702398cea2b4/mypy-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:feb8cc32d319edd5859da2cc084493b3e2ce5e49a946377663cc90f6c15fb259", size = 12895536, upload-time = "2025-07-31T07:53:06.17Z" }, - { url = "https://files.pythonhosted.org/packages/14/55/e13d0dcd276975927d1f4e9e2ec4fd409e199f01bdc671717e673cc63a22/mypy-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d7598cf74c3e16539d4e2f0b8d8c318e00041553d83d4861f87c7a72e95ac24d", size = 9512564, upload-time = "2025-07-31T07:53:12.346Z" }, - { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846, upload-time = "2025-09-19T00:11:10.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/6f/657961a0743cff32e6c0611b63ff1c1970a0b482ace35b069203bf705187/mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c", size = 12807973, upload-time = "2025-09-19T00:10:35.282Z" }, + { url = "https://files.pythonhosted.org/packages/10/e9/420822d4f661f13ca8900f5fa239b40ee3be8b62b32f3357df9a3045a08b/mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e", size = 11896527, upload-time = "2025-09-19T00:10:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/a05b2bbaa7005f4642fcfe40fb73f2b4fb6bb44229bd585b5878e9a87ef8/mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b", size = 12507004, upload-time = "2025-09-19T00:11:05.411Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/f6e4b9f0d031c11ccbd6f17da26564f3a0f3c4155af344006434b0a05a9d/mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66", size = 13245947, upload-time = "2025-09-19T00:10:46.923Z" }, + { url = "https://files.pythonhosted.org/packages/d7/97/19727e7499bfa1ae0773d06afd30ac66a58ed7437d940c70548634b24185/mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428", size = 13499217, upload-time = "2025-09-19T00:09:39.472Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4f/90dc8c15c1441bf31cf0f9918bb077e452618708199e530f4cbd5cede6ff/mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed", size = 9766753, upload-time = "2025-09-19T00:10:49.161Z" }, + { url = "https://files.pythonhosted.org/packages/88/87/cafd3ae563f88f94eec33f35ff722d043e09832ea8530ef149ec1efbaf08/mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f", size = 12731198, upload-time = "2025-09-19T00:09:44.857Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341", size = 11817879, upload-time = "2025-09-19T00:09:47.131Z" }, + { url = "https://files.pythonhosted.org/packages/72/ef/0c9ba89eb03453e76bdac5a78b08260a848c7bfc5d6603634774d9cd9525/mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d", size = 12427292, upload-time = "2025-09-19T00:10:22.472Z" }, + { url = "https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86", size = 13163750, upload-time = "2025-09-19T00:09:51.472Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5f/2cf2ceb3b36372d51568f2208c021870fe7834cf3186b653ac6446511839/mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37", size = 13351827, upload-time = "2025-09-19T00:09:58.311Z" }, + { url = "https://files.pythonhosted.org/packages/c8/7d/2697b930179e7277529eaaec1513f8de622818696857f689e4a5432e5e27/mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8", size = 9757983, upload-time = "2025-09-19T00:10:09.071Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273, upload-time = "2025-09-19T00:10:58.321Z" }, + { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910, upload-time = "2025-09-19T00:10:20.043Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585, upload-time = "2025-09-19T00:10:33.005Z" }, + { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562, upload-time = "2025-09-19T00:10:11.51Z" }, + { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296, upload-time = "2025-09-19T00:10:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828, upload-time = "2025-09-19T00:10:28.203Z" }, + { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728, upload-time = "2025-09-19T00:10:01.33Z" }, + { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758, upload-time = "2025-09-19T00:10:42.607Z" }, + { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342, upload-time = "2025-09-19T00:11:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709, upload-time = "2025-09-19T00:11:03.358Z" }, + { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806, upload-time = "2025-09-19T00:10:26.073Z" }, + { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262, upload-time = "2025-09-19T00:10:40.035Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775, upload-time = "2025-09-19T00:10:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852, upload-time = "2025-09-19T00:10:51.631Z" }, + { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242, upload-time = "2025-09-19T00:11:07.955Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683, upload-time = "2025-09-19T00:09:55.572Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749, upload-time = "2025-09-19T00:10:44.827Z" }, + { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959, upload-time = "2025-09-19T00:10:37.344Z" }, + { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload-time = "2025-09-19T00:10:15.489Z" }, ] [[package]] @@ -2223,11 +2421,11 @@ wheels = [ [[package]] name = "narwhals" -version = "2.1.2" +version = "2.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/37/f0/b0550d9b84759f4d045fd43da2f811e8b23dc2001e38c3254456da7f3adb/narwhals-2.1.2.tar.gz", hash = "sha256:afb9597e76d5b38c2c4b7c37d27a2418b8cc8049a66b8a5aca9581c92ae8f8bf", size = 533772, upload-time = "2025-08-15T08:24:50.916Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/40ff412dabf90ef6b99266b0b74f217bb88733541733849e0153a108c750/narwhals-2.6.0.tar.gz", hash = "sha256:5c9e2ba923e6a0051017e146184e49fb793548936f978ce130c9f55a9a81240e", size = 561649, upload-time = "2025-09-29T09:08:56.482Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/01/824fff6789ce92a53242d24b6f5f3a982df2f610c51020f934bf878d2a99/narwhals-2.1.2-py3-none-any.whl", hash = "sha256:136b2f533a4eb3245c54254f137c5d14cef5c4668cff67dc6e911a602acd3547", size = 392064, upload-time = "2025-08-15T08:24:48.788Z" }, + { url = "https://files.pythonhosted.org/packages/50/3b/0e2c535c3e6970cfc5763b67f6cc31accaab35a7aa3e322fb6a12830450f/narwhals-2.6.0-py3-none-any.whl", hash = "sha256:3215ea42afb452c6c8527e79cefbe542b674aa08d7e2e99d46b2c9708870e0d4", size = 408435, upload-time = "2025-09-29T09:08:54.503Z" }, ] [[package]] @@ -2253,7 +2451,6 @@ dependencies = [ { name = "beautifulsoup4" }, { name = "bleach", extra = ["css"] }, { name = "defusedxml" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "jupyter-core" }, { name = "jupyterlab-pygments" }, @@ -2300,9 +2497,10 @@ name = "netcdf4" version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi", marker = "python_full_version < '3.10'" }, - { name = "cftime", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "certifi" }, + { name = "cftime" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/71/ed/4d27fcfa40ebfdad3d2088a3de7ee48dbff7f35163e815ec1870d2a7398c/netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce", size = 835064, upload-time = "2024-10-22T19:01:25.521Z" } wheels = [ @@ -2318,23 +2516,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/96/d5d8859a6dac29f8ebc815ff8e75770bd513db9f08d7a711e21ae562a948/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30d20e56b9ba2c48884eb89c91b63e6c0612b4927881707e34402719153ef17f", size = 9378149, upload-time = "2024-10-22T19:01:04.924Z" }, { url = "https://files.pythonhosted.org/packages/d1/80/b9c19f1bb4ac6c5fa6f94a4f278bc68a778473d1814a86a375d7cffa193a/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6bfd38ba0bde04d56f06c1554714a2ea9dab75811c89450dc3ec57a9d36b80", size = 9254471, upload-time = "2024-10-22T19:01:07.041Z" }, { url = "https://files.pythonhosted.org/packages/66/b5/e04550fd53de57001dbd5a87242da7ff784c80790adc48897977b6ccf891/netCDF4-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:5c5fbee6134ee1246c397e1508e5297d825aa19221fdf3fa8dc9727ad824d7a5", size = 6990521, upload-time = "2024-10-23T15:02:27.549Z" }, - { url = "https://files.pythonhosted.org/packages/df/26/b6ea7c57b160adb818be27f0967b34cf8381b190d5a61344d25746ab1a7f/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572f71459ef4b30e8554dcc4e1e6f55de515acc82a50968b48fe622244a64548", size = 9208209, upload-time = "2024-10-22T19:01:20.017Z" }, - { url = "https://files.pythonhosted.org/packages/c8/fe/3513828bb4bc48456d0e7971e04ed97632b2c9ebb7713bfdf36e9dfb7770/netCDF4-1.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f77e72281acc5f331f82271e5f7f014d46f5ca9bcaa5aafe3e46d66cee21320", size = 9062374, upload-time = "2024-10-22T19:01:22.053Z" }, - { url = "https://files.pythonhosted.org/packages/16/9c/b6adff49068fd78f72b9f3147ed3485583c573e6a9eea23f3534b8ed8374/netCDF4-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:d0fa7a9674fae8ae4877e813173c3ff7a6beee166b8730bdc847f517b282ed31", size = 7006633, upload-time = "2024-10-22T19:01:23.998Z" }, ] [[package]] name = "networkx" -version = "3.2.1" +version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928, upload-time = "2023-10-28T08:41:39.364Z" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772, upload-time = "2023-10-28T08:41:36.945Z" }, + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, ] [[package]] name = "notebook" -version = "7.4.5" +version = "7.4.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, @@ -2343,9 +2556,9 @@ dependencies = [ { name = "notebook-shim" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9f/21/9669982f9569e7478763837e0d35b9fd9f43de0eb5ab5d6ca620b8019cfc/notebook-7.4.5.tar.gz", hash = "sha256:7c2c4ea245913c3ad8ab3e5d36b34a842c06e524556f5c2e1f5d7d08c986615e", size = 13888993, upload-time = "2025-08-05T07:40:56.529Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/09/f6f64ba156842ef68d3ea763fa171a2f7e7224f200a15dd4af5b83c34756/notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a", size = 13937702, upload-time = "2025-09-27T08:00:22.536Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/c7/207fd1138bd82435d13b6d8640a240be4d855b8ddb41f6bf31aca5be64df/notebook-7.4.5-py3-none-any.whl", hash = "sha256:351635461aca9dad08cf8946a4216f963e2760cc1bf7b1aaaecb23afc33ec046", size = 14295193, upload-time = "2025-08-05T07:40:52.586Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d7/06d13087e20388926e7423d2489e728d2e59f2453039cdb0574a7c070e76/notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6", size = 14342894, upload-time = "2025-09-27T08:00:18.496Z" }, ] [[package]] @@ -2362,86 +2575,222 @@ wheels = [ [[package]] name = "numcodecs" -version = "0.12.1" +version = "0.13.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/56/8895a76abe4ec94ebd01eeb6d74f587bc4cddd46569670e1402852a5da13/numcodecs-0.13.1.tar.gz", hash = "sha256:a3cf37881df0898f3a9c0d4477df88133fe85185bffe57ba31bcc2fa207709bc", size = 5955215, upload-time = "2024-10-09T16:28:00.188Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e4/b9ec2f4dfc34ecf724bc1beb96a9f6fa9b91801645688ffadacd485089da/numcodecs-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96e42f73c31b8c24259c5fac6adba0c3ebf95536e37749dc6c62ade2989dca28", size = 8625842, upload-time = "2024-10-09T16:27:24.168Z" }, + { url = "https://files.pythonhosted.org/packages/fe/90/299952e1477954ec4f92813fa03e743945e3ff711bb4f6c9aace431cb3da/numcodecs-0.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:eda7d7823c9282e65234731fd6bd3986b1f9e035755f7fed248d7d366bb291ab", size = 828638, upload-time = "2024-10-09T16:27:27.063Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b5/d14ad69b63fde041153dfd05d7181a49c0d4864de31a7a1093c8370da957/numcodecs-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233bc7f26abce24d57e44ea8ebeb5cd17084690b4e7409dd470fdb75528d615f", size = 8868743, upload-time = "2024-10-09T16:27:32.833Z" }, + { url = "https://files.pythonhosted.org/packages/13/d4/27a7b5af0b33f6d61e198faf177fbbf3cb83ff10d9d1a6857b7efc525ad5/numcodecs-0.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:796b3e6740107e4fa624cc636248a1580138b3f1c579160f260f76ff13a4261b", size = 829603, upload-time = "2024-10-09T16:27:35.415Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/434e8e3970b8e92ae9ab6d9db16cb9bc7aa1cd02e17c11de6848224100a1/numcodecs-0.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2230484e6102e5fa3cc1a5dd37ca1f92dfbd183d91662074d6f7574e3e8f53", size = 8857827, upload-time = "2024-10-09T16:27:42.743Z" }, + { url = "https://files.pythonhosted.org/packages/83/e7/1d8b1b266a92f9013c755b1c146c5ad71a2bff147ecbc67f86546a2e4d6a/numcodecs-0.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5db4824ebd5389ea30e54bc8aeccb82d514d28b6b68da6c536b8fa4596f4bca", size = 826539, upload-time = "2024-10-09T16:27:44.808Z" }, + { url = "https://files.pythonhosted.org/packages/0f/d6/643a3839d571d8e439a2c77dc4b0b8cab18d96ac808e4a81dbe88e959ab6/numcodecs-0.13.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80d3071465f03522e776a31045ddf2cfee7f52df468b977ed3afdd7fe5869701", size = 8814257, upload-time = "2024-10-09T16:27:52.059Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c5/f3e56bc9b4e438a287fff738993d6d11abef368c0328a612ac2842ba9fca/numcodecs-0.13.1-cp313-cp313-win_amd64.whl", hash = "sha256:90d3065ae74c9342048ae0046006f99dcb1388b7288da5a19b3bddf9c30c3176", size = 821887, upload-time = "2024-10-09T16:27:55.039Z" }, +] + +[[package]] +name = "numcodecs" +version = "0.16.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/1b/1f1d880e29e719c7c6205065d1afbc91114c0d91935ac419faa43e5e08b0/numcodecs-0.12.1.tar.gz", hash = "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e", size = 4091415, upload-time = "2023-10-18T00:47:07.456Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/48/6188e359b90a9d8a1850f2bc888c023e66f4a8b2b496820babbea414f008/numcodecs-0.16.3.tar.gz", hash = "sha256:53d705865faaf0a7927c973af3777532001c8fbb653de119c1e844608614d799", size = 6275704, upload-time = "2025-09-18T18:54:57.221Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/b8/1040f299803eacc9c522fdc69a4dafc42ad0e8722bb48aa43d2310cf195b/numcodecs-0.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e79bf9d1d37199ac00a60ff3adb64757523291d19d03116832e600cac391c51", size = 7709402, upload-time = "2023-10-18T00:46:34.017Z" }, - { url = "https://files.pythonhosted.org/packages/8c/fa/da0637e1a6db74361a2875425021957859749166c0174ddedbb629518970/numcodecs-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82d7107f80f9307235cb7e74719292d101c7ea1e393fe628817f0d635b7384f5", size = 790204, upload-time = "2023-10-18T00:46:36.221Z" }, - { url = "https://files.pythonhosted.org/packages/14/e6/8f9d4a498a06f11a06297f0b02af9968844d2e40ee79d372ccee33595285/numcodecs-0.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a191a8e347ecd016e5c357f2bf41fbcb026f6ffe78fff50c77ab12e96701d155", size = 7949787, upload-time = "2023-10-18T00:46:41.978Z" }, - { url = "https://files.pythonhosted.org/packages/08/f3/44597198c2cfb0d808d68583445b60b0d0ae057f20f0caf2a1200405655e/numcodecs-0.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:21d8267bd4313f4d16f5b6287731d4c8ebdab236038f29ad1b0e93c9b2ca64ee", size = 790313, upload-time = "2023-10-18T00:46:44.6Z" }, - { url = "https://files.pythonhosted.org/packages/3b/88/fb3186f944b9586e9c4c54bd1d1899947b88465ad3ab1ff1111066871644/numcodecs-0.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c258bd1d3dfa75a9b708540d23b2da43d63607f9df76dfa0309a7597d1de3b73", size = 7944856, upload-time = "2023-10-18T00:46:50.546Z" }, - { url = "https://files.pythonhosted.org/packages/f4/03/54e22e273d584e83100ffa60c47c29cae905015ecb1f693918072c3595b9/numcodecs-0.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e04649ea504aff858dbe294631f098fbfd671baf58bfc04fc48d746554c05d67", size = 787000, upload-time = "2023-10-18T00:46:52.098Z" }, - { url = "https://files.pythonhosted.org/packages/6d/0f/0442e80d707b5dd2e177a9490c25b89aa6a6c44579de8ec223e78a8884da/numcodecs-0.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f", size = 7722207, upload-time = "2023-10-18T00:47:04.378Z" }, - { url = "https://files.pythonhosted.org/packages/77/b6/345f8648874a81232bc1a87e55a771430488a832c68f873aa6ed23a1dedf/numcodecs-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136", size = 792870, upload-time = "2023-10-18T00:47:05.879Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a0/0de627baeb43e2045a3d4b3de99bf8b69af329a33df1ed4cda468d70c1fb/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913f08194d82dcb37594e6705e6d4ae6ccd4b6571500b832fb3e4a155de1dfe8", size = 8341668, upload-time = "2025-09-18T18:54:39.444Z" }, + { url = "https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a7f1cae9eb18b85709af46570bf9c60056e7155c4c8f610e8080c68124d0e5", size = 8866611, upload-time = "2025-09-18T18:54:41.168Z" }, + { url = "https://files.pythonhosted.org/packages/aa/51/03aece765108fe247717105b5131856546e5428f22a56a14ffdebd017424/numcodecs-0.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7bb7f2c46eb7ec8a1c5f8d8fe1a72c222256dd6d6df5af9eaac7a6b905f3575", size = 806787, upload-time = "2025-09-18T18:54:42.78Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ae/670260c3c4b5ed34a0674561355f3d4ce7fcbdf09a667e5bc841526d271c/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f43fa4a347d1dba775c4506a1c9b15b90144c258433b81f79f1c1b1a990db5", size = 8316365, upload-time = "2025-09-18T18:54:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fa/94e022419c751a60ff0f53642ebae5ef81ed3cc3640f958588e3ad3dc18d/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44869ef564a50aa545215c6a0d42ba5bbc34e9715523fb2336ada3d1fb2b331d", size = 8846228, upload-time = "2025-09-18T18:54:47.858Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/f23733589f3e059bf8589508acd23ffeec230bdf179f138a54f5ab16e0a6/numcodecs-0.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:9aae6996172ba10c5f5111b2998709071b5aeba6b58b1ee0b26b61ed6aa7f2f4", size = 806260, upload-time = "2025-09-18T18:54:49.41Z" }, + { url = "https://files.pythonhosted.org/packages/98/05/b7c127283cfb154a97abb284363825401b69302d71a28608af66f73257cc/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7938502fcc060ed9543814f38ca67048b33d7bd2667756e36e6b1060455b17e", size = 8260987, upload-time = "2025-09-18T18:54:52.883Z" }, + { url = "https://files.pythonhosted.org/packages/ff/46/320d960aff884bc63abaaf846ffa3de4803e83e8070b6f84c5688464839c/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010d628c95be1214536fb22c0df4ced58da954b404b1fcb25ddebf64e4a3f7f3", size = 8805295, upload-time = "2025-09-18T18:54:54.698Z" }, + { url = "https://files.pythonhosted.org/packages/31/ae/acc2e0f1f49ba32afa2174578f170673139248ef86f77e334f2619133867/numcodecs-0.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:e83115e3c32de798c7b7164503e06aae9f9746c1cef564d029616eb44bd6cd90", size = 803204, upload-time = "2025-09-18T18:54:56.192Z" }, +] + +[package.optional-dependencies] +crc32c = [ + { name = "crc32c", marker = "python_full_version >= '3.11'" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, ] [[package]] name = "numpy" -version = "2.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" }, - { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" }, - { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" }, - { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" }, - { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" }, - { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" }, - { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" }, - { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" }, - { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" }, - { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" }, - { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" }, - { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" }, - { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" }, - { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" }, - { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" }, - { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" }, - { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" }, - { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" }, - { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" }, - { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, - { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, - { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, - { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" }, - { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" }, - { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" }, - { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" }, - { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" }, - { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" }, - { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" }, - { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" }, +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648, upload-time = "2025-09-09T16:54:12.543Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/45/e80d203ef6b267aa29b22714fb558930b27960a0c5ce3c19c999232bb3eb/numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d", size = 21259253, upload-time = "2025-09-09T15:56:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/52/18/cf2c648fccf339e59302e00e5f2bc87725a3ce1992f30f3f78c9044d7c43/numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569", size = 14450980, upload-time = "2025-09-09T15:56:05.926Z" }, + { url = "https://files.pythonhosted.org/packages/93/fb/9af1082bec870188c42a1c239839915b74a5099c392389ff04215dcee812/numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f", size = 5379709, upload-time = "2025-09-09T15:56:07.95Z" }, + { url = "https://files.pythonhosted.org/packages/75/0f/bfd7abca52bcbf9a4a65abc83fe18ef01ccdeb37bfb28bbd6ad613447c79/numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125", size = 6913923, upload-time = "2025-09-09T15:56:09.443Z" }, + { url = "https://files.pythonhosted.org/packages/79/55/d69adad255e87ab7afda1caf93ca997859092afeb697703e2f010f7c2e55/numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48", size = 14589591, upload-time = "2025-09-09T15:56:11.234Z" }, + { url = "https://files.pythonhosted.org/packages/10/a2/010b0e27ddeacab7839957d7a8f00e91206e0c2c47abbb5f35a2630e5387/numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6", size = 16938714, upload-time = "2025-09-09T15:56:14.637Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6b/12ce8ede632c7126eb2762b9e15e18e204b81725b81f35176eac14dc5b82/numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa", size = 16370592, upload-time = "2025-09-09T15:56:17.285Z" }, + { url = "https://files.pythonhosted.org/packages/b4/35/aba8568b2593067bb6a8fe4c52babb23b4c3b9c80e1b49dff03a09925e4a/numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30", size = 18884474, upload-time = "2025-09-09T15:56:20.943Z" }, + { url = "https://files.pythonhosted.org/packages/45/fa/7f43ba10c77575e8be7b0138d107e4f44ca4a1ef322cd16980ea3e8b8222/numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57", size = 6599794, upload-time = "2025-09-09T15:56:23.258Z" }, + { url = "https://files.pythonhosted.org/packages/0a/a2/a4f78cb2241fe5664a22a10332f2be886dcdea8784c9f6a01c272da9b426/numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa", size = 13088104, upload-time = "2025-09-09T15:56:25.476Z" }, + { url = "https://files.pythonhosted.org/packages/79/64/e424e975adbd38282ebcd4891661965b78783de893b381cbc4832fb9beb2/numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7", size = 10460772, upload-time = "2025-09-09T15:56:27.679Z" }, + { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014, upload-time = "2025-09-09T15:56:29.966Z" }, + { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220, upload-time = "2025-09-09T15:56:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918, upload-time = "2025-09-09T15:56:34.175Z" }, + { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922, upload-time = "2025-09-09T15:56:36.149Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991, upload-time = "2025-09-09T15:56:40.548Z" }, + { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643, upload-time = "2025-09-09T15:56:43.343Z" }, + { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787, upload-time = "2025-09-09T15:56:46.141Z" }, + { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598, upload-time = "2025-09-09T15:56:49.844Z" }, + { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800, upload-time = "2025-09-09T15:56:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615, upload-time = "2025-09-09T15:56:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936, upload-time = "2025-09-09T15:56:56.541Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588, upload-time = "2025-09-09T15:56:59.087Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802, upload-time = "2025-09-09T15:57:01.73Z" }, + { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537, upload-time = "2025-09-09T15:57:03.765Z" }, + { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743, upload-time = "2025-09-09T15:57:07.921Z" }, + { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881, upload-time = "2025-09-09T15:57:11.349Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301, upload-time = "2025-09-09T15:57:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645, upload-time = "2025-09-09T15:57:16.534Z" }, + { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179, upload-time = "2025-09-09T15:57:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250, upload-time = "2025-09-09T15:57:21.296Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269, upload-time = "2025-09-09T15:57:23.034Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314, upload-time = "2025-09-09T15:57:25.045Z" }, + { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025, upload-time = "2025-09-09T15:57:27.257Z" }, + { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053, upload-time = "2025-09-09T15:57:30.077Z" }, + { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444, upload-time = "2025-09-09T15:57:32.733Z" }, + { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039, upload-time = "2025-09-09T15:57:34.328Z" }, + { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314, upload-time = "2025-09-09T15:57:36.255Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722, upload-time = "2025-09-09T15:57:38.622Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755, upload-time = "2025-09-09T15:57:41.16Z" }, + { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560, upload-time = "2025-09-09T15:57:43.459Z" }, + { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776, upload-time = "2025-09-09T15:57:45.793Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281, upload-time = "2025-09-09T15:57:47.492Z" }, + { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275, upload-time = "2025-09-09T15:57:49.647Z" }, + { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527, upload-time = "2025-09-09T15:57:52.006Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159, upload-time = "2025-09-09T15:57:54.407Z" }, + { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624, upload-time = "2025-09-09T15:57:56.5Z" }, + { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627, upload-time = "2025-09-09T15:57:58.206Z" }, + { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926, upload-time = "2025-09-09T15:58:00.035Z" }, + { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958, upload-time = "2025-09-09T15:58:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920, upload-time = "2025-09-09T15:58:05.029Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076, upload-time = "2025-09-09T15:58:07.745Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952, upload-time = "2025-09-09T15:58:10.096Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322, upload-time = "2025-09-09T15:58:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630, upload-time = "2025-09-09T15:58:14.64Z" }, + { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987, upload-time = "2025-09-09T15:58:16.889Z" }, + { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076, upload-time = "2025-09-09T15:58:20.343Z" }, + { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491, upload-time = "2025-09-09T15:58:22.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913, upload-time = "2025-09-09T15:58:24.569Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811, upload-time = "2025-09-09T15:58:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689, upload-time = "2025-09-09T15:58:28.831Z" }, + { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855, upload-time = "2025-09-09T15:58:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520, upload-time = "2025-09-09T15:58:33.762Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371, upload-time = "2025-09-09T15:58:36.04Z" }, + { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576, upload-time = "2025-09-09T15:58:37.927Z" }, + { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953, upload-time = "2025-09-09T15:58:40.576Z" }, + { url = "https://files.pythonhosted.org/packages/b8/f2/7e0a37cfced2644c9563c529f29fa28acbd0960dde32ece683aafa6f4949/numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e", size = 21131019, upload-time = "2025-09-09T15:58:42.838Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/3291f505297ed63831135a6cc0f474da0c868a1f31b0dd9a9f03a7a0d2ed/numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150", size = 14376288, upload-time = "2025-09-09T15:58:45.425Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4b/ae02e985bdeee73d7b5abdefeb98aef1207e96d4c0621ee0cf228ddfac3c/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3", size = 5305425, upload-time = "2025-09-09T15:58:48.6Z" }, + { url = "https://files.pythonhosted.org/packages/8b/eb/9df215d6d7250db32007941500dc51c48190be25f2401d5b2b564e467247/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0", size = 6819053, upload-time = "2025-09-09T15:58:50.401Z" }, + { url = "https://files.pythonhosted.org/packages/57/62/208293d7d6b2a8998a4a1f23ac758648c3c32182d4ce4346062018362e29/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e", size = 14420354, upload-time = "2025-09-09T15:58:52.704Z" }, + { url = "https://files.pythonhosted.org/packages/ed/0c/8e86e0ff7072e14a71b4c6af63175e40d1e7e933ce9b9e9f765a95b4e0c3/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db", size = 16760413, upload-time = "2025-09-09T15:58:55.027Z" }, + { url = "https://files.pythonhosted.org/packages/af/11/0cc63f9f321ccf63886ac203336777140011fb669e739da36d8db3c53b98/numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc", size = 12971844, upload-time = "2025-09-09T15:58:57.359Z" }, ] [[package]] name = "opensquirrel" -version = "0.6.0" +version = "0.6.1" source = { editable = "." } dependencies = [ { name = "libqasm" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "scipy", version = "1.16.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] [package.dev-dependencies] @@ -2473,39 +2822,38 @@ examples = [ { name = "jupyter" }, ] export = [ - { name = "pyqt5-qt5", marker = "python_full_version < '3.10' and sys_platform != 'darwin'" }, - { name = "quantify-scheduler", marker = "python_full_version < '3.10' and sys_platform != 'darwin'" }, + { name = "pyqt5-qt5", marker = "sys_platform != 'darwin'" }, + { name = "quantify-scheduler", marker = "sys_platform != 'darwin'" }, ] [package.metadata] requires-dist = [ { name = "libqasm", specifier = "==1.2.1" }, - { name = "networkx", specifier = ">=3.0.0,<4" }, - { name = "numpy", specifier = ">=1.26" }, - { name = "scipy", marker = "python_full_version < '3.10'", specifier = ">=1.11.4" }, - { name = "scipy", marker = "python_full_version >= '3.10'", specifier = ">=1.14,<2.0" }, + { name = "networkx", specifier = ">=3.4.2" }, + { name = "numpy", specifier = ">=2.2.6" }, + { name = "scipy", specifier = ">=1.15.3" }, ] [package.metadata.requires-dev] dev = [ - { name = "coverage", specifier = ">=7.3.2,<8" }, - { name = "ipython", specifier = ">=7.12,<9.0" }, - { name = "mypy", specifier = ">=1.7.0,<2" }, - { name = "pytest", specifier = ">=7.4.3,<9.0.0" }, + { name = "coverage", specifier = ">=7.10.7,<8" }, + { name = "ipython", specifier = ">=8.37,<9" }, + { name = "mypy", specifier = ">=1.18.2,<2" }, + { name = "pytest", specifier = ">=8.4.2,<9" }, { name = "pytest-cov", specifier = ">=4.1,<8.0" }, - { name = "ruff", specifier = ">=0.5,<0.14" }, - { name = "sympy", specifier = ">=1.13.1,<2" }, - { name = "tox", specifier = ">=4.24.1,<5" }, + { name = "ruff", specifier = ">=0.13.2,<0.14" }, + { name = "sympy", specifier = ">=1.14.0,<2" }, + { name = "tox", specifier = ">=4.30.2,<5" }, ] docs = [ { name = "mike", specifier = ">=2.1.3" }, - { name = "mkdocs", specifier = ">=1.5.3,<2" }, + { name = "mkdocs", specifier = ">=1.6.1,<2" }, { name = "mkdocs-build-plantuml-plugin", specifier = "==1.9.0" }, { name = "mkdocs-exclude", specifier = "==1.0.2" }, { name = "mkdocs-gen-files", specifier = ">=0.5.0,<0.6" }, { name = "mkdocs-glightbox", specifier = "==0.5.1" }, - { name = "mkdocs-literate-nav", specifier = ">=0.6.1,<0.7" }, - { name = "mkdocs-material", specifier = ">=9.4.12,<10" }, + { name = "mkdocs-literate-nav", specifier = ">=0.6.2,<0.7" }, + { name = "mkdocs-material", specifier = ">=9.6.20,<10" }, { name = "mkdocs-material-extensions", specifier = "==1.3.1" }, { name = "mkdocs-render-swagger-plugin", specifier = "==0.1.2" }, { name = "mkdocstrings", extras = ["python"], specifier = ">=0.24,<0.31" }, @@ -2513,21 +2861,21 @@ docs = [ ] examples = [{ name = "jupyter", specifier = ">=1.0.0,<2" }] export = [ - { name = "pyqt5-qt5", marker = "python_full_version < '3.10' and sys_platform != 'darwin'", specifier = "==5.15.2" }, - { name = "quantify-scheduler", marker = "python_full_version < '3.10' and sys_platform != 'darwin'", specifier = ">=0.18.0,<0.19" }, + { name = "pyqt5-qt5", marker = "sys_platform != 'darwin'", specifier = "==5.15.2" }, + { name = "quantify-scheduler", marker = "sys_platform != 'darwin'", specifier = "==0.23.1" }, ] [[package]] name = "opentelemetry-api" -version = "1.36.0" +version = "1.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "importlib-metadata" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/27/d2/c782c88b8afbf961d6972428821c302bd1e9e7bc361352172f0ca31296e2/opentelemetry_api-1.36.0.tar.gz", hash = "sha256:9a72572b9c416d004d492cbc6e61962c0501eaf945ece9b5a0f56597d8348aa0", size = 64780, upload-time = "2025-07-29T15:12:06.02Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/04/05040d7ce33a907a2a02257e601992f0cdf11c73b33f13c4492bf6c3d6d5/opentelemetry_api-1.37.0.tar.gz", hash = "sha256:540735b120355bd5112738ea53621f8d5edb35ebcd6fe21ada3ab1c61d1cd9a7", size = 64923, upload-time = "2025-09-11T10:29:01.662Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/ee/6b08dde0a022c463b88f55ae81149584b125a42183407dc1045c486cc870/opentelemetry_api-1.36.0-py3-none-any.whl", hash = "sha256:02f20bcacf666e1333b6b1f04e647dc1d5111f86b8e510238fcc56d7762cda8c", size = 65564, upload-time = "2025-07-29T15:11:47.998Z" }, + { url = "https://files.pythonhosted.org/packages/91/48/28ed9e55dcf2f453128df738210a980e09f4e468a456fa3c763dbc8be70a/opentelemetry_api-1.37.0-py3-none-any.whl", hash = "sha256:accf2024d3e89faec14302213bc39550ec0f4095d1cf5ca688e1bfb1c8612f47", size = 65732, upload-time = "2025-09-11T10:28:41.826Z" }, ] [[package]] @@ -2568,51 +2916,56 @@ wheels = [ [[package]] name = "pandas" -version = "2.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "python-dateutil", marker = "python_full_version < '3.10'" }, - { name = "pytz", marker = "python_full_version < '3.10'" }, - { name = "tzdata", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/6f/75aa71f8a14267117adeeed5d21b204770189c0a0025acbdc03c337b28fc/pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", size = 4487493, upload-time = "2025-07-07T19:20:04.079Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/2f/9af748366763b2a494fed477f88051dbf06f56053d5c00eba652697e3f94/pandas-2.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0", size = 11724083, upload-time = "2025-07-07T19:18:20.512Z" }, - { url = "https://files.pythonhosted.org/packages/2c/95/79ab37aa4c25d1e7df953dde407bb9c3e4ae47d154bc0dd1692f3a6dcf8c/pandas-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191", size = 12342360, upload-time = "2025-07-07T19:18:23.194Z" }, - { url = "https://files.pythonhosted.org/packages/75/a7/d65e5d8665c12c3c6ff5edd9709d5836ec9b6f80071b7f4a718c6106e86e/pandas-2.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1", size = 13202098, upload-time = "2025-07-07T19:18:25.558Z" }, - { url = "https://files.pythonhosted.org/packages/65/f3/4c1dbd754dbaa79dbf8b537800cb2fa1a6e534764fef50ab1f7533226c5c/pandas-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97", size = 13837228, upload-time = "2025-07-07T19:18:28.344Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d6/d7f5777162aa9b48ec3910bca5a58c9b5927cfd9cfde3aa64322f5ba4b9f/pandas-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83", size = 11336561, upload-time = "2025-07-07T19:18:31.211Z" }, - { url = "https://files.pythonhosted.org/packages/8a/4c/367c98854a1251940edf54a4df0826dcacfb987f9068abf3e3064081a382/pandas-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85", size = 11793570, upload-time = "2025-07-07T19:18:38.385Z" }, - { url = "https://files.pythonhosted.org/packages/07/5f/63760ff107bcf5146eee41b38b3985f9055e710a72fdd637b791dea3495c/pandas-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d", size = 12378887, upload-time = "2025-07-07T19:18:41.284Z" }, - { url = "https://files.pythonhosted.org/packages/15/53/f31a9b4dfe73fe4711c3a609bd8e60238022f48eacedc257cd13ae9327a7/pandas-2.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678", size = 13230957, upload-time = "2025-07-07T19:18:44.187Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/6fce6bf85b5056d065e0a7933cba2616dcb48596f7ba3c6341ec4bcc529d/pandas-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299", size = 13883883, upload-time = "2025-07-07T19:18:46.498Z" }, - { url = "https://files.pythonhosted.org/packages/c8/7b/bdcb1ed8fccb63d04bdb7635161d0ec26596d92c9d7a6cce964e7876b6c1/pandas-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab", size = 11340212, upload-time = "2025-07-07T19:18:49.293Z" }, - { url = "https://files.pythonhosted.org/packages/51/a5/c76a8311833c24ae61a376dbf360eb1b1c9247a5d9c1e8b356563b31b80c/pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", size = 11280411, upload-time = "2025-07-07T19:18:57.045Z" }, - { url = "https://files.pythonhosted.org/packages/da/01/e383018feba0a1ead6cf5fe8728e5d767fee02f06a3d800e82c489e5daaf/pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", size = 11988013, upload-time = "2025-07-07T19:18:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/5b/14/cec7760d7c9507f11c97d64f29022e12a6cc4fc03ac694535e89f88ad2ec/pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", size = 12767210, upload-time = "2025-07-07T19:19:02.944Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/6e2d2c6728ed29fb3d4d4d302504fb66f1a543e37eb2e43f352a86365cdf/pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", size = 13440571, upload-time = "2025-07-07T19:19:06.82Z" }, - { url = "https://files.pythonhosted.org/packages/80/a5/3a92893e7399a691bad7664d977cb5e7c81cf666c81f89ea76ba2bff483d/pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", size = 10987601, upload-time = "2025-07-07T19:19:09.589Z" }, - { url = "https://files.pythonhosted.org/packages/0f/b0/80f6ec783313f1e2356b28b4fd8d2148c378370045da918c73145e6aab50/pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", size = 11342004, upload-time = "2025-07-07T19:19:16.857Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", size = 12050869, upload-time = "2025-07-07T19:19:19.265Z" }, - { url = "https://files.pythonhosted.org/packages/55/79/20d746b0a96c67203a5bee5fb4e00ac49c3e8009a39e1f78de264ecc5729/pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", size = 12750218, upload-time = "2025-07-07T19:19:21.547Z" }, - { url = "https://files.pythonhosted.org/packages/7c/0f/145c8b41e48dbf03dd18fdd7f24f8ba95b8254a97a3379048378f33e7838/pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", size = 13416763, upload-time = "2025-07-07T19:19:23.939Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c0/54415af59db5cdd86a3d3bf79863e8cc3fa9ed265f0745254061ac09d5f2/pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", size = 10987482, upload-time = "2025-07-07T19:19:42.699Z" }, - { url = "https://files.pythonhosted.org/packages/50/ae/ff885d2b6e88f3c7520bb74ba319268b42f05d7e583b5dded9837da2723f/pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", size = 11309381, upload-time = "2025-07-07T19:19:31.436Z" }, - { url = "https://files.pythonhosted.org/packages/85/86/1fa345fc17caf5d7780d2699985c03dbe186c68fee00b526813939062bb0/pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", size = 11883998, upload-time = "2025-07-07T19:19:34.267Z" }, - { url = "https://files.pythonhosted.org/packages/81/aa/e58541a49b5e6310d89474333e994ee57fea97c8aaa8fc7f00b873059bbf/pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", size = 12704705, upload-time = "2025-07-07T19:19:36.856Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f9/07086f5b0f2a19872554abeea7658200824f5835c58a106fa8f2ae96a46c/pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", size = 13189044, upload-time = "2025-07-07T19:19:39.999Z" }, - { url = "https://files.pythonhosted.org/packages/2d/55/66cd2b679f6a27398380eac7574bc24746128f74626a3c02b978ea00e5ce/pandas-2.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da", size = 11763000, upload-time = "2025-07-07T19:19:50.83Z" }, - { url = "https://files.pythonhosted.org/packages/ae/1c/5b9b263c80fd5e231b77df6f78cd7426d1d4ad3a4e858e85b7b3d93d0e9c/pandas-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e", size = 12361395, upload-time = "2025-07-07T19:19:53.714Z" }, - { url = "https://files.pythonhosted.org/packages/f7/74/7e817b31413fbb96366ea327d43d1926a9c48c58074e27e094e2839a0e36/pandas-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7", size = 13225086, upload-time = "2025-07-07T19:19:56.378Z" }, - { url = "https://files.pythonhosted.org/packages/1f/0f/bc0a44b47eba2f22ae4235719a573d552ef7ad76ed3ea39ae62d554e040b/pandas-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88", size = 13871698, upload-time = "2025-07-07T19:19:58.854Z" }, - { url = "https://files.pythonhosted.org/packages/fa/cb/6c32f8fadefa4314b740fbe8f74f6a02423bd1549e7c930826df35ac3c1b/pandas-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d", size = 11357186, upload-time = "2025-07-07T19:20:01.475Z" }, +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, ] [package.optional-dependencies] output-formatting = [ - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "tabulate", marker = "python_full_version < '3.10'" }, + { name = "jinja2" }, + { name = "tabulate" }, ] [[package]] @@ -2626,11 +2979,11 @@ wheels = [ [[package]] name = "parso" -version = "0.8.4" +version = "0.8.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, ] [[package]] @@ -2638,8 +2991,8 @@ name = "partd" version = "1.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "locket", marker = "python_full_version < '3.10'" }, - { name = "toolz", marker = "python_full_version < '3.10'" }, + { name = "locket" }, + { name = "toolz" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } wheels = [ @@ -2748,15 +3101,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, - { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, - { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, - { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, - { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, - { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, - { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, - { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, - { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" }, { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" }, @@ -2771,24 +3115,24 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.3.8" +version = "4.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, ] [[package]] name = "plotly" -version = "6.3.0" +version = "6.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "narwhals", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, + { name = "narwhals" }, + { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/64/850de5076f4436410e1ce4f6a69f4313ef6215dfea155f3f6559335cad29/plotly-6.3.0.tar.gz", hash = "sha256:8840a184d18ccae0f9189c2b9a2943923fd5cae7717b723f36eef78f444e5a73", size = 6923926, upload-time = "2025-08-12T20:22:14.127Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/63/961d47c9ffd592a575495891cdcf7875dc0903ebb33ac238935714213789/plotly-6.3.1.tar.gz", hash = "sha256:dd896e3d940e653a7ce0470087e82c2bd903969a55e30d1b01bb389319461bb0", size = 6956460, upload-time = "2025-10-02T16:10:34.16Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/a9/12e2dc726ba1ba775a2c6922d5d5b4488ad60bdab0888c337c194c8e6de8/plotly-6.3.0-py3-none-any.whl", hash = "sha256:7ad806edce9d3cdd882eaebaf97c0c9e252043ed1ed3d382c3e3520ec07806d4", size = 9791257, upload-time = "2025-08-12T20:22:09.205Z" }, + { url = "https://files.pythonhosted.org/packages/3f/93/023955c26b0ce614342d11cc0652f1e45e32393b6ab9d11a664a60e9b7b7/plotly-6.3.1-py3-none-any.whl", hash = "sha256:8b4420d1dcf2b040f5983eed433f95732ed24930e496d36eb70d211923532e64", size = 9833698, upload-time = "2025-10-02T16:10:22.584Z" }, ] [[package]] @@ -2805,9 +3149,9 @@ name = "pooch" version = "1.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "platformdirs", marker = "python_full_version < '3.10'" }, - { name = "requests", marker = "python_full_version < '3.10'" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353, upload-time = "2024-06-06T16:53:46.224Z" } wheels = [ @@ -2816,38 +3160,39 @@ wheels = [ [[package]] name = "prometheus-client" -version = "0.22.1" +version = "0.23.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746, upload-time = "2025-06-02T14:29:01.152Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/53/3edb5d68ecf6b38fcbcc1ad28391117d2a322d9a1a3eff04bfdb184d8c3b/prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce", size = 80481, upload-time = "2025-09-18T20:47:25.043Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694, upload-time = "2025-06-02T14:29:00.068Z" }, + { url = "https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99", size = 61145, upload-time = "2025-09-18T20:47:23.875Z" }, ] [[package]] name = "prompt-toolkit" -version = "3.0.51" +version = "3.0.52" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, ] [[package]] name = "psutil" -version = "7.0.0" +version = "7.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660, upload-time = "2025-09-17T20:14:52.902Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242, upload-time = "2025-09-17T20:14:56.126Z" }, + { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682, upload-time = "2025-09-17T20:14:58.25Z" }, + { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994, upload-time = "2025-09-17T20:14:59.901Z" }, + { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163, upload-time = "2025-09-17T20:15:01.481Z" }, + { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625, upload-time = "2025-09-17T20:15:04.492Z" }, + { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812, upload-time = "2025-09-17T20:15:07.462Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965, upload-time = "2025-09-17T20:15:09.673Z" }, + { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971, upload-time = "2025-09-17T20:15:12.262Z" }, ] [[package]] @@ -2899,35 +3244,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, - { url = "https://files.pythonhosted.org/packages/68/a8/197f989b9a75e59b4ca0db6a13c56f19a0ad8a298c68da9cc28145e0bb97/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b4d97e297741796fead24867a8dabf86c87e4584ccc03167e4a811f50fdf74d", size = 41067862, upload-time = "2025-07-18T00:57:07.587Z" }, - { url = "https://files.pythonhosted.org/packages/fa/82/6ecfa89487b35aa21accb014b64e0a6b814cc860d5e3170287bf5135c7d8/pyarrow-21.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:898afce396b80fdda05e3086b4256f8677c671f7b1d27a6976fa011d3fd0a86e", size = 42747508, upload-time = "2025-07-18T00:57:13.917Z" }, - { url = "https://files.pythonhosted.org/packages/3b/b7/ba252f399bbf3addc731e8643c05532cf32e74cebb5e32f8f7409bc243cf/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4", size = 43345293, upload-time = "2025-07-18T00:57:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0a/a20819795bd702b9486f536a8eeb70a6aa64046fce32071c19ec8230dbaa/pyarrow-21.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0c4e75d13eb76295a49e0ea056eb18dbd87d81450bfeb8afa19a7e5a75ae2ad7", size = 45060670, upload-time = "2025-07-18T00:57:24.477Z" }, - { url = "https://files.pythonhosted.org/packages/10/15/6b30e77872012bbfe8265d42a01d5b3c17ef0ac0f2fae531ad91b6a6c02e/pyarrow-21.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdc4c17afda4dab2a9c0b79148a43a7f4e1094916b3e18d8975bfd6d6d52241f", size = 26227521, upload-time = "2025-07-18T00:57:29.119Z" }, ] [[package]] name = "pycparser" -version = "2.22" +version = "2.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, ] [[package]] name = "pydantic" -version = "2.11.7" +version = "2.11.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types", marker = "python_full_version < '3.10'" }, - { name = "pydantic-core", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, - { name = "typing-inspection", marker = "python_full_version < '3.10'" }, + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload-time = "2025-09-13T11:26:39.325Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload-time = "2025-09-13T11:26:36.909Z" }, ] [[package]] @@ -2935,7 +3275,7 @@ name = "pydantic-core" version = "2.33.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } wheels = [ @@ -2988,17 +3328,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/23/9a/2e70d6388d7cda488ae38f57bc2f7b03ee442fbcf0d75d848304ac7e405b/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb", size = 1898467, upload-time = "2025-04-23T18:32:31.119Z" }, - { url = "https://files.pythonhosted.org/packages/ff/2e/1568934feb43370c1ffb78a77f0baaa5a8b6897513e7a91051af707ffdc4/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7", size = 1983041, upload-time = "2025-04-23T18:32:33.655Z" }, - { url = "https://files.pythonhosted.org/packages/01/1a/1a1118f38ab64eac2f6269eb8c120ab915be30e387bb561e3af904b12499/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4", size = 2136503, upload-time = "2025-04-23T18:32:35.519Z" }, - { url = "https://files.pythonhosted.org/packages/5c/da/44754d1d7ae0f22d6d3ce6c6b1486fc07ac2c524ed8f6eca636e2e1ee49b/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b", size = 2736079, upload-time = "2025-04-23T18:32:37.659Z" }, - { url = "https://files.pythonhosted.org/packages/4d/98/f43cd89172220ec5aa86654967b22d862146bc4d736b1350b4c41e7c9c03/pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3", size = 2006508, upload-time = "2025-04-23T18:32:39.637Z" }, - { url = "https://files.pythonhosted.org/packages/2b/cc/f77e8e242171d2158309f830f7d5d07e0531b756106f36bc18712dc439df/pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a", size = 2113693, upload-time = "2025-04-23T18:32:41.818Z" }, - { url = "https://files.pythonhosted.org/packages/54/7a/7be6a7bd43e0a47c147ba7fbf124fe8aaf1200bc587da925509641113b2d/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782", size = 2074224, upload-time = "2025-04-23T18:32:44.033Z" }, - { url = "https://files.pythonhosted.org/packages/2a/07/31cf8fadffbb03be1cb520850e00a8490c0927ec456e8293cafda0726184/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9", size = 2245403, upload-time = "2025-04-23T18:32:45.836Z" }, - { url = "https://files.pythonhosted.org/packages/b6/8d/bbaf4c6721b668d44f01861f297eb01c9b35f612f6b8e14173cb204e6240/pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e", size = 2242331, upload-time = "2025-04-23T18:32:47.618Z" }, - { url = "https://files.pythonhosted.org/packages/bb/93/3cc157026bca8f5006250e74515119fcaa6d6858aceee8f67ab6dc548c16/pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9", size = 1910571, upload-time = "2025-04-23T18:32:49.401Z" }, - { url = "https://files.pythonhosted.org/packages/5b/90/7edc3b2a0d9f0dda8806c04e511a67b0b7a41d2187e2003673a996fb4310/pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3", size = 1956504, upload-time = "2025-04-23T18:32:51.287Z" }, { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, @@ -3013,33 +3342,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, - { url = "https://files.pythonhosted.org/packages/d8/60/bc06fa9027c7006cc6dd21e48dbf39076dc39d9abbaf718a1604973a9670/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d", size = 1892858, upload-time = "2025-04-23T18:33:36.933Z" }, - { url = "https://files.pythonhosted.org/packages/f2/40/9d03997d9518816c68b4dfccb88969756b9146031b61cd37f781c74c9b6a/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535", size = 2068498, upload-time = "2025-04-23T18:33:38.997Z" }, - { url = "https://files.pythonhosted.org/packages/d8/62/d490198d05d2d86672dc269f52579cad7261ced64c2df213d5c16e0aecb1/pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d", size = 2108428, upload-time = "2025-04-23T18:33:41.18Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ec/4cd215534fd10b8549015f12ea650a1a973da20ce46430b68fc3185573e8/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6", size = 2069854, upload-time = "2025-04-23T18:33:43.446Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1a/abbd63d47e1d9b0d632fee6bb15785d0889c8a6e0a6c3b5a8e28ac1ec5d2/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca", size = 2237859, upload-time = "2025-04-23T18:33:45.56Z" }, - { url = "https://files.pythonhosted.org/packages/80/1c/fa883643429908b1c90598fd2642af8839efd1d835b65af1f75fba4d94fe/pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039", size = 2239059, upload-time = "2025-04-23T18:33:47.735Z" }, - { url = "https://files.pythonhosted.org/packages/d4/29/3cade8a924a61f60ccfa10842f75eb12787e1440e2b8660ceffeb26685e7/pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27", size = 2066661, upload-time = "2025-04-23T18:33:49.995Z" }, ] [[package]] name = "pydap" -version = "3.5" +version = "3.5.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "beautifulsoup4", marker = "python_full_version < '3.10'" }, - { name = "docopt-ng", marker = "python_full_version < '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "lxml", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "requests", marker = "python_full_version < '3.10'" }, - { name = "webob", marker = "python_full_version < '3.10'" }, + { name = "beautifulsoup4", marker = "python_full_version >= '3.11'" }, + { name = "lxml", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "requests-cache", marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "webob", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/77e0556cee5a0ec6462b3e1d5fae943831147018f676d5105fd13a43f819/pydap-3.5.tar.gz", hash = "sha256:0ee6cb7a4892ef22a15c4e2aa58b2656104c542c74faf16c580c56fdf97647ab", size = 4385073, upload-time = "2024-08-16T20:42:35.892Z" } +sdist = { url = "https://files.pythonhosted.org/packages/31/db/ac93329f396d32a111370195ff6cf25e1f30e7d3c050ad119eadc0e092b4/pydap-3.5.7.tar.gz", hash = "sha256:1e2ae9a87ee980564bff7da34b2e51fdf1629d6e74ae8ed52bc6fdf96a6c4a21", size = 12112901, upload-time = "2025-09-26T05:18:20.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/86/78e74c4d1ce2ad79420edf8dbe50034f6e98c35b83f3a55a9c0a83f25114/pydap-3.5-py3-none-any.whl", hash = "sha256:e157aefdbc26657ef531ecea73907bbf09a503499bfefada2f0ad5f3aaff4021", size = 2380842, upload-time = "2024-08-16T20:42:33.563Z" }, + { url = "https://files.pythonhosted.org/packages/3b/61/df917dc9e5190fc3498741710e2143c02aef458f232c69c6a790107a4beb/pydap-3.5.7-py3-none-any.whl", hash = "sha256:2792772c46e0dc4cfcc8d42fbe022aee82fd55bda09ec46e193ba1f92900bf92", size = 2423125, upload-time = "2025-09-26T05:18:18.007Z" }, ] [[package]] @@ -3066,11 +3386,11 @@ wheels = [ [[package]] name = "pyparsing" -version = "3.2.3" +version = "3.2.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, + { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, ] [[package]] @@ -3091,8 +3411,8 @@ name = "pyqt5" version = "5.15.11" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyqt5-qt5", marker = "python_full_version < '3.10'" }, - { name = "pyqt5-sip", marker = "python_full_version < '3.10'" }, + { name = "pyqt5-qt5" }, + { name = "pyqt5-sip" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } wheels = [ @@ -3129,9 +3449,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cd/cb/3b2050e9644d0021bdf25ddf7e4c3526e1edd0198879e76ba308e5d44faf/PyQt5_sip-12.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:419b9027e92b0b707632c370cfc6dc1f3b43c6313242fc4db57a537029bd179c", size = 281563, upload-time = "2025-02-02T17:12:59.421Z" }, { url = "https://files.pythonhosted.org/packages/51/61/b8ebde7e0b32d0de44c521a0ace31439885b0423d7d45d010a2f7d92808c/PyQt5_sip-12.17.0-cp313-cp313-win32.whl", hash = "sha256:351beab964a19f5671b2a3e816ecf4d3543a99a7e0650f88a947fea251a7589f", size = 49383, upload-time = "2025-02-02T17:13:00.597Z" }, { url = "https://files.pythonhosted.org/packages/15/ed/ff94d6b2910e7627380cb1fc9a518ff966e6d78285c8e54c9422b68305db/PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca", size = 58022, upload-time = "2025-02-02T17:13:01.738Z" }, - { url = "https://files.pythonhosted.org/packages/23/63/8a934ea1f759eee60b4e0143e5b109d16560bf67593bfed76cca55799a1a/PyQt5_sip-12.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:32b03e7e77ecd7b4119eba486b0706fa59b490bcceb585f9b6ddec8a582082db", size = 268531, upload-time = "2025-02-02T17:13:06.005Z" }, - { url = "https://files.pythonhosted.org/packages/34/80/0df0cdb7b25a87346a493cedb20f6eeb0301e7fbc02ed23d9077df998291/PyQt5_sip-12.17.0-cp39-cp39-win32.whl", hash = "sha256:5b6c734f4ad28f3defac4890ed747d391d246af279200935d49953bc7d915b8c", size = 49005, upload-time = "2025-02-02T17:13:07.741Z" }, - { url = "https://files.pythonhosted.org/packages/30/f5/2fd274c4fe9513d750eecfbe0c39937a179534446e148d8b9db4255f429a/PyQt5_sip-12.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:855e8f5787d57e26a48d8c3de1220a8e92ab83be8d73966deac62fdae03ea2f9", size = 59076, upload-time = "2025-02-02T17:13:09.643Z" }, ] [[package]] @@ -3139,7 +3456,8 @@ name = "pyqtgraph" version = "0.13.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/d9/b62d5cddb3caa6e5145664bee5ed90223dee23ca887ed3ee479f2609e40a/pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3", size = 2343380, upload-time = "2024-04-29T02:18:58.467Z" } wheels = [ @@ -3157,7 +3475,7 @@ wheels = [ [[package]] name = "pytest" -version = "8.4.1" +version = "8.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -3168,23 +3486,23 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, ] [[package]] name = "pytest-cov" -version = "6.2.1" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, ] [[package]] @@ -3203,9 +3521,6 @@ wheels = [ name = "python-json-logger" version = "3.3.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, @@ -3222,14 +3537,14 @@ wheels = [ [[package]] name = "pyvisa" -version = "1.14.1" +version = "1.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/77/577366efd9cff08ddfedcf14f678ff57bb1a6287ccdf157972e6d9e7b494/PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79", size = 234683, upload-time = "2023-11-22T07:33:45.658Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/04/1833acfa4ddefc5cdcfd76607f1bf494e7b7b658d890626e23026655d599/pyvisa-1.15.0.tar.gz", hash = "sha256:cec3cb91703a2849f6faa42b1ecd7689a0175baabff8ca33fce9f45934ce45e6", size = 236289, upload-time = "2025-04-01T15:52:25.377Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/a0/0e739df84e0fc61abecc6b4b70ad7aea7f5d7ee37ec504baa365c0fec9da/PyVISA-1.14.1-py3-none-any.whl", hash = "sha256:6e4dfc9b6029b4f00d0d4960348c4889c2747aa7f83276950d48a349eab36a45", size = 176651, upload-time = "2023-11-22T07:33:43.496Z" }, + { url = "https://files.pythonhosted.org/packages/a1/12/4979772f36acceb57664bde282fc7bd3e67f8d0ce85f2a521a05e90baaa5/pyvisa-1.15.0-py3-none-any.whl", hash = "sha256:e3ac8d9e863fbdbbe7e6d4d91401bceb7914d1c4a558a89b2cc755789f1e8309", size = 179199, upload-time = "2025-04-01T15:52:23.631Z" }, ] [[package]] @@ -3252,9 +3567,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, - { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837, upload-time = "2025-07-14T20:12:59.59Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187, upload-time = "2025-07-14T20:13:01.419Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162, upload-time = "2025-07-14T20:13:03.544Z" }, ] [[package]] @@ -3268,60 +3580,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/d9/bd2249815c305ef8f879b326db1fe1effc8e5f22bd88e522b4b55231aa6f/pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3", size = 2051564, upload-time = "2025-08-12T20:37:09.128Z" }, { url = "https://files.pythonhosted.org/packages/e2/77/358b1a97c1d0714f288949372ec64a70884a7eceb3f887042b9ae0bea388/pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1", size = 2050856, upload-time = "2025-08-12T20:36:09.117Z" }, { url = "https://files.pythonhosted.org/packages/8f/6c/4249cfb4eb4fdad2c76bc96db0642a40111847c375b92e5b9f4bf289ddd6/pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69", size = 2050082, upload-time = "2025-08-12T20:36:28.591Z" }, - { url = "https://files.pythonhosted.org/packages/5a/c6/8c73d678dd30a7a3684dab242833c7bb709722cf1ca98f9f2da6f9d15bab/pywinpty-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:007735316170ec1b6e773deadab5fe9ec4074dfdc06f27513fe87b8cfe45237d", size = 2051676, upload-time = "2025-08-12T20:36:14.63Z" }, ] [[package]] name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, - { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload-time = "2024-08-06T20:33:25.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload-time = "2024-08-06T20:33:27.212Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload-time = "2024-08-06T20:33:28.974Z" }, - { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614, upload-time = "2024-08-06T20:33:34.157Z" }, - { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360, upload-time = "2024-08-06T20:33:35.84Z" }, - { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006, upload-time = "2024-08-06T20:33:37.501Z" }, - { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577, upload-time = "2024-08-06T20:33:39.389Z" }, - { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593, upload-time = "2024-08-06T20:33:46.63Z" }, - { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312, upload-time = "2024-08-06T20:33:49.073Z" }, +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]] @@ -3338,142 +3660,173 @@ wheels = [ [[package]] name = "pyzmq" -version = "27.0.1" +version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/5f/557d2032a2f471edbcc227da724c24a1c05887b5cda1e3ae53af98b9e0a5/pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b", size = 281158, upload-time = "2025-08-03T05:05:40.352Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/0b/ccf4d0b152a6a11f0fc01e73978202fe0e8fe0e91e20941598e83a170bee/pyzmq-27.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:90a4da42aa322de8a3522461e3b5fe999935763b27f69a02fced40f4e3cf9682", size = 1329293, upload-time = "2025-08-03T05:02:56.001Z" }, - { url = "https://files.pythonhosted.org/packages/bc/76/48706d291951b1300d3cf985e503806901164bf1581f27c4b6b22dbab2fa/pyzmq-27.0.1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e648dca28178fc879c814cf285048dd22fd1f03e1104101106505ec0eea50a4d", size = 905953, upload-time = "2025-08-03T05:02:59.061Z" }, - { url = "https://files.pythonhosted.org/packages/aa/8a/df3135b96712068d184c53120c7dbf3023e5e362a113059a4f85cd36c6a0/pyzmq-27.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bca8abc31799a6f3652d13f47e0b0e1cab76f9125f2283d085a3754f669b607", size = 666165, upload-time = "2025-08-03T05:03:00.789Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ed/341a7148e08d2830f480f53ab3d136d88fc5011bb367b516d95d0ebb46dd/pyzmq-27.0.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:092f4011b26d6b0201002f439bd74b38f23f3aefcb358621bdc3b230afc9b2d5", size = 853756, upload-time = "2025-08-03T05:03:03.347Z" }, - { url = "https://files.pythonhosted.org/packages/c2/bc/d26fe010477c3e901f0f5a3e70446950dde9aa217f1d1a13534eb0fccfe5/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f02f30a4a6b3efe665ab13a3dd47109d80326c8fd286311d1ba9f397dc5f247", size = 1654870, upload-time = "2025-08-03T05:03:05.331Z" }, - { url = "https://files.pythonhosted.org/packages/32/21/9b488086bf3f55b2eb26db09007a3962f62f3b81c5c6295a6ff6aaebd69c/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f293a1419266e3bf3557d1f8778f9e1ffe7e6b2c8df5c9dca191caf60831eb74", size = 2033444, upload-time = "2025-08-03T05:03:07.318Z" }, - { url = "https://files.pythonhosted.org/packages/3d/53/85b64a792223cd43393d25e03c8609df41aac817ea5ce6a27eceeed433ee/pyzmq-27.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ce181dd1a7c6c012d0efa8ab603c34b5ee9d86e570c03415bbb1b8772eeb381c", size = 1891289, upload-time = "2025-08-03T05:03:08.96Z" }, - { url = "https://files.pythonhosted.org/packages/23/5b/078aae8fe1c4cdba1a77a598870c548fd52b4d4a11e86b8116bbef47d9f3/pyzmq-27.0.1-cp310-cp310-win32.whl", hash = "sha256:f65741cc06630652e82aa68ddef4986a3ab9073dd46d59f94ce5f005fa72037c", size = 566693, upload-time = "2025-08-03T05:03:10.711Z" }, - { url = "https://files.pythonhosted.org/packages/24/e1/4471fff36416ebf1ffe43577b9c7dcf2ff4798f2171f0d169640a48d2305/pyzmq-27.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:44909aa3ed2234d69fe81e1dade7be336bcfeab106e16bdaa3318dcde4262b93", size = 631649, upload-time = "2025-08-03T05:03:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/e8/4c/8edac8dd56f223124aa40403d2c097bbad9b0e2868a67cad9a2a029863aa/pyzmq-27.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:4401649bfa0a38f0f8777f8faba7cd7eb7b5b8ae2abc7542b830dd09ad4aed0d", size = 559274, upload-time = "2025-08-03T05:03:13.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/18/a8e0da6ababbe9326116fb1c890bf1920eea880e8da621afb6bc0f39a262/pyzmq-27.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9729190bd770314f5fbba42476abf6abe79a746eeda11d1d68fd56dd70e5c296", size = 1332721, upload-time = "2025-08-03T05:03:15.237Z" }, - { url = "https://files.pythonhosted.org/packages/75/a4/9431ba598651d60ebd50dc25755402b770322cf8432adcc07d2906e53a54/pyzmq-27.0.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:696900ef6bc20bef6a242973943574f96c3f97d2183c1bd3da5eea4f559631b1", size = 908249, upload-time = "2025-08-03T05:03:16.933Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/e624e1793689e4e685d2ee21c40277dd4024d9d730af20446d88f69be838/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96a63aecec22d3f7fdea3c6c98df9e42973f5856bb6812c3d8d78c262fee808", size = 668649, upload-time = "2025-08-03T05:03:18.49Z" }, - { url = "https://files.pythonhosted.org/packages/6c/29/0652a39d4e876e0d61379047ecf7752685414ad2e253434348246f7a2a39/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c512824360ea7490390566ce00bee880e19b526b312b25cc0bc30a0fe95cb67f", size = 856601, upload-time = "2025-08-03T05:03:20.194Z" }, - { url = "https://files.pythonhosted.org/packages/36/2d/8d5355d7fc55bb6e9c581dd74f58b64fa78c994079e3a0ea09b1b5627cde/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfb2bb5e0f7198eaacfb6796fb0330afd28f36d985a770745fba554a5903595a", size = 1657750, upload-time = "2025-08-03T05:03:22.055Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f4/cd032352d5d252dc6f5ee272a34b59718ba3af1639a8a4ef4654f9535cf5/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f6886c59ba93ffde09b957d3e857e7950c8fe818bd5494d9b4287bc6d5bc7f1", size = 2034312, upload-time = "2025-08-03T05:03:23.578Z" }, - { url = "https://files.pythonhosted.org/packages/e4/1a/c050d8b6597200e97a4bd29b93c769d002fa0b03083858227e0376ad59bc/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b99ea9d330e86ce1ff7f2456b33f1bf81c43862a5590faf4ef4ed3a63504bdab", size = 1893632, upload-time = "2025-08-03T05:03:25.167Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/173ce21d5097e7fcf284a090e8beb64fc683c6582b1f00fa52b1b7e867ce/pyzmq-27.0.1-cp311-cp311-win32.whl", hash = "sha256:571f762aed89025ba8cdcbe355fea56889715ec06d0264fd8b6a3f3fa38154ed", size = 566587, upload-time = "2025-08-03T05:03:26.769Z" }, - { url = "https://files.pythonhosted.org/packages/53/ab/22bd33e7086f0a2cc03a5adabff4bde414288bb62a21a7820951ef86ec20/pyzmq-27.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee16906c8025fa464bea1e48128c048d02359fb40bebe5333103228528506530", size = 632873, upload-time = "2025-08-03T05:03:28.685Z" }, - { url = "https://files.pythonhosted.org/packages/90/14/3e59b4a28194285ceeff725eba9aa5ba8568d1cb78aed381dec1537c705a/pyzmq-27.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ba068f28028849da725ff9185c24f832ccf9207a40f9b28ac46ab7c04994bd41", size = 558918, upload-time = "2025-08-03T05:03:30.085Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9b/c0957041067c7724b310f22c398be46399297c12ed834c3bc42200a2756f/pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd", size = 1305432, upload-time = "2025-08-03T05:03:32.177Z" }, - { url = "https://files.pythonhosted.org/packages/8e/55/bd3a312790858f16b7def3897a0c3eb1804e974711bf7b9dcb5f47e7f82c/pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd", size = 895095, upload-time = "2025-08-03T05:03:33.918Z" }, - { url = "https://files.pythonhosted.org/packages/20/50/fc384631d8282809fb1029a4460d2fe90fa0370a0e866a8318ed75c8d3bb/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a", size = 651826, upload-time = "2025-08-03T05:03:35.818Z" }, - { url = "https://files.pythonhosted.org/packages/7e/0a/2356305c423a975000867de56888b79e44ec2192c690ff93c3109fd78081/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5b6133c8d313bde8bd0d123c169d22525300ff164c2189f849de495e1344577", size = 839751, upload-time = "2025-08-03T05:03:37.265Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1b/81e95ad256ca7e7ccd47f5294c1c6da6e2b64fbace65b84fe8a41470342e/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:58cca552567423f04d06a075f4b473e78ab5bdb906febe56bf4797633f54aa4e", size = 1641359, upload-time = "2025-08-03T05:03:38.799Z" }, - { url = "https://files.pythonhosted.org/packages/50/63/9f50ec965285f4e92c265c8f18344e46b12803666d8b73b65d254d441435/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:4b9d8e26fb600d0d69cc9933e20af08552e97cc868a183d38a5c0d661e40dfbb", size = 2020281, upload-time = "2025-08-03T05:03:40.338Z" }, - { url = "https://files.pythonhosted.org/packages/02/4a/19e3398d0dc66ad2b463e4afa1fc541d697d7bc090305f9dfb948d3dfa29/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2329f0c87f0466dce45bba32b63f47018dda5ca40a0085cc5c8558fea7d9fc55", size = 1877112, upload-time = "2025-08-03T05:03:42.012Z" }, - { url = "https://files.pythonhosted.org/packages/bf/42/c562e9151aa90ed1d70aac381ea22a929d6b3a2ce4e1d6e2e135d34fd9c6/pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb", size = 558177, upload-time = "2025-08-03T05:03:43.979Z" }, - { url = "https://files.pythonhosted.org/packages/40/96/5c50a7d2d2b05b19994bf7336b97db254299353dd9b49b565bb71b485f03/pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686", size = 618923, upload-time = "2025-08-03T05:03:45.438Z" }, - { url = "https://files.pythonhosted.org/packages/13/33/1ec89c8f21c89d21a2eaff7def3676e21d8248d2675705e72554fb5a6f3f/pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed", size = 552358, upload-time = "2025-08-03T05:03:46.887Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a0/f26e276211ec8090a4d11e4ec70eb8a8b15781e591c1d44ce62f372963a0/pyzmq-27.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:497bd8af534ae55dc4ef67eebd1c149ff2a0b0f1e146db73c8b5a53d83c1a5f5", size = 1122287, upload-time = "2025-08-03T05:03:48.838Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d8/af4b507e4f7eeea478cc8ee873995a6fd55582bfb99140593ed460e1db3c/pyzmq-27.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a066ea6ad6218b4c233906adf0ae67830f451ed238419c0db609310dd781fbe7", size = 1155756, upload-time = "2025-08-03T05:03:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/ac/55/37fae0013e11f88681da42698e550b08a316d608242551f65095cc99232a/pyzmq-27.0.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:72d235d6365ca73d8ce92f7425065d70f5c1e19baa458eb3f0d570e425b73a96", size = 1340826, upload-time = "2025-08-03T05:03:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e4/3a87854c64b26fcf63a9d1b6f4382bd727d4797c772ceb334a97b7489be9/pyzmq-27.0.1-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:313a7b374e3dc64848644ca348a51004b41726f768b02e17e689f1322366a4d9", size = 897283, upload-time = "2025-08-03T05:03:54.167Z" }, - { url = "https://files.pythonhosted.org/packages/17/3e/4296c6b0ad2d07be11ae1395dccf9cae48a0a655cf9be1c3733ad2b591d1/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:119ce8590409702394f959c159d048002cbed2f3c0645ec9d6a88087fc70f0f1", size = 660565, upload-time = "2025-08-03T05:03:56.152Z" }, - { url = "https://files.pythonhosted.org/packages/72/41/a33ba3aa48b45b23c4cd4ac49aafde46f3e0f81939f2bfb3b6171a437122/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45c3e00ce16896ace2cd770ab9057a7cf97d4613ea5f2a13f815141d8b6894b9", size = 847680, upload-time = "2025-08-03T05:03:57.696Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8c/bf2350bb25b3b58d2e5b5d2290ffab0e923f0cc6d02288d3fbf4baa6e4d1/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:678e50ec112bdc6df5a83ac259a55a4ba97a8b314c325ab26b3b5b071151bc61", size = 1650151, upload-time = "2025-08-03T05:03:59.387Z" }, - { url = "https://files.pythonhosted.org/packages/f7/1a/a5a07c54890891344a8ddc3d5ab320dd3c4e39febb6e4472546e456d5157/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d0b96c30be9f9387b18b18b6133c75a7b1b0065da64e150fe1feb5ebf31ece1c", size = 2023766, upload-time = "2025-08-03T05:04:01.883Z" }, - { url = "https://files.pythonhosted.org/packages/62/5e/514dcff08f02c6c8a45a6e23621901139cf853be7ac5ccd0b9407c3aa3de/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88dc92d9eb5ea4968123e74db146d770b0c8d48f0e2bfb1dbc6c50a8edb12d64", size = 1885195, upload-time = "2025-08-03T05:04:03.923Z" }, - { url = "https://files.pythonhosted.org/packages/c8/91/87f74f98a487fbef0b115f6025e4a295129fd56b2b633a03ba7d5816ecc2/pyzmq-27.0.1-cp313-cp313t-win32.whl", hash = "sha256:6dcbcb34f5c9b0cefdfc71ff745459241b7d3cda5b27c7ad69d45afc0821d1e1", size = 574213, upload-time = "2025-08-03T05:04:05.905Z" }, - { url = "https://files.pythonhosted.org/packages/e6/d7/07f7d0d7f4c81e08be7b60e52ff2591c557377c017f96204d33d5fca1b07/pyzmq-27.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9fd0fda730461f510cfd9a40fafa5355d65f5e3dbdd8d6dfa342b5b3f5d1949", size = 640202, upload-time = "2025-08-03T05:04:07.439Z" }, - { url = "https://files.pythonhosted.org/packages/ab/83/21d66bcef6fb803647a223cbde95111b099e2176277c0cbc8b099c485510/pyzmq-27.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:56a3b1853f3954ec1f0e91085f1350cc57d18f11205e4ab6e83e4b7c414120e0", size = 561514, upload-time = "2025-08-03T05:04:09.071Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0b/d5ea75cf46b52cdce85a85200c963cb498932953df443892238be49b1a01/pyzmq-27.0.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f98f6b7787bd2beb1f0dde03f23a0621a0c978edf673b7d8f5e7bc039cbe1b60", size = 1340836, upload-time = "2025-08-03T05:04:10.774Z" }, - { url = "https://files.pythonhosted.org/packages/be/4c/0dbce882550e17db6846b29e9dc242aea7590e7594e1ca5043e8e58fff2d/pyzmq-27.0.1-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:351bf5d8ca0788ca85327fda45843b6927593ff4c807faee368cc5aaf9f809c2", size = 897236, upload-time = "2025-08-03T05:04:13.221Z" }, - { url = "https://files.pythonhosted.org/packages/1b/22/461e131cf16b8814f3c356fa1ea0912697dbc4c64cddf01f7756ec704c1e/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5268a5a9177afff53dc6d70dffe63114ba2a6e7b20d9411cc3adeba09eeda403", size = 660374, upload-time = "2025-08-03T05:04:15.032Z" }, - { url = "https://files.pythonhosted.org/packages/3f/0c/bbd65a814395bf4fc3e57c6c13af27601c07e4009bdfb75ebcf500537bbd/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4aca06ba295aa78bec9b33ec028d1ca08744c36294338c41432b7171060c808", size = 847497, upload-time = "2025-08-03T05:04:16.967Z" }, - { url = "https://files.pythonhosted.org/packages/1e/df/3d1f4a03b561d824cbd491394f67591957e2f1acf6dc85d96f970312a76a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1c363c6dc66352331d5ad64bb838765c6692766334a6a02fdb05e76bd408ae18", size = 1650028, upload-time = "2025-08-03T05:04:19.398Z" }, - { url = "https://files.pythonhosted.org/packages/41/c9/a3987540f59a412bdaae3f362f78e00e6769557a598c63b7e32956aade5a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:87aebf4acd7249bdff8d3df03aed4f09e67078e6762cfe0aecf8d0748ff94cde", size = 2023808, upload-time = "2025-08-03T05:04:21.145Z" }, - { url = "https://files.pythonhosted.org/packages/b0/a5/c388f4cd80498a8eaef7535f2a8eaca0a35b82b87a0b47fa1856fc135004/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f22d67756518d71901edf73b38dc0eb4765cce22c8fe122cc81748d425262b", size = 1884970, upload-time = "2025-08-03T05:04:22.908Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ac/b2a89a1ed90526a1b9a260cdc5cd42f055fd44ee8d2a59902b5ac35ddeb1/pyzmq-27.0.1-cp314-cp314t-win32.whl", hash = "sha256:8c62297bc7aea2147b472ca5ca2b4389377ad82898c87cabab2a94aedd75e337", size = 586905, upload-time = "2025-08-03T05:04:24.492Z" }, - { url = "https://files.pythonhosted.org/packages/68/62/7aa5ea04e836f7a788b2a67405f83011cef59ca76d7bac91d1fc9a0476da/pyzmq-27.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bee5248d5ec9223545f8cc4f368c2d571477ae828c99409125c3911511d98245", size = 660503, upload-time = "2025-08-03T05:04:26.382Z" }, - { url = "https://files.pythonhosted.org/packages/89/32/3836ed85947b06f1d67c07ce16c00b0cf8c053ab0b249d234f9f81ff95ff/pyzmq-27.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0fc24bf45e4a454e55ef99d7f5c8b8712539200ce98533af25a5bfa954b6b390", size = 575098, upload-time = "2025-08-03T05:04:27.974Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f1/cdceaf9b6637570f36eee2dbd25bc5a800637cd9b4103b15fbc4b0658b82/pyzmq-27.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:05a94233fdde585eb70924a6e4929202a747eea6ed308a6171c4f1c715bbe39e", size = 1330651, upload-time = "2025-08-03T05:04:45.583Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/469d3b9315eb4d5c61c431a4ae8acdb6abb165dfa5ddbc7af639be53891c/pyzmq-27.0.1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c96702e1082eab62ae583d64c4e19c9b848359196697e536a0c57ae9bd165bd5", size = 906524, upload-time = "2025-08-03T05:04:47.904Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c0/c7a12a533a87beb1143f4a9c8f4d6f82775c04eb3ad27f664e0ef00a6189/pyzmq-27.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c9180d1f5b4b73e28b64e63cc6c4c097690f102aa14935a62d5dd7426a4e5b5a", size = 863547, upload-time = "2025-08-03T05:04:49.579Z" }, - { url = "https://files.pythonhosted.org/packages/41/78/50907d004511bd23eae03d951f3ca4e4cc2e7eb5ec8d3df70d89eca3f97c/pyzmq-27.0.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e971d8680003d0af6020713e52f92109b46fedb463916e988814e04c8133578a", size = 666797, upload-time = "2025-08-03T05:04:51.263Z" }, - { url = "https://files.pythonhosted.org/packages/67/bd/ec3388888eda39705a4cefb465452a4bca5430a3435803588ced49943fdb/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe632fa4501154d58dfbe1764a0495734d55f84eaf1feda4549a1f1ca76659e9", size = 1655601, upload-time = "2025-08-03T05:04:53.026Z" }, - { url = "https://files.pythonhosted.org/packages/84/50/170a1671a171365dda677886d42c39629a086752696ede70296b8f6224d8/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4c3874344fd5fa6d58bb51919708048ac4cab21099f40a227173cddb76b4c20b", size = 2034120, upload-time = "2025-08-03T05:04:55.323Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0a/f06841495e4ec33ed65588e94aff07f1dcbc6878e1611577f6b97a449068/pyzmq-27.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ec09073ed67ae236785d543df3b322282acc0bdf6d1b748c3e81f3043b21cb5", size = 1891956, upload-time = "2025-08-03T05:04:57.084Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6b/6ba945a4756e4b1ba69b909d2b040d16aff0f0edd56a60874970b8d47237/pyzmq-27.0.1-cp39-cp39-win32.whl", hash = "sha256:f44e7ea288d022d4bf93b9e79dafcb4a7aea45a3cbeae2116792904931cefccf", size = 567388, upload-time = "2025-08-03T05:04:58.704Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b4/8ffb9cfb363bc9d61c5d8d9f79a7ada572b0865dac9f4a547da901b81d76/pyzmq-27.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ffe6b809a97ac6dea524b3b837d5b28743d8c2f121141056d168ff0ba8f614ef", size = 632004, upload-time = "2025-08-03T05:05:00.434Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4b/dd5c4d3bb7261efb30a909d2df447ac77393653e5c34c8a9cd536f429c3e/pyzmq-27.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:fde26267416c8478c95432c81489b53f57b0b5d24cd5c8bfaebf5bbaac4dc90c", size = 559881, upload-time = "2025-08-03T05:05:02.363Z" }, - { url = "https://files.pythonhosted.org/packages/6f/87/fc96f224dd99070fe55d0afc37ac08d7d4635d434e3f9425b232867e01b9/pyzmq-27.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:544b995a6a1976fad5d7ff01409b4588f7608ccc41be72147700af91fd44875d", size = 835950, upload-time = "2025-08-03T05:05:04.193Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/802d96017f176c3a7285603d9ed2982550095c136c6230d3e0b53f52c7e5/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0f772eea55cccce7f45d6ecdd1d5049c12a77ec22404f6b892fae687faa87bee", size = 799876, upload-time = "2025-08-03T05:05:06.263Z" }, - { url = "https://files.pythonhosted.org/packages/4e/52/49045c6528007cce385f218f3a674dc84fc8b3265330d09e57c0a59b41f4/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9d63d66059114a6756d09169c9209ffceabacb65b9cb0f66e6fc344b20b73e6", size = 567402, upload-time = "2025-08-03T05:05:08.028Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fe/c29ac0d5a817543ecf0cb18f17195805bad0da567a1c64644aacf11b2779/pyzmq-27.0.1-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1da8e645c655d86f0305fb4c65a0d848f461cd90ee07d21f254667287b5dbe50", size = 747030, upload-time = "2025-08-03T05:05:10.116Z" }, - { url = "https://files.pythonhosted.org/packages/17/d1/cc1fbfb65b4042016e4e035b2548cdfe0945c817345df83aa2d98490e7fc/pyzmq-27.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1843fd0daebcf843fe6d4da53b8bdd3fc906ad3e97d25f51c3fed44436d82a49", size = 544567, upload-time = "2025-08-03T05:05:11.856Z" }, - { url = "https://files.pythonhosted.org/packages/b4/1a/49f66fe0bc2b2568dd4280f1f520ac8fafd73f8d762140e278d48aeaf7b9/pyzmq-27.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7fb0ee35845bef1e8c4a152d766242164e138c239e3182f558ae15cb4a891f94", size = 835949, upload-time = "2025-08-03T05:05:13.798Z" }, - { url = "https://files.pythonhosted.org/packages/49/94/443c1984b397eab59b14dd7ae8bc2ac7e8f32dbc646474453afcaa6508c4/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f379f11e138dfd56c3f24a04164f871a08281194dd9ddf656a278d7d080c8ad0", size = 799875, upload-time = "2025-08-03T05:05:15.632Z" }, - { url = "https://files.pythonhosted.org/packages/30/f1/fd96138a0f152786a2ba517e9c6a8b1b3516719e412a90bb5d8eea6b660c/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b978c0678cffbe8860ec9edc91200e895c29ae1ac8a7085f947f8e8864c489fb", size = 567403, upload-time = "2025-08-03T05:05:17.326Z" }, - { url = "https://files.pythonhosted.org/packages/16/57/34e53ef2b55b1428dac5aabe3a974a16c8bda3bf20549ba500e3ff6cb426/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ebccf0d760bc92a4a7c751aeb2fef6626144aace76ee8f5a63abeb100cae87f", size = 747032, upload-time = "2025-08-03T05:05:19.074Z" }, - { url = "https://files.pythonhosted.org/packages/81/b7/769598c5ae336fdb657946950465569cf18803140fe89ce466d7f0a57c11/pyzmq-27.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77fed80e30fa65708546c4119840a46691290efc231f6bfb2ac2a39b52e15811", size = 544566, upload-time = "2025-08-03T05:05:20.798Z" }, - { url = "https://files.pythonhosted.org/packages/60/8d/c0880acd2d5908eec6fe9b399f0fb630e5f203f8a69f82442d5cb2b2f46c/pyzmq-27.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d97b59cbd8a6c8b23524a8ce237ff9504d987dc07156258aa68ae06d2dd5f34d", size = 835946, upload-time = "2025-08-03T05:05:31.161Z" }, - { url = "https://files.pythonhosted.org/packages/c1/35/6b71409aa6629b3d4917b38961501898827f4fb5ddc680cc8e0cb13987f3/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:27a78bdd384dbbe7b357af95f72efe8c494306b5ec0a03c31e2d53d6763e5307", size = 799870, upload-time = "2025-08-03T05:05:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/16/f6/5d36d8f6571478f32c32f5872abd76eda052746283ca87e24cc5758f7987/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b007e5dcba684e888fbc90554cb12a2f4e492927c8c2761a80b7590209821743", size = 758371, upload-time = "2025-08-03T05:05:34.722Z" }, - { url = "https://files.pythonhosted.org/packages/6f/29/6a7b7f5d47712487d8a3516584a4a484a0147f2537228237397793b2de69/pyzmq-27.0.1-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:95594b2ceeaa94934e3e94dd7bf5f3c3659cf1a26b1fb3edcf6e42dad7e0eaf2", size = 567395, upload-time = "2025-08-03T05:05:36.701Z" }, - { url = "https://files.pythonhosted.org/packages/eb/37/c1f26d13e9d4c3bfce42fead8ff640f6c06a58decde49a6b295b9d52cefd/pyzmq-27.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:70b719a130b81dd130a57ac0ff636dc2c0127c5b35ca5467d1b67057e3c7a4d2", size = 544561, upload-time = "2025-08-03T05:05:38.608Z" }, +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 = "qblox-instruments" -version = "0.11.2" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fastjsonschema", marker = "python_full_version < '3.10'" }, - { name = "ifaddr", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "qcodes", marker = "python_full_version < '3.10'" }, - { name = "spirack", marker = "python_full_version < '3.10'" }, + { name = "fastjsonschema" }, + { name = "ifaddr" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "qcodes", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "spirack" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/33/230219d1c9e969931b0c115635673f3f3c92665cb868c0a4dbcedf5e630a/qblox_instruments-0.11.2.tar.gz", hash = "sha256:18216b4696ba5fb1dc5fd7d049665d5740b1848d20a1e83d141527547c78d504", size = 1350939, upload-time = "2023-11-13T21:48:24.957Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/48/7974ef40f055866a48091477d691b8f85ea5312a60a8f3ced5af6a1edede/qblox_instruments-0.16.0.tar.gz", hash = "sha256:8a9785d916af27a35c0c51a6a870de5ed879cadb56fff1ee47f4a79a2cf0ad62", size = 2289124, upload-time = "2025-03-31T17:30:05.213Z" } [[package]] name = "qcodes" -version = "0.46.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "broadbean", marker = "python_full_version < '3.10'" }, - { name = "cf-xarray", marker = "python_full_version < '3.10'" }, - { name = "dask", marker = "python_full_version < '3.10'" }, - { name = "h5netcdf", marker = "python_full_version < '3.10'" }, - { name = "h5py", marker = "python_full_version < '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "ipykernel", marker = "python_full_version < '3.10'" }, - { name = "ipython", marker = "python_full_version < '3.10'" }, - { name = "ipywidgets", marker = "python_full_version < '3.10'" }, - { name = "jsonschema", marker = "python_full_version < '3.10'" }, - { name = "matplotlib", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "opentelemetry-api", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pandas", marker = "python_full_version < '3.10'" }, - { name = "pillow", marker = "python_full_version < '3.10'" }, - { name = "pyarrow", marker = "python_full_version < '3.10'" }, - { name = "pyvisa", marker = "python_full_version < '3.10'" }, - { name = "ruamel-yaml", marker = "python_full_version < '3.10'" }, - { name = "tabulate", marker = "python_full_version < '3.10'" }, - { name = "tornado", marker = "python_full_version < '3.10'" }, - { name = "tqdm", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, - { name = "uncertainties", marker = "python_full_version < '3.10'" }, - { name = "versioningit", marker = "python_full_version < '3.10'" }, - { name = "websockets", marker = "python_full_version < '3.10'" }, - { name = "wrapt", marker = "python_full_version < '3.10'" }, - { name = "xarray", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0d/01/45ff13476c95523079950db255da27c6fc5522f65ee12ca45ee8bd9d0bdc/qcodes-0.46.0.tar.gz", hash = "sha256:e0ae1d9d57448240920d4e2d52ceceae545a971e1d8b95f931770422fe800c99", size = 815980, upload-time = "2024-07-04T09:18:28.822Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/f5/d0e1f1a840dd830886908f50a0beb222e4c2d9693de76f7be5fde94823fc/qcodes-0.46.0-py3-none-any.whl", hash = "sha256:6c7de543ef6048d82fad755a8ef5c4e63f866085314e2fb69f1a839bb39d0eff", size = 976511, upload-time = "2024-07-04T09:18:24.828Z" }, +version = "0.52.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "broadbean", marker = "python_full_version < '3.11'" }, + { name = "cf-xarray", version = "0.10.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "dask", marker = "python_full_version < '3.11'" }, + { name = "h5netcdf", marker = "python_full_version < '3.11'" }, + { name = "h5py", marker = "python_full_version < '3.11'" }, + { name = "ipykernel", marker = "python_full_version < '3.11'" }, + { name = "ipython", marker = "python_full_version < '3.11'" }, + { name = "ipywidgets", marker = "python_full_version < '3.11'" }, + { name = "jsonschema", marker = "python_full_version < '3.11'" }, + { name = "matplotlib", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "opentelemetry-api", marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pandas", marker = "python_full_version < '3.11'" }, + { name = "pillow", marker = "python_full_version < '3.11'" }, + { name = "pyarrow", marker = "python_full_version < '3.11'" }, + { name = "pyvisa", marker = "python_full_version < '3.11'" }, + { name = "ruamel-yaml", marker = "python_full_version < '3.11'" }, + { name = "tabulate", marker = "python_full_version < '3.11'" }, + { name = "tornado", marker = "python_full_version < '3.11'" }, + { name = "tqdm", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "uncertainties", marker = "python_full_version < '3.11'" }, + { name = "versioningit", marker = "python_full_version < '3.11'" }, + { name = "websockets", marker = "python_full_version < '3.11'" }, + { name = "wrapt", marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/d5/2e8c3b36c6fd4969911ad905814320f7ca2c541bafa8d7199e35d8143002/qcodes-0.52.0.tar.gz", hash = "sha256:add998d3817ff5bbc96665291a615bc230fa39fcac52b19ef315c8f1553c0a6e", size = 800095, upload-time = "2025-04-04T07:33:11.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/30/1525fb29910d159145b873737d0ef54a8d00c6044ed9d5b55712d93e0bda/qcodes-0.52.0-py3-none-any.whl", hash = "sha256:de11fb04626b36503cca19f075bb7d73c4c6c16d78906fa5e4f3e938910b211e", size = 953160, upload-time = "2025-04-04T07:33:08.855Z" }, +] + +[[package]] +name = "qcodes" +version = "0.54.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "broadbean", marker = "python_full_version >= '3.11'" }, + { name = "cf-xarray", version = "0.10.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "dask", marker = "python_full_version >= '3.11'" }, + { name = "h5netcdf", marker = "python_full_version >= '3.11'" }, + { name = "h5py", marker = "python_full_version >= '3.11'" }, + { name = "ipykernel", marker = "python_full_version >= '3.11'" }, + { name = "ipywidgets", marker = "python_full_version >= '3.11'" }, + { name = "jsonschema", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib", marker = "python_full_version >= '3.11'" }, + { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "opentelemetry-api", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pandas", marker = "python_full_version >= '3.11'" }, + { name = "pillow", marker = "python_full_version >= '3.11'" }, + { name = "pyarrow", marker = "python_full_version >= '3.11'" }, + { name = "pyvisa", marker = "python_full_version >= '3.11'" }, + { name = "ruamel-yaml", marker = "python_full_version >= '3.11'" }, + { name = "tabulate", marker = "python_full_version >= '3.11'" }, + { name = "tqdm", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "uncertainties", marker = "python_full_version >= '3.11'" }, + { name = "versioningit", marker = "python_full_version >= '3.11'" }, + { name = "websockets", marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/e1/628a01567051a1cf2fbb9149fc32849c678bced55d6d1d8b6d9ebe4ae406/qcodes-0.54.1.tar.gz", hash = "sha256:98cdb1d643bbfa1e1779c633e64ff1d9927bfb27f7b745c70890e8f0289c78d4", size = 814205, upload-time = "2025-10-02T17:53:51.118Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/54/fe64869ca86716fce56d49dc15c5d8114136173092264178bc2b13e6b38f/qcodes-0.54.1-py3-none-any.whl", hash = "sha256:ab42f27652525b2bffc2b85a97d0ba78a1fdc4b3229c393ad7acfb007a20ce6f", size = 973581, upload-time = "2025-10-02T17:53:48.734Z" }, ] [[package]] @@ -3481,16 +3834,19 @@ name = "qcodes-loop" version = "0.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "h5py", marker = "python_full_version < '3.10'" }, - { name = "hickle", marker = "python_full_version < '3.10'" }, - { name = "ipython", marker = "python_full_version < '3.10'" }, - { name = "lazy-loader", marker = "python_full_version < '3.10'" }, - { name = "matplotlib", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "pandas", marker = "python_full_version < '3.10'" }, - { name = "qcodes", marker = "python_full_version < '3.10'" }, - { name = "versioningit", marker = "python_full_version < '3.10'" }, - { name = "xarray", marker = "python_full_version < '3.10'" }, + { name = "h5py" }, + { name = "hickle" }, + { name = "ipython" }, + { name = "lazy-loader" }, + { name = "matplotlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas" }, + { name = "qcodes", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "versioningit" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b6/0b/818b0120ec1d30488f25c5d658ef3a1dd3b9895df621df09c96907e180df/qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c", size = 102955, upload-time = "2024-08-01T12:21:05.54Z" } wheels = [ @@ -3502,27 +3858,32 @@ name = "quantify-core" version = "0.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "adaptive", marker = "python_full_version < '3.10'" }, - { name = "appnope", marker = "python_full_version < '3.10'" }, - { name = "dataclasses-json", marker = "python_full_version < '3.10'" }, - { name = "deepdiff", marker = "python_full_version < '3.10'" }, - { name = "dill", marker = "python_full_version < '3.10'" }, - { name = "filelock", marker = "python_full_version < '3.10'" }, - { name = "h5netcdf", marker = "python_full_version < '3.10'" }, - { name = "jsonschema", marker = "python_full_version < '3.10'" }, - { name = "lmfit", marker = "python_full_version < '3.10'" }, - { name = "matplotlib", marker = "python_full_version < '3.10'" }, - { name = "methodtools", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "pyqt5", marker = "python_full_version < '3.10'" }, - { name = "pyqtgraph", marker = "python_full_version < '3.10'" }, - { name = "qcodes", marker = "python_full_version < '3.10'" }, - { name = "qcodes-loop", marker = "python_full_version < '3.10'" }, - { name = "scikit-learn", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, - { name = "uncertainties", marker = "python_full_version < '3.10'" }, - { name = "xarray", extra = ["io"], marker = "python_full_version < '3.10'" }, + { name = "adaptive", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "adaptive", version = "1.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "appnope" }, + { name = "dataclasses-json" }, + { name = "deepdiff" }, + { name = "dill" }, + { name = "filelock" }, + { name = "h5netcdf" }, + { name = "jsonschema" }, + { name = "lmfit" }, + { name = "matplotlib" }, + { name = "methodtools" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyqt5" }, + { name = "pyqtgraph" }, + { name = "qcodes", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "qcodes-loop" }, + { name = "scikit-learn" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions" }, + { name = "uncertainties" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["io"], marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, extra = ["io"], marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6e/b3/33232239a59e65d67d158ca6306c4c9131234157d10fb7b39165dafee131/quantify_core-0.9.1.tar.gz", hash = "sha256:7f3dc9677a8ff59cdcfd6311626d10983ea1f585e2adb7ba73e87e636a7fb365", size = 6125832, upload-time = "2025-08-18T11:42:42.362Z" } wheels = [ @@ -3531,33 +3892,34 @@ wheels = [ [[package]] name = "quantify-scheduler" -version = "0.18.2" +version = "0.23.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "columnar", marker = "python_full_version < '3.10'" }, - { name = "dataclasses-json", marker = "python_full_version < '3.10'" }, - { name = "fastjsonschema", marker = "python_full_version < '3.10'" }, - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "matplotlib", marker = "python_full_version < '3.10'" }, - { name = "networkx", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "pandas", extra = ["output-formatting"], marker = "python_full_version < '3.10'" }, - { name = "pathvalidate", marker = "python_full_version < '3.10'" }, - { name = "plotly", marker = "python_full_version < '3.10'" }, - { name = "pydantic", marker = "python_full_version < '3.10'" }, - { name = "qblox-instruments", marker = "python_full_version < '3.10'" }, - { name = "qcodes", marker = "python_full_version < '3.10'" }, - { name = "quantify-core", marker = "python_full_version < '3.10'" }, - { name = "rich", extra = ["jupyter"], marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "xxhash", marker = "python_full_version < '3.10'" }, - { name = "zhinst", marker = "python_full_version < '3.10'" }, - { name = "zhinst-qcodes", marker = "python_full_version < '3.10'" }, - { name = "zhinst-toolkit", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/94/5bffb75c025b69b2cfeb540d00a4923b80e0ad04e203082810f15669add1/quantify-scheduler-0.18.2.tar.gz", hash = "sha256:dad5bcebf4b206addc9157d580087048598e1ac6497ccc7d615d2ae53300c910", size = 1354801, upload-time = "2024-04-02T16:45:32.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/10/fbb680055c71126eb45f7ba874d1dbe57b527e777c57eb860ad334aea376/quantify_scheduler-0.18.2-py3-none-any.whl", hash = "sha256:761d1e85f53e3744a28a3e56382d162ada2face3b127e83ea0e40a050566a812", size = 337885, upload-time = "2024-04-02T16:45:30.34Z" }, + { name = "columnar" }, + { name = "dataclasses-json" }, + { name = "fastjsonschema" }, + { name = "jinja2" }, + { name = "matplotlib" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas", extra = ["output-formatting"] }, + { name = "pathvalidate" }, + { name = "plotly" }, + { name = "pydantic" }, + { name = "qblox-instruments" }, + { name = "qcodes", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "quantify-core" }, + { name = "rich", extra = ["jupyter"] }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/22/c6123c882db914e3c489a3318cce7d8d5aa871a3c8ab9d559eb2c2f3a043/quantify_scheduler-0.23.1.tar.gz", hash = "sha256:d6ad4360fcaf8f15a03f02250e8289f9b235e2bb8c282e2a17888c4c84f5ddaa", size = 1877505, upload-time = "2025-04-28T11:38:11.903Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/de/2ce91f7a3c6372f41f627aa4cf9dc79fa2efdf941dd3841b29bf6dd413ed/quantify_scheduler-0.23.1-py3-none-any.whl", hash = "sha256:545eadeea61781a235c6ea3f3c710f2572e1fe9eb9d4f18a26a6918f2939f06e", size = 431422, upload-time = "2025-04-28T11:38:09.729Z" }, ] [[package]] @@ -3589,6 +3951,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] +[[package]] +name = "requests-cache" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs", marker = "python_full_version >= '3.11'" }, + { name = "cattrs", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "url-normalize", marker = "python_full_version >= '3.11'" }, + { name = "urllib3", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/be/7b2a95a9e7a7c3e774e43d067c51244e61dea8b120ae2deff7089a93fb2b/requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1", size = 3018209, upload-time = "2024-06-18T17:18:03.774Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/2e/8f4051119f460cfc786aa91f212165bb6e643283b533db572d7b33952bd2/requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603", size = 61425, upload-time = "2024-06-18T17:17:45Z" }, +] + [[package]] name = "rfc3339-validator" version = "0.1.4" @@ -3627,8 +4006,8 @@ name = "rich" version = "14.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, + { name = "markdown-it-py" }, + { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } wheels = [ @@ -3637,169 +4016,142 @@ wheels = [ [package.optional-dependencies] jupyter = [ - { name = "ipywidgets", marker = "python_full_version < '3.10'" }, + { name = "ipywidgets" }, ] [[package]] name = "rpds-py" -version = "0.27.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/d9/991a0dee12d9fc53ed027e26a26a64b151d77252ac477e22666b9688bc16/rpds_py-0.27.0.tar.gz", hash = "sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f", size = 27420, upload-time = "2025-08-07T08:26:39.624Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/2d/ad2e37dee3f45580f7fa0066c412a521f9bee53d2718b0e9436d308a1ecd/rpds_py-0.27.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:130c1ffa5039a333f5926b09e346ab335f0d4ec393b030a18549a7c7e7c2cea4", size = 371511, upload-time = "2025-08-07T08:23:06.205Z" }, - { url = "https://files.pythonhosted.org/packages/f5/67/57b4b2479193fde9dd6983a13c2550b5f9c3bcdf8912dffac2068945eb14/rpds_py-0.27.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a4cf32a26fa744101b67bfd28c55d992cd19438aff611a46cac7f066afca8fd4", size = 354718, upload-time = "2025-08-07T08:23:08.222Z" }, - { url = "https://files.pythonhosted.org/packages/a3/be/c2b95ec4b813eb11f3a3c3d22f22bda8d3a48a074a0519cde968c4d102cf/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64a0fe3f334a40b989812de70160de6b0ec7e3c9e4a04c0bbc48d97c5d3600ae", size = 381518, upload-time = "2025-08-07T08:23:09.696Z" }, - { url = "https://files.pythonhosted.org/packages/a5/d2/5a7279bc2b93b20bd50865a2269016238cee45f7dc3cc33402a7f41bd447/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a0ff7ee28583ab30a52f371b40f54e7138c52ca67f8ca17ccb7ccf0b383cb5f", size = 396694, upload-time = "2025-08-07T08:23:11.105Z" }, - { url = "https://files.pythonhosted.org/packages/65/e9/bac8b3714bd853c5bcb466e04acfb9a5da030d77e0ddf1dfad9afb791c31/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15ea4d2e182345dd1b4286593601d766411b43f868924afe297570658c31a62b", size = 514813, upload-time = "2025-08-07T08:23:12.215Z" }, - { url = "https://files.pythonhosted.org/packages/1d/aa/293115e956d7d13b7d2a9e9a4121f74989a427aa125f00ce4426ca8b7b28/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36184b44bf60a480863e51021c26aca3dfe8dd2f5eeabb33622b132b9d8b8b54", size = 402246, upload-time = "2025-08-07T08:23:13.699Z" }, - { url = "https://files.pythonhosted.org/packages/88/59/2d6789bb898fb3e2f0f7b82b7bcf27f579ebcb6cc36c24f4e208f7f58a5b/rpds_py-0.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b78430703cfcf5f5e86eb74027a1ed03a93509273d7c705babb547f03e60016", size = 383661, upload-time = "2025-08-07T08:23:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/0c/55/add13a593a7a81243a9eed56d618d3d427be5dc1214931676e3f695dfdc1/rpds_py-0.27.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:dbd749cff1defbde270ca346b69b3baf5f1297213ef322254bf2a28537f0b046", size = 401691, upload-time = "2025-08-07T08:23:16.681Z" }, - { url = "https://files.pythonhosted.org/packages/04/09/3e8b2aad494ffaca571e4e19611a12cc18fcfd756d9274f3871a2d822445/rpds_py-0.27.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bde37765564cd22a676dd8101b657839a1854cfaa9c382c5abf6ff7accfd4ae", size = 416529, upload-time = "2025-08-07T08:23:17.863Z" }, - { url = "https://files.pythonhosted.org/packages/a4/6d/bd899234728f1d8f72c9610f50fdf1c140ecd0a141320e1f1d0f6b20595d/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1d66f45b9399036e890fb9c04e9f70c33857fd8f58ac8db9f3278cfa835440c3", size = 558673, upload-time = "2025-08-07T08:23:18.99Z" }, - { url = "https://files.pythonhosted.org/packages/79/f4/f3e02def5193fb899d797c232f90d6f8f0f2b9eca2faef6f0d34cbc89b2e/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d85d784c619370d9329bbd670f41ff5f2ae62ea4519761b679d0f57f0f0ee267", size = 588426, upload-time = "2025-08-07T08:23:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/e3/0c/88e716cd8fd760e5308835fe298255830de4a1c905fd51760b9bb40aa965/rpds_py-0.27.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5df559e9e7644d9042f626f2c3997b555f347d7a855a15f170b253f6c5bfe358", size = 554552, upload-time = "2025-08-07T08:23:21.714Z" }, - { url = "https://files.pythonhosted.org/packages/2b/a9/0a8243c182e7ac59b901083dff7e671feba6676a131bfff3f8d301cd2b36/rpds_py-0.27.0-cp310-cp310-win32.whl", hash = "sha256:b8a4131698b6992b2a56015f51646711ec5d893a0b314a4b985477868e240c87", size = 218081, upload-time = "2025-08-07T08:23:23.273Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e7/202ff35852312760148be9e08fe2ba6900aa28e7a46940a313eae473c10c/rpds_py-0.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:cbc619e84a5e3ab2d452de831c88bdcad824414e9c2d28cd101f94dbdf26329c", size = 230077, upload-time = "2025-08-07T08:23:24.308Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c1/49d515434c1752e40f5e35b985260cf27af052593378580a2f139a5be6b8/rpds_py-0.27.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:dbc2ab5d10544eb485baa76c63c501303b716a5c405ff2469a1d8ceffaabf622", size = 371577, upload-time = "2025-08-07T08:23:25.379Z" }, - { url = "https://files.pythonhosted.org/packages/e1/6d/bf2715b2fee5087fa13b752b5fd573f1a93e4134c74d275f709e38e54fe7/rpds_py-0.27.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ec85994f96a58cf7ed288caa344b7fe31fd1d503bdf13d7331ead5f70ab60d5", size = 354959, upload-time = "2025-08-07T08:23:26.767Z" }, - { url = "https://files.pythonhosted.org/packages/a3/5c/e7762808c746dd19733a81373c10da43926f6a6adcf4920a21119697a60a/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:190d7285cd3bb6d31d37a0534d7359c1ee191eb194c511c301f32a4afa5a1dd4", size = 381485, upload-time = "2025-08-07T08:23:27.869Z" }, - { url = "https://files.pythonhosted.org/packages/40/51/0d308eb0b558309ca0598bcba4243f52c4cd20e15fe991b5bd75824f2e61/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c10d92fb6d7fd827e44055fcd932ad93dac6a11e832d51534d77b97d1d85400f", size = 396816, upload-time = "2025-08-07T08:23:29.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/aa/2d585ec911d78f66458b2c91252134ca0c7c70f687a72c87283173dc0c96/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd2c1d27ebfe6a015cfa2005b7fe8c52d5019f7bbdd801bc6f7499aab9ae739e", size = 514950, upload-time = "2025-08-07T08:23:30.576Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ef/aced551cc1148179557aed84343073adadf252c91265263ee6203458a186/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4790c9d5dd565ddb3e9f656092f57268951398cef52e364c405ed3112dc7c7c1", size = 402132, upload-time = "2025-08-07T08:23:32.428Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ac/cf644803d8d417653fe2b3604186861d62ea6afaef1b2284045741baef17/rpds_py-0.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4300e15e7d03660f04be84a125d1bdd0e6b2f674bc0723bc0fd0122f1a4585dc", size = 383660, upload-time = "2025-08-07T08:23:33.829Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ec/caf47c55ce02b76cbaeeb2d3b36a73da9ca2e14324e3d75cf72b59dcdac5/rpds_py-0.27.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:59195dc244fc183209cf8a93406889cadde47dfd2f0a6b137783aa9c56d67c85", size = 401730, upload-time = "2025-08-07T08:23:34.97Z" }, - { url = "https://files.pythonhosted.org/packages/0b/71/c1f355afdcd5b99ffc253422aa4bdcb04ccf1491dcd1bda3688a0c07fd61/rpds_py-0.27.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fae4a01ef8c4cb2bbe92ef2063149596907dc4a881a8d26743b3f6b304713171", size = 416122, upload-time = "2025-08-07T08:23:36.062Z" }, - { url = "https://files.pythonhosted.org/packages/38/0f/f4b5b1eda724ed0e04d2b26d8911cdc131451a7ee4c4c020a1387e5c6ded/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e3dc8d4ede2dbae6c0fc2b6c958bf51ce9fd7e9b40c0f5b8835c3fde44f5807d", size = 558771, upload-time = "2025-08-07T08:23:37.478Z" }, - { url = "https://files.pythonhosted.org/packages/93/c0/5f8b834db2289ab48d5cffbecbb75e35410103a77ac0b8da36bf9544ec1c/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c3782fb753aa825b4ccabc04292e07897e2fd941448eabf666856c5530277626", size = 587876, upload-time = "2025-08-07T08:23:38.662Z" }, - { url = "https://files.pythonhosted.org/packages/d2/dd/1a1df02ab8eb970115cff2ae31a6f73916609b900dc86961dc382b8c2e5e/rpds_py-0.27.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:887ab1f12b0d227e9260558a4a2320024b20102207ada65c43e1ffc4546df72e", size = 554359, upload-time = "2025-08-07T08:23:39.897Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e4/95a014ab0d51ab6e3bebbdb476a42d992d2bbf9c489d24cff9fda998e925/rpds_py-0.27.0-cp311-cp311-win32.whl", hash = "sha256:5d6790ff400254137b81b8053b34417e2c46921e302d655181d55ea46df58cf7", size = 218084, upload-time = "2025-08-07T08:23:41.086Z" }, - { url = "https://files.pythonhosted.org/packages/49/78/f8d5b71ec65a0376b0de31efcbb5528ce17a9b7fdd19c3763303ccfdedec/rpds_py-0.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:e24d8031a2c62f34853756d9208eeafa6b940a1efcbfe36e8f57d99d52bb7261", size = 230085, upload-time = "2025-08-07T08:23:42.143Z" }, - { url = "https://files.pythonhosted.org/packages/e7/d3/84429745184091e06b4cc70f8597408e314c2d2f7f5e13249af9ffab9e3d/rpds_py-0.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:08680820d23df1df0a0260f714d12966bc6c42d02e8055a91d61e03f0c47dda0", size = 222112, upload-time = "2025-08-07T08:23:43.233Z" }, - { url = "https://files.pythonhosted.org/packages/cd/17/e67309ca1ac993fa1888a0d9b2f5ccc1f67196ace32e76c9f8e1dbbbd50c/rpds_py-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4", size = 362611, upload-time = "2025-08-07T08:23:44.773Z" }, - { url = "https://files.pythonhosted.org/packages/93/2e/28c2fb84aa7aa5d75933d1862d0f7de6198ea22dfd9a0cca06e8a4e7509e/rpds_py-0.27.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b", size = 347680, upload-time = "2025-08-07T08:23:46.014Z" }, - { url = "https://files.pythonhosted.org/packages/44/3e/9834b4c8f4f5fe936b479e623832468aa4bd6beb8d014fecaee9eac6cdb1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e", size = 384600, upload-time = "2025-08-07T08:23:48Z" }, - { url = "https://files.pythonhosted.org/packages/19/78/744123c7b38865a965cd9e6f691fde7ef989a00a256fa8bf15b75240d12f/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34", size = 400697, upload-time = "2025-08-07T08:23:49.407Z" }, - { url = "https://files.pythonhosted.org/packages/32/97/3c3d32fe7daee0a1f1a678b6d4dfb8c4dcf88197fa2441f9da7cb54a8466/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8", size = 517781, upload-time = "2025-08-07T08:23:50.557Z" }, - { url = "https://files.pythonhosted.org/packages/b2/be/28f0e3e733680aa13ecec1212fc0f585928a206292f14f89c0b8a684cad1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726", size = 406449, upload-time = "2025-08-07T08:23:51.732Z" }, - { url = "https://files.pythonhosted.org/packages/95/ae/5d15c83e337c082d0367053baeb40bfba683f42459f6ebff63a2fd7e5518/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e", size = 386150, upload-time = "2025-08-07T08:23:52.822Z" }, - { url = "https://files.pythonhosted.org/packages/bf/65/944e95f95d5931112829e040912b25a77b2e7ed913ea5fe5746aa5c1ce75/rpds_py-0.27.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3", size = 406100, upload-time = "2025-08-07T08:23:54.339Z" }, - { url = "https://files.pythonhosted.org/packages/21/a4/1664b83fae02894533cd11dc0b9f91d673797c2185b7be0f7496107ed6c5/rpds_py-0.27.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e", size = 421345, upload-time = "2025-08-07T08:23:55.832Z" }, - { url = "https://files.pythonhosted.org/packages/7c/26/b7303941c2b0823bfb34c71378249f8beedce57301f400acb04bb345d025/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f", size = 561891, upload-time = "2025-08-07T08:23:56.951Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c8/48623d64d4a5a028fa99576c768a6159db49ab907230edddc0b8468b998b/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03", size = 591756, upload-time = "2025-08-07T08:23:58.146Z" }, - { url = "https://files.pythonhosted.org/packages/b3/51/18f62617e8e61cc66334c9fb44b1ad7baae3438662098efbc55fb3fda453/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374", size = 557088, upload-time = "2025-08-07T08:23:59.6Z" }, - { url = "https://files.pythonhosted.org/packages/bd/4c/e84c3a276e2496a93d245516be6b49e20499aa8ca1c94d59fada0d79addc/rpds_py-0.27.0-cp312-cp312-win32.whl", hash = "sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97", size = 221926, upload-time = "2025-08-07T08:24:00.695Z" }, - { url = "https://files.pythonhosted.org/packages/83/89/9d0fbcef64340db0605eb0a0044f258076f3ae0a3b108983b2c614d96212/rpds_py-0.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5", size = 233235, upload-time = "2025-08-07T08:24:01.846Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b0/e177aa9f39cbab060f96de4a09df77d494f0279604dc2f509263e21b05f9/rpds_py-0.27.0-cp312-cp312-win_arm64.whl", hash = "sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9", size = 223315, upload-time = "2025-08-07T08:24:03.337Z" }, - { url = "https://files.pythonhosted.org/packages/81/d2/dfdfd42565a923b9e5a29f93501664f5b984a802967d48d49200ad71be36/rpds_py-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff", size = 362133, upload-time = "2025-08-07T08:24:04.508Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4a/0a2e2460c4b66021d349ce9f6331df1d6c75d7eea90df9785d333a49df04/rpds_py-0.27.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367", size = 347128, upload-time = "2025-08-07T08:24:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/35/8d/7d1e4390dfe09d4213b3175a3f5a817514355cb3524593380733204f20b9/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185", size = 384027, upload-time = "2025-08-07T08:24:06.841Z" }, - { url = "https://files.pythonhosted.org/packages/c1/65/78499d1a62172891c8cd45de737b2a4b84a414b6ad8315ab3ac4945a5b61/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc", size = 399973, upload-time = "2025-08-07T08:24:08.143Z" }, - { url = "https://files.pythonhosted.org/packages/10/a1/1c67c1d8cc889107b19570bb01f75cf49852068e95e6aee80d22915406fc/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe", size = 515295, upload-time = "2025-08-07T08:24:09.711Z" }, - { url = "https://files.pythonhosted.org/packages/df/27/700ec88e748436b6c7c4a2262d66e80f8c21ab585d5e98c45e02f13f21c0/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9", size = 406737, upload-time = "2025-08-07T08:24:11.182Z" }, - { url = "https://files.pythonhosted.org/packages/33/cc/6b0ee8f0ba3f2df2daac1beda17fde5cf10897a7d466f252bd184ef20162/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c", size = 385898, upload-time = "2025-08-07T08:24:12.798Z" }, - { url = "https://files.pythonhosted.org/packages/e8/7e/c927b37d7d33c0a0ebf249cc268dc2fcec52864c1b6309ecb960497f2285/rpds_py-0.27.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295", size = 405785, upload-time = "2025-08-07T08:24:14.906Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d2/8ed50746d909dcf402af3fa58b83d5a590ed43e07251d6b08fad1a535ba6/rpds_py-0.27.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43", size = 419760, upload-time = "2025-08-07T08:24:16.129Z" }, - { url = "https://files.pythonhosted.org/packages/d3/60/2b2071aee781cb3bd49f94d5d35686990b925e9b9f3e3d149235a6f5d5c1/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432", size = 561201, upload-time = "2025-08-07T08:24:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/98/1f/27b67304272521aaea02be293fecedce13fa351a4e41cdb9290576fc6d81/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b", size = 591021, upload-time = "2025-08-07T08:24:18.999Z" }, - { url = "https://files.pythonhosted.org/packages/db/9b/a2fadf823164dd085b1f894be6443b0762a54a7af6f36e98e8fcda69ee50/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d", size = 556368, upload-time = "2025-08-07T08:24:20.54Z" }, - { url = "https://files.pythonhosted.org/packages/24/f3/6d135d46a129cda2e3e6d4c5e91e2cc26ea0428c6cf152763f3f10b6dd05/rpds_py-0.27.0-cp313-cp313-win32.whl", hash = "sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd", size = 221236, upload-time = "2025-08-07T08:24:22.144Z" }, - { url = "https://files.pythonhosted.org/packages/c5/44/65d7494f5448ecc755b545d78b188440f81da98b50ea0447ab5ebfdf9bd6/rpds_py-0.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2", size = 232634, upload-time = "2025-08-07T08:24:23.642Z" }, - { url = "https://files.pythonhosted.org/packages/70/d9/23852410fadab2abb611733933401de42a1964ce6600a3badae35fbd573e/rpds_py-0.27.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac", size = 222783, upload-time = "2025-08-07T08:24:25.098Z" }, - { url = "https://files.pythonhosted.org/packages/15/75/03447917f78512b34463f4ef11066516067099a0c466545655503bed0c77/rpds_py-0.27.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774", size = 359154, upload-time = "2025-08-07T08:24:26.249Z" }, - { url = "https://files.pythonhosted.org/packages/6b/fc/4dac4fa756451f2122ddaf136e2c6aeb758dc6fdbe9ccc4bc95c98451d50/rpds_py-0.27.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b", size = 343909, upload-time = "2025-08-07T08:24:27.405Z" }, - { url = "https://files.pythonhosted.org/packages/7b/81/723c1ed8e6f57ed9d8c0c07578747a2d3d554aaefc1ab89f4e42cfeefa07/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd", size = 379340, upload-time = "2025-08-07T08:24:28.714Z" }, - { url = "https://files.pythonhosted.org/packages/98/16/7e3740413de71818ce1997df82ba5f94bae9fff90c0a578c0e24658e6201/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb", size = 391655, upload-time = "2025-08-07T08:24:30.223Z" }, - { url = "https://files.pythonhosted.org/packages/e0/63/2a9f510e124d80660f60ecce07953f3f2d5f0b96192c1365443859b9c87f/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433", size = 513017, upload-time = "2025-08-07T08:24:31.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/4e/cf6ff311d09776c53ea1b4f2e6700b9d43bb4e99551006817ade4bbd6f78/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615", size = 402058, upload-time = "2025-08-07T08:24:32.613Z" }, - { url = "https://files.pythonhosted.org/packages/88/11/5e36096d474cb10f2a2d68b22af60a3bc4164fd8db15078769a568d9d3ac/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8", size = 383474, upload-time = "2025-08-07T08:24:33.767Z" }, - { url = "https://files.pythonhosted.org/packages/db/a2/3dff02805b06058760b5eaa6d8cb8db3eb3e46c9e452453ad5fc5b5ad9fe/rpds_py-0.27.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858", size = 400067, upload-time = "2025-08-07T08:24:35.021Z" }, - { url = "https://files.pythonhosted.org/packages/67/87/eed7369b0b265518e21ea836456a4ed4a6744c8c12422ce05bce760bb3cf/rpds_py-0.27.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5", size = 412085, upload-time = "2025-08-07T08:24:36.267Z" }, - { url = "https://files.pythonhosted.org/packages/8b/48/f50b2ab2fbb422fbb389fe296e70b7a6b5ea31b263ada5c61377e710a924/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9", size = 555928, upload-time = "2025-08-07T08:24:37.573Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/b18eb51045d06887666c3560cd4bbb6819127b43d758f5adb82b5f56f7d1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79", size = 585527, upload-time = "2025-08-07T08:24:39.391Z" }, - { url = "https://files.pythonhosted.org/packages/be/03/a3dd6470fc76499959b00ae56295b76b4bdf7c6ffc60d62006b1217567e1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c", size = 554211, upload-time = "2025-08-07T08:24:40.6Z" }, - { url = "https://files.pythonhosted.org/packages/bf/d1/ee5fd1be395a07423ac4ca0bcc05280bf95db2b155d03adefeb47d5ebf7e/rpds_py-0.27.0-cp313-cp313t-win32.whl", hash = "sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23", size = 216624, upload-time = "2025-08-07T08:24:42.204Z" }, - { url = "https://files.pythonhosted.org/packages/1c/94/4814c4c858833bf46706f87349c37ca45e154da7dbbec9ff09f1abeb08cc/rpds_py-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1", size = 230007, upload-time = "2025-08-07T08:24:43.329Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a5/8fffe1c7dc7c055aa02df310f9fb71cfc693a4d5ccc5de2d3456ea5fb022/rpds_py-0.27.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb", size = 362595, upload-time = "2025-08-07T08:24:44.478Z" }, - { url = "https://files.pythonhosted.org/packages/bc/c7/4e4253fd2d4bb0edbc0b0b10d9f280612ca4f0f990e3c04c599000fe7d71/rpds_py-0.27.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f", size = 347252, upload-time = "2025-08-07T08:24:45.678Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c8/3d1a954d30f0174dd6baf18b57c215da03cf7846a9d6e0143304e784cddc/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64", size = 384886, upload-time = "2025-08-07T08:24:46.86Z" }, - { url = "https://files.pythonhosted.org/packages/e0/52/3c5835f2df389832b28f9276dd5395b5a965cea34226e7c88c8fbec2093c/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015", size = 399716, upload-time = "2025-08-07T08:24:48.174Z" }, - { url = "https://files.pythonhosted.org/packages/40/73/176e46992461a1749686a2a441e24df51ff86b99c2d34bf39f2a5273b987/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0", size = 517030, upload-time = "2025-08-07T08:24:49.52Z" }, - { url = "https://files.pythonhosted.org/packages/79/2a/7266c75840e8c6e70effeb0d38922a45720904f2cd695e68a0150e5407e2/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89", size = 408448, upload-time = "2025-08-07T08:24:50.727Z" }, - { url = "https://files.pythonhosted.org/packages/e6/5f/a7efc572b8e235093dc6cf39f4dbc8a7f08e65fdbcec7ff4daeb3585eef1/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d", size = 387320, upload-time = "2025-08-07T08:24:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/a2/eb/9ff6bc92efe57cf5a2cb74dee20453ba444b6fdc85275d8c99e0d27239d1/rpds_py-0.27.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51", size = 407414, upload-time = "2025-08-07T08:24:53.664Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bd/3b9b19b00d5c6e1bd0f418c229ab0f8d3b110ddf7ec5d9d689ef783d0268/rpds_py-0.27.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c", size = 420766, upload-time = "2025-08-07T08:24:55.917Z" }, - { url = "https://files.pythonhosted.org/packages/17/6b/521a7b1079ce16258c70805166e3ac6ec4ee2139d023fe07954dc9b2d568/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4", size = 562409, upload-time = "2025-08-07T08:24:57.17Z" }, - { url = "https://files.pythonhosted.org/packages/8b/bf/65db5bfb14ccc55e39de8419a659d05a2a9cd232f0a699a516bb0991da7b/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e", size = 590793, upload-time = "2025-08-07T08:24:58.388Z" }, - { url = "https://files.pythonhosted.org/packages/db/b8/82d368b378325191ba7aae8f40f009b78057b598d4394d1f2cdabaf67b3f/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e", size = 558178, upload-time = "2025-08-07T08:24:59.756Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ff/f270bddbfbc3812500f8131b1ebbd97afd014cd554b604a3f73f03133a36/rpds_py-0.27.0-cp314-cp314-win32.whl", hash = "sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6", size = 222355, upload-time = "2025-08-07T08:25:01.027Z" }, - { url = "https://files.pythonhosted.org/packages/bf/20/fdab055b1460c02ed356a0e0b0a78c1dd32dc64e82a544f7b31c9ac643dc/rpds_py-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a", size = 234007, upload-time = "2025-08-07T08:25:02.268Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a8/694c060005421797a3be4943dab8347c76c2b429a9bef68fb2c87c9e70c7/rpds_py-0.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d", size = 223527, upload-time = "2025-08-07T08:25:03.45Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f9/77f4c90f79d2c5ca8ce6ec6a76cb4734ee247de6b3a4f337e289e1f00372/rpds_py-0.27.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828", size = 359469, upload-time = "2025-08-07T08:25:04.648Z" }, - { url = "https://files.pythonhosted.org/packages/c0/22/b97878d2f1284286fef4172069e84b0b42b546ea7d053e5fb7adb9ac6494/rpds_py-0.27.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669", size = 343960, upload-time = "2025-08-07T08:25:05.863Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b0/dfd55b5bb480eda0578ae94ef256d3061d20b19a0f5e18c482f03e65464f/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd", size = 380201, upload-time = "2025-08-07T08:25:07.513Z" }, - { url = "https://files.pythonhosted.org/packages/28/22/e1fa64e50d58ad2b2053077e3ec81a979147c43428de9e6de68ddf6aff4e/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec", size = 392111, upload-time = "2025-08-07T08:25:09.149Z" }, - { url = "https://files.pythonhosted.org/packages/49/f9/43ab7a43e97aedf6cea6af70fdcbe18abbbc41d4ae6cdec1bfc23bbad403/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303", size = 515863, upload-time = "2025-08-07T08:25:10.431Z" }, - { url = "https://files.pythonhosted.org/packages/38/9b/9bd59dcc636cd04d86a2d20ad967770bf348f5eb5922a8f29b547c074243/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b", size = 402398, upload-time = "2025-08-07T08:25:11.819Z" }, - { url = "https://files.pythonhosted.org/packages/71/bf/f099328c6c85667aba6b66fa5c35a8882db06dcd462ea214be72813a0dd2/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410", size = 384665, upload-time = "2025-08-07T08:25:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c5/9c1f03121ece6634818490bd3c8be2c82a70928a19de03467fb25a3ae2a8/rpds_py-0.27.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156", size = 400405, upload-time = "2025-08-07T08:25:14.417Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b8/e25d54af3e63ac94f0c16d8fe143779fe71ff209445a0c00d0f6984b6b2c/rpds_py-0.27.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2", size = 413179, upload-time = "2025-08-07T08:25:15.664Z" }, - { url = "https://files.pythonhosted.org/packages/f9/d1/406b3316433fe49c3021546293a04bc33f1478e3ec7950215a7fce1a1208/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1", size = 556895, upload-time = "2025-08-07T08:25:17.061Z" }, - { url = "https://files.pythonhosted.org/packages/5f/bc/3697c0c21fcb9a54d46ae3b735eb2365eea0c2be076b8f770f98e07998de/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42", size = 585464, upload-time = "2025-08-07T08:25:18.406Z" }, - { url = "https://files.pythonhosted.org/packages/63/09/ee1bb5536f99f42c839b177d552f6114aa3142d82f49cef49261ed28dbe0/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae", size = 555090, upload-time = "2025-08-07T08:25:20.461Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2c/363eada9e89f7059199d3724135a86c47082cbf72790d6ba2f336d146ddb/rpds_py-0.27.0-cp314-cp314t-win32.whl", hash = "sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5", size = 218001, upload-time = "2025-08-07T08:25:21.761Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3f/d6c216ed5199c9ef79e2a33955601f454ed1e7420a93b89670133bca5ace/rpds_py-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391", size = 230993, upload-time = "2025-08-07T08:25:23.34Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2e/82fee0cb7142bc32a9ce586eadd24a945257c016902d575bb377ad5feb10/rpds_py-0.27.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e", size = 371495, upload-time = "2025-08-07T08:25:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/f9/b5/b421756c7e5cc1d2bb438a34b16f750363d0d87caf2bfa6f2326423c42e5/rpds_py-0.27.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451", size = 354823, upload-time = "2025-08-07T08:25:25.854Z" }, - { url = "https://files.pythonhosted.org/packages/f9/4a/63337bbabfa38d4094144d0e689758e8452372fd3e45359b806fc1b4c022/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112", size = 381538, upload-time = "2025-08-07T08:25:27.17Z" }, - { url = "https://files.pythonhosted.org/packages/33/8b/14eb61fb9a5bb830d28c548e3e67046fd04cae06c2ce6afe7f30aba7f7f0/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79af163a4b40bbd8cfd7ca86ec8b54b81121d3b213b4435ea27d6568bcba3e9d", size = 396724, upload-time = "2025-08-07T08:25:28.409Z" }, - { url = "https://files.pythonhosted.org/packages/03/54/47faf6aa4040443b108b24ae08e9db6fe6daaa8140b696f905833f325293/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2eff8ee57c5996b0d2a07c3601fb4ce5fbc37547344a26945dd9e5cbd1ed27a", size = 517084, upload-time = "2025-08-07T08:25:29.698Z" }, - { url = "https://files.pythonhosted.org/packages/0b/88/a78dbacc9a96e3ea7e83d9bed8f272754e618c629ed6a9f8e2a506c84419/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7cf9bc4508efb18d8dff6934b602324eb9f8c6644749627ce001d6f38a490889", size = 402397, upload-time = "2025-08-07T08:25:31.21Z" }, - { url = "https://files.pythonhosted.org/packages/6b/88/268c6422c0c3a0f01bf6e79086f6e4dbc6a2e60a6e95413ad17e3392ec0a/rpds_py-0.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05284439ebe7d9f5f5a668d4d8a0a1d851d16f7d47c78e1fab968c8ad30cab04", size = 383570, upload-time = "2025-08-07T08:25:32.842Z" }, - { url = "https://files.pythonhosted.org/packages/9c/1a/34f5a2459b9752cc08e02c3845c8f570222f7dbd48c7baac4b827701a40e/rpds_py-0.27.0-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:1321bce595ad70e80f97f998db37356b2e22cf98094eba6fe91782e626da2f71", size = 401771, upload-time = "2025-08-07T08:25:34.201Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9b/16979115f2ec783ca06454a141a0f32f082763ef874675c5f756e6e76fcd/rpds_py-0.27.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:737005088449ddd3b3df5a95476ee1c2c5c669f5c30eed909548a92939c0e12d", size = 416215, upload-time = "2025-08-07T08:25:35.559Z" }, - { url = "https://files.pythonhosted.org/packages/81/0b/0305df88fb22db8efe81753ce4ec51b821555448fd94ec77ae4e5dfd57b7/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9b2a4e17bfd68536c3b801800941c95a1d4a06e3cada11c146093ba939d9638d", size = 558573, upload-time = "2025-08-07T08:25:36.935Z" }, - { url = "https://files.pythonhosted.org/packages/84/9a/c48be4da43a556495cf66d6bf71a16e8e3e22ae8e724b678e430521d0702/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dc6b0d5a1ea0318ef2def2b6a55dccf1dcaf77d605672347271ed7b829860765", size = 587956, upload-time = "2025-08-07T08:25:38.338Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/deb1111abde461330c4dad22b14347d064161fb7cb249746a06accc07633/rpds_py-0.27.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83", size = 554493, upload-time = "2025-08-07T08:25:39.665Z" }, - { url = "https://files.pythonhosted.org/packages/cb/16/5342d91917f26da91fc193932d9fbf422e2903aaee9bd3c6ecb4875ef17f/rpds_py-0.27.0-cp39-cp39-win32.whl", hash = "sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86", size = 218302, upload-time = "2025-08-07T08:25:41.401Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a3/0346108a47efe41b50d8781688b7fb16b18d252053486c932d10b18977c9/rpds_py-0.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6", size = 229977, upload-time = "2025-08-07T08:25:42.685Z" }, - { url = "https://files.pythonhosted.org/packages/47/55/287068956f9ba1cb40896d291213f09fdd4527630709058b45a592bc09dc/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8", size = 371566, upload-time = "2025-08-07T08:25:43.95Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/443af59cbe552e89680bb0f1d1ba47f6387b92083e28a45b8c8863b86c5a/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe", size = 355781, upload-time = "2025-08-07T08:25:45.256Z" }, - { url = "https://files.pythonhosted.org/packages/ad/f0/35f48bb073b5ca42b1dcc55cb148f4a3bd4411a3e584f6a18d26f0ea8832/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1", size = 382575, upload-time = "2025-08-07T08:25:46.524Z" }, - { url = "https://files.pythonhosted.org/packages/51/e1/5f5296a21d1189f0f116a938af2e346d83172bf814d373695e54004a936f/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e39169ac6aae06dd79c07c8a69d9da867cef6a6d7883a0186b46bb46ccfb0c3", size = 397435, upload-time = "2025-08-07T08:25:48.204Z" }, - { url = "https://files.pythonhosted.org/packages/97/79/3af99b7852b2b55cad8a08863725cbe9dc14781bcf7dc6ecead0c3e1dc54/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:935afcdea4751b0ac918047a2df3f720212892347767aea28f5b3bf7be4f27c0", size = 514861, upload-time = "2025-08-07T08:25:49.814Z" }, - { url = "https://files.pythonhosted.org/packages/df/3e/11fd6033708ed3ae0e6947bb94f762f56bb46bf59a1b16eef6944e8a62ee/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8de567dec6d451649a781633d36f5c7501711adee329d76c095be2178855b042", size = 402776, upload-time = "2025-08-07T08:25:51.135Z" }, - { url = "https://files.pythonhosted.org/packages/b7/89/f9375ceaa996116de9cbc949874804c7874d42fb258c384c037a46d730b8/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:555ed147cbe8c8f76e72a4c6cd3b7b761cbf9987891b9448808148204aed74a5", size = 384665, upload-time = "2025-08-07T08:25:52.82Z" }, - { url = "https://files.pythonhosted.org/packages/48/bf/0061e55c6f1f573a63c0f82306b8984ed3b394adafc66854a936d5db3522/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:d2cc2b34f9e1d31ce255174da82902ad75bd7c0d88a33df54a77a22f2ef421ee", size = 402518, upload-time = "2025-08-07T08:25:54.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/dc/8d506676bfe87b3b683332ec8e6ab2b0be118a3d3595ed021e3274a63191/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb0702c12983be3b2fab98ead349ac63a98216d28dda6f518f52da5498a27a1b", size = 416247, upload-time = "2025-08-07T08:25:55.433Z" }, - { url = "https://files.pythonhosted.org/packages/2e/02/9a89eea1b75c69e81632de7963076e455b1e00e1cfb46dfdabb055fa03e3/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ba783541be46f27c8faea5a6645e193943c17ea2f0ffe593639d906a327a9bcc", size = 559456, upload-time = "2025-08-07T08:25:56.866Z" }, - { url = "https://files.pythonhosted.org/packages/38/4a/0f3ac4351957847c0d322be6ec72f916e43804a2c1d04e9672ea4a67c315/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:2406d034635d1497c596c40c85f86ecf2bf9611c1df73d14078af8444fe48031", size = 587778, upload-time = "2025-08-07T08:25:58.202Z" }, - { url = "https://files.pythonhosted.org/packages/c2/8e/39d0d7401095bed5a5ad5ef304fae96383f9bef40ca3f3a0807ff5b68d9d/rpds_py-0.27.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dea0808153f1fbbad772669d906cddd92100277533a03845de6893cadeffc8be", size = 555247, upload-time = "2025-08-07T08:25:59.707Z" }, - { url = "https://files.pythonhosted.org/packages/e0/04/6b8311e811e620b9eaca67cd80a118ff9159558a719201052a7b2abb88bf/rpds_py-0.27.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2a81bdcfde4245468f7030a75a37d50400ac2455c3a4819d9d550c937f90ab5", size = 230256, upload-time = "2025-08-07T08:26:01.07Z" }, - { url = "https://files.pythonhosted.org/packages/59/64/72ab5b911fdcc48058359b0e786e5363e3fde885156116026f1a2ba9a5b5/rpds_py-0.27.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e6491658dd2569f05860bad645569145c8626ac231877b0fb2d5f9bcb7054089", size = 371658, upload-time = "2025-08-07T08:26:02.369Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4b/90ff04b4da055db53d8fea57640d8d5d55456343a1ec9a866c0ecfe10fd1/rpds_py-0.27.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec77545d188f8bdd29d42bccb9191682a46fb2e655e3d1fb446d47c55ac3b8d", size = 355529, upload-time = "2025-08-07T08:26:03.83Z" }, - { url = "https://files.pythonhosted.org/packages/a4/be/527491fb1afcd86fc5ce5812eb37bc70428ee017d77fee20de18155c3937/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a4aebf8ca02bbb90a9b3e7a463bbf3bee02ab1c446840ca07b1695a68ce424", size = 382822, upload-time = "2025-08-07T08:26:05.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a5/dcdb8725ce11e6d0913e6fcf782a13f4b8a517e8acc70946031830b98441/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44524b96481a4c9b8e6c46d6afe43fa1fb485c261e359fbe32b63ff60e3884d8", size = 397233, upload-time = "2025-08-07T08:26:07.179Z" }, - { url = "https://files.pythonhosted.org/packages/33/f9/0947920d1927e9f144660590cc38cadb0795d78fe0d9aae0ef71c1513b7c/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45d04a73c54b6a5fd2bab91a4b5bc8b426949586e61340e212a8484919183859", size = 514892, upload-time = "2025-08-07T08:26:08.622Z" }, - { url = "https://files.pythonhosted.org/packages/1d/ed/d1343398c1417c68f8daa1afce56ef6ce5cc587daaf98e29347b00a80ff2/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:343cf24de9ed6c728abefc5d5c851d5de06497caa7ac37e5e65dd572921ed1b5", size = 402733, upload-time = "2025-08-07T08:26:10.433Z" }, - { url = "https://files.pythonhosted.org/packages/1d/0b/646f55442cd14014fb64d143428f25667a100f82092c90087b9ea7101c74/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aed8118ae20515974650d08eb724150dc2e20c2814bcc307089569995e88a14", size = 384447, upload-time = "2025-08-07T08:26:11.847Z" }, - { url = "https://files.pythonhosted.org/packages/4b/15/0596ef7529828e33a6c81ecf5013d1dd33a511a3e0be0561f83079cda227/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:af9d4fd79ee1cc8e7caf693ee02737daabfc0fcf2773ca0a4735b356c8ad6f7c", size = 402502, upload-time = "2025-08-07T08:26:13.537Z" }, - { url = "https://files.pythonhosted.org/packages/c3/8d/986af3c42f8454a6cafff8729d99fb178ae9b08a9816325ac7a8fa57c0c0/rpds_py-0.27.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f0396e894bd1e66c74ecbc08b4f6a03dc331140942c4b1d345dd131b68574a60", size = 416651, upload-time = "2025-08-07T08:26:14.923Z" }, - { url = "https://files.pythonhosted.org/packages/e9/9a/b4ec3629b7b447e896eec574469159b5b60b7781d3711c914748bf32de05/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:59714ab0a5af25d723d8e9816638faf7f4254234decb7d212715c1aa71eee7be", size = 559460, upload-time = "2025-08-07T08:26:16.295Z" }, - { url = "https://files.pythonhosted.org/packages/61/63/d1e127b40c3e4733b3a6f26ae7a063cdf2bc1caa5272c89075425c7d397a/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:88051c3b7d5325409f433c5a40328fcb0685fc04e5db49ff936e910901d10114", size = 588072, upload-time = "2025-08-07T08:26:17.776Z" }, - { url = "https://files.pythonhosted.org/packages/04/7e/8ffc71a8f6833d9c9fb999f5b0ee736b8b159fd66968e05c7afc2dbcd57e/rpds_py-0.27.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:181bc29e59e5e5e6e9d63b143ff4d5191224d355e246b5a48c88ce6b35c4e466", size = 555083, upload-time = "2025-08-07T08:26:19.301Z" }, - { url = "https://files.pythonhosted.org/packages/a8/fc/ef6386838e0e91d6ba79b741ccce6ca987e89619aa86f418fecf381eba23/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b", size = 371849, upload-time = "2025-08-07T08:26:20.597Z" }, - { url = "https://files.pythonhosted.org/packages/2c/f8/f30394aff811bc0f13fab8d8e4b9f880fcb678234eb0af7d2c4b6232f44f/rpds_py-0.27.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d", size = 356437, upload-time = "2025-08-07T08:26:21.899Z" }, - { url = "https://files.pythonhosted.org/packages/87/56/ed704fc668c9abc56d3686b723e4d6f2585597daf4b68b654ade7c97930d/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49", size = 382247, upload-time = "2025-08-07T08:26:23.712Z" }, - { url = "https://files.pythonhosted.org/packages/48/55/6ef2c9b7caae3c1c360d9556a70979e16f21bfb1e94f50f481d224f3b8aa/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc662bc9375a6a394b62dfd331874c434819f10ee3902123200dbcf116963f89", size = 397223, upload-time = "2025-08-07T08:26:25.156Z" }, - { url = "https://files.pythonhosted.org/packages/63/04/8fc2059411daaca733155fc2613cc91dc728d7abe31fd0c0fa4c7ec5ff1a/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299a245537e697f28a7511d01038c310ac74e8ea213c0019e1fc65f52c0dcb23", size = 516308, upload-time = "2025-08-07T08:26:26.585Z" }, - { url = "https://files.pythonhosted.org/packages/a4/d0/b79d3fe07c47bfa989139e692f85371f5a0e1376696b173dabe7ac77b7d1/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:be3964f7312ea05ed283b20f87cb533fdc555b2e428cc7be64612c0b2124f08c", size = 401967, upload-time = "2025-08-07T08:26:27.905Z" }, - { url = "https://files.pythonhosted.org/packages/cd/b1/55014f6da5ec8029d1d7d7d2a884b9d7ad7f217e05bb9cb782f06d8209c4/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33ba649a6e55ae3808e4c39e01580dc9a9b0d5b02e77b66bb86ef117922b1264", size = 384584, upload-time = "2025-08-07T08:26:29.251Z" }, - { url = "https://files.pythonhosted.org/packages/86/34/5c5c1a8550ac172dd6cd53925c321363d94b2a1f0b3173743dbbfd87b8ec/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:81f81bbd7cdb4bdc418c09a73809abeda8f263a6bf8f9c7f93ed98b5597af39d", size = 401879, upload-time = "2025-08-07T08:26:30.598Z" }, - { url = "https://files.pythonhosted.org/packages/35/07/009bbc659388c4c5a256f05f56df207633cda2f5d61a8d54c50c427e435e/rpds_py-0.27.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11e8e28c0ba0373d052818b600474cfee2fafa6c9f36c8587d217b13ee28ca7d", size = 416908, upload-time = "2025-08-07T08:26:32.074Z" }, - { url = "https://files.pythonhosted.org/packages/7a/cc/8949c13dc5a05d955cb88909bfac4004805974dec7b0d02543de55e43272/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e3acb9c16530362aeaef4e84d57db357002dc5cbfac9a23414c3e73c08301ab2", size = 559105, upload-time = "2025-08-07T08:26:33.53Z" }, - { url = "https://files.pythonhosted.org/packages/ea/40/574da2033b01d6e2e7fa3b021993321565c6634f9d0021707d210ce35b58/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2e307cb5f66c59ede95c00e93cd84190a5b7f3533d7953690b2036780622ba81", size = 588335, upload-time = "2025-08-07T08:26:34.961Z" }, - { url = "https://files.pythonhosted.org/packages/1d/83/72ed1ce357d8c63bde0bba2458a502e7cc4e150e272139161e1d205a9d67/rpds_py-0.27.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f09c9d4c26fa79c1bad927efb05aca2391350b8e61c38cbc0d7d3c814e463124", size = 555094, upload-time = "2025-08-07T08:26:36.838Z" }, - { url = "https://files.pythonhosted.org/packages/6f/15/fc639de53b3798340233f37959d252311b30d1834b65a02741e3373407fa/rpds_py-0.27.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af22763a0a1eff106426a6e1f13c4582e0d0ad89c1493ab6c058236174cd6c6a", size = 230031, upload-time = "2025-08-07T08:26:38.332Z" }, +version = "0.27.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479, upload-time = "2025-08-27T12:16:36.024Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606, upload-time = "2025-08-27T12:12:25.189Z" }, + { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452, upload-time = "2025-08-27T12:12:27.433Z" }, + { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519, upload-time = "2025-08-27T12:12:28.719Z" }, + { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424, upload-time = "2025-08-27T12:12:30.207Z" }, + { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467, upload-time = "2025-08-27T12:12:31.808Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660, upload-time = "2025-08-27T12:12:33.444Z" }, + { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062, upload-time = "2025-08-27T12:12:34.857Z" }, + { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289, upload-time = "2025-08-27T12:12:36.085Z" }, + { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718, upload-time = "2025-08-27T12:12:37.401Z" }, + { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333, upload-time = "2025-08-27T12:12:38.672Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127, upload-time = "2025-08-27T12:12:41.48Z" }, + { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899, upload-time = "2025-08-27T12:12:42.925Z" }, + { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450, upload-time = "2025-08-27T12:12:44.813Z" }, + { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447, upload-time = "2025-08-27T12:12:46.204Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063, upload-time = "2025-08-27T12:12:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210, upload-time = "2025-08-27T12:12:49.187Z" }, + { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636, upload-time = "2025-08-27T12:12:50.492Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341, upload-time = "2025-08-27T12:12:52.024Z" }, + { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428, upload-time = "2025-08-27T12:12:53.779Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923, upload-time = "2025-08-27T12:12:55.15Z" }, + { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094, upload-time = "2025-08-27T12:12:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093, upload-time = "2025-08-27T12:12:58.985Z" }, + { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969, upload-time = "2025-08-27T12:13:00.367Z" }, + { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302, upload-time = "2025-08-27T12:13:01.737Z" }, + { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259, upload-time = "2025-08-27T12:13:03.127Z" }, + { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983, upload-time = "2025-08-27T12:13:04.516Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154, upload-time = "2025-08-27T12:13:06.278Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627, upload-time = "2025-08-27T12:13:07.625Z" }, + { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998, upload-time = "2025-08-27T12:13:08.972Z" }, + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887, upload-time = "2025-08-27T12:13:10.233Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795, upload-time = "2025-08-27T12:13:11.65Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121, upload-time = "2025-08-27T12:13:13.008Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976, upload-time = "2025-08-27T12:13:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953, upload-time = "2025-08-27T12:13:15.774Z" }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915, upload-time = "2025-08-27T12:13:17.379Z" }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883, upload-time = "2025-08-27T12:13:18.704Z" }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699, upload-time = "2025-08-27T12:13:20.089Z" }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713, upload-time = "2025-08-27T12:13:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324, upload-time = "2025-08-27T12:13:22.789Z" }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646, upload-time = "2025-08-27T12:13:24.122Z" }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137, upload-time = "2025-08-27T12:13:25.557Z" }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343, upload-time = "2025-08-27T12:13:26.967Z" }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497, upload-time = "2025-08-27T12:13:28.326Z" }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790, upload-time = "2025-08-27T12:13:29.71Z" }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741, upload-time = "2025-08-27T12:13:31.039Z" }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574, upload-time = "2025-08-27T12:13:32.902Z" }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051, upload-time = "2025-08-27T12:13:34.228Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395, upload-time = "2025-08-27T12:13:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334, upload-time = "2025-08-27T12:13:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691, upload-time = "2025-08-27T12:13:38.94Z" }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868, upload-time = "2025-08-27T12:13:40.192Z" }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469, upload-time = "2025-08-27T12:13:41.496Z" }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125, upload-time = "2025-08-27T12:13:42.802Z" }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341, upload-time = "2025-08-27T12:13:44.472Z" }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511, upload-time = "2025-08-27T12:13:45.898Z" }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736, upload-time = "2025-08-27T12:13:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462, upload-time = "2025-08-27T12:13:48.742Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034, upload-time = "2025-08-27T12:13:50.11Z" }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392, upload-time = "2025-08-27T12:13:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355, upload-time = "2025-08-27T12:13:54.012Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138, upload-time = "2025-08-27T12:13:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247, upload-time = "2025-08-27T12:13:57.683Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699, upload-time = "2025-08-27T12:13:59.137Z" }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852, upload-time = "2025-08-27T12:14:00.583Z" }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582, upload-time = "2025-08-27T12:14:02.034Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126, upload-time = "2025-08-27T12:14:03.437Z" }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486, upload-time = "2025-08-27T12:14:05.443Z" }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832, upload-time = "2025-08-27T12:14:06.902Z" }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249, upload-time = "2025-08-27T12:14:08.37Z" }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356, upload-time = "2025-08-27T12:14:10.034Z" }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300, upload-time = "2025-08-27T12:14:11.783Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714, upload-time = "2025-08-27T12:14:13.629Z" }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943, upload-time = "2025-08-27T12:14:14.937Z" }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472, upload-time = "2025-08-27T12:14:16.333Z" }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676, upload-time = "2025-08-27T12:14:17.764Z" }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313, upload-time = "2025-08-27T12:14:19.829Z" }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080, upload-time = "2025-08-27T12:14:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868, upload-time = "2025-08-27T12:14:23.485Z" }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750, upload-time = "2025-08-27T12:14:24.924Z" }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688, upload-time = "2025-08-27T12:14:27.537Z" }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225, upload-time = "2025-08-27T12:14:28.981Z" }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361, upload-time = "2025-08-27T12:14:30.469Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493, upload-time = "2025-08-27T12:14:31.987Z" }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623, upload-time = "2025-08-27T12:14:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800, upload-time = "2025-08-27T12:14:35.436Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943, upload-time = "2025-08-27T12:14:36.898Z" }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739, upload-time = "2025-08-27T12:14:38.386Z" }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120, upload-time = "2025-08-27T12:14:39.82Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944, upload-time = "2025-08-27T12:14:41.199Z" }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283, upload-time = "2025-08-27T12:14:42.699Z" }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320, upload-time = "2025-08-27T12:14:44.157Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760, upload-time = "2025-08-27T12:14:45.845Z" }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476, upload-time = "2025-08-27T12:14:47.364Z" }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418, upload-time = "2025-08-27T12:14:49.991Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771, upload-time = "2025-08-27T12:14:52.159Z" }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022, upload-time = "2025-08-27T12:14:53.859Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787, upload-time = "2025-08-27T12:14:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538, upload-time = "2025-08-27T12:14:57.245Z" }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512, upload-time = "2025-08-27T12:14:58.728Z" }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813, upload-time = "2025-08-27T12:15:00.334Z" }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385, upload-time = "2025-08-27T12:15:01.937Z" }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097, upload-time = "2025-08-27T12:15:03.961Z" }, + { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360, upload-time = "2025-08-27T12:15:29.218Z" }, + { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933, upload-time = "2025-08-27T12:15:30.837Z" }, + { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962, upload-time = "2025-08-27T12:15:32.348Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412, upload-time = "2025-08-27T12:15:33.839Z" }, + { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972, upload-time = "2025-08-27T12:15:35.377Z" }, + { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273, upload-time = "2025-08-27T12:15:37.051Z" }, + { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278, upload-time = "2025-08-27T12:15:38.571Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084, upload-time = "2025-08-27T12:15:40.529Z" }, + { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041, upload-time = "2025-08-27T12:15:42.191Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084, upload-time = "2025-08-27T12:15:43.839Z" }, + { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115, upload-time = "2025-08-27T12:15:46.647Z" }, + { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561, upload-time = "2025-08-27T12:15:48.219Z" }, + { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125, upload-time = "2025-08-27T12:15:49.956Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402, upload-time = "2025-08-27T12:15:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084, upload-time = "2025-08-27T12:15:53.219Z" }, + { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090, upload-time = "2025-08-27T12:15:55.158Z" }, + { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519, upload-time = "2025-08-27T12:15:57.238Z" }, + { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817, upload-time = "2025-08-27T12:15:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240, upload-time = "2025-08-27T12:16:00.923Z" }, + { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194, upload-time = "2025-08-27T12:16:02.802Z" }, + { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086, upload-time = "2025-08-27T12:16:04.806Z" }, + { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272, upload-time = "2025-08-27T12:16:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003, upload-time = "2025-08-27T12:16:08.06Z" }, + { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482, upload-time = "2025-08-27T12:16:10.137Z" }, + { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523, upload-time = "2025-08-27T12:16:12.188Z" }, ] [[package]] @@ -3807,7 +4159,7 @@ name = "ruamel-yaml" version = "0.18.15" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ruamel-yaml-clib", marker = "python_full_version < '3.10' and platform_python_implementation == 'CPython'" }, + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload-time = "2025-08-19T11:15:10.694Z" } wheels = [ @@ -3816,76 +4168,70 @@ wheels = [ [[package]] name = "ruamel-yaml-clib" -version = "0.2.12" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload-time = "2024-10-20T10:10:56.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/a8/29a3eb437b12b95f50a6bcc3d7d7214301c6c529d8fdc227247fa84162b5/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969", size = 633728, upload-time = "2024-10-20T10:12:37.858Z" }, - { url = "https://files.pythonhosted.org/packages/35/6d/ae05a87a3ad540259c3ad88d71275cbd1c0f2d30ae04c65dcbfb6dcd4b9f/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df", size = 722230, upload-time = "2024-10-20T10:12:39.457Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b7/20c6f3c0b656fe609675d69bc135c03aac9e3865912444be6339207b6648/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76", size = 686712, upload-time = "2024-10-20T10:12:41.119Z" }, - { url = "https://files.pythonhosted.org/packages/cd/11/d12dbf683471f888d354dac59593873c2b45feb193c5e3e0f2ebf85e68b9/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6", size = 663936, upload-time = "2024-10-21T11:26:37.419Z" }, - { url = "https://files.pythonhosted.org/packages/72/14/4c268f5077db5c83f743ee1daeb236269fa8577133a5cfa49f8b382baf13/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd", size = 696580, upload-time = "2024-10-21T11:26:39.503Z" }, - { url = "https://files.pythonhosted.org/packages/30/fc/8cd12f189c6405a4c1cf37bd633aa740a9538c8e40497c231072d0fef5cf/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a", size = 663393, upload-time = "2024-12-11T19:58:13.873Z" }, - { url = "https://files.pythonhosted.org/packages/80/29/c0a017b704aaf3cbf704989785cd9c5d5b8ccec2dae6ac0c53833c84e677/ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da", size = 100326, upload-time = "2024-10-20T10:12:42.967Z" }, - { url = "https://files.pythonhosted.org/packages/3a/65/fa39d74db4e2d0cd252355732d966a460a41cd01c6353b820a0952432839/ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28", size = 118079, upload-time = "2024-10-20T10:12:44.117Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d2/b79b7d695e2f21da020bd44c782490578f300dd44f0a4c57a92575758a76/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e", size = 641480, upload-time = "2024-10-20T10:12:46.758Z" }, - { url = "https://files.pythonhosted.org/packages/68/6e/264c50ce2a31473a9fdbf4fa66ca9b2b17c7455b31ef585462343818bd6c/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e", size = 739068, upload-time = "2024-10-20T10:12:48.605Z" }, - { url = "https://files.pythonhosted.org/packages/86/29/88c2567bc893c84d88b4c48027367c3562ae69121d568e8a3f3a8d363f4d/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52", size = 703012, upload-time = "2024-10-20T10:12:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/11/46/879763c619b5470820f0cd6ca97d134771e502776bc2b844d2adb6e37753/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642", size = 704352, upload-time = "2024-10-21T11:26:41.438Z" }, - { url = "https://files.pythonhosted.org/packages/02/80/ece7e6034256a4186bbe50dee28cd032d816974941a6abf6a9d65e4228a7/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2", size = 737344, upload-time = "2024-10-21T11:26:43.62Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ca/e4106ac7e80efbabdf4bf91d3d32fc424e41418458251712f5672eada9ce/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3", size = 714498, upload-time = "2024-12-11T19:58:15.592Z" }, - { url = "https://files.pythonhosted.org/packages/67/58/b1f60a1d591b771298ffa0428237afb092c7f29ae23bad93420b1eb10703/ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4", size = 100205, upload-time = "2024-10-20T10:12:52.865Z" }, - { url = "https://files.pythonhosted.org/packages/b4/4f/b52f634c9548a9291a70dfce26ca7ebce388235c93588a1068028ea23fcc/ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb", size = 118185, upload-time = "2024-10-20T10:12:54.652Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload-time = "2024-10-20T10:12:57.155Z" }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload-time = "2024-10-20T10:12:58.501Z" }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload-time = "2024-10-20T10:13:00.211Z" }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload-time = "2024-10-21T11:26:46.038Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload-time = "2024-10-21T11:26:47.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload-time = "2024-12-11T19:58:17.252Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload-time = "2024-10-20T10:13:01.395Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload-time = "2024-10-20T10:13:02.768Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488, upload-time = "2024-10-20T10:13:05.906Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066, upload-time = "2024-10-20T10:13:07.26Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785, upload-time = "2024-10-20T10:13:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017, upload-time = "2024-10-21T11:26:48.866Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270, upload-time = "2024-10-21T11:26:50.213Z" }, - { url = "https://files.pythonhosted.org/packages/87/b8/01c29b924dcbbed75cc45b30c30d565d763b9c4d540545a0eeecffb8f09c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01", size = 709059, upload-time = "2024-12-11T19:58:18.846Z" }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583, upload-time = "2024-10-20T10:13:09.658Z" }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190, upload-time = "2024-10-20T10:13:10.66Z" }, - { url = "https://files.pythonhosted.org/packages/29/09/932360f30ad1b7b79f08757e0a6fb8c5392a52cdcc182779158fe66d25ac/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45", size = 636120, upload-time = "2024-10-20T10:13:12.84Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2a/5b27602e7a4344c1334e26bf4739746206b7a60a8acdba33a61473468b73/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519", size = 724914, upload-time = "2024-10-20T10:13:14.605Z" }, - { url = "https://files.pythonhosted.org/packages/da/1c/23497017c554fc06ff5701b29355522cff850f626337fff35d9ab352cb18/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7", size = 689072, upload-time = "2024-10-20T10:13:15.939Z" }, - { url = "https://files.pythonhosted.org/packages/68/e6/f3d4ff3223f9ea49c3b7169ec0268e42bd49f87c70c0e3e853895e4a7ae2/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285", size = 667091, upload-time = "2024-10-21T11:26:52.274Z" }, - { url = "https://files.pythonhosted.org/packages/84/62/ead07043527642491e5011b143f44b81ef80f1025a96069b7210e0f2f0f3/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed", size = 699111, upload-time = "2024-10-21T11:26:54.294Z" }, - { url = "https://files.pythonhosted.org/packages/52/b3/fe4d84446f7e4887e3bea7ceff0a7df23790b5ed625f830e79ace88ebefb/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7", size = 666365, upload-time = "2024-12-11T19:58:20.444Z" }, - { url = "https://files.pythonhosted.org/packages/6e/b3/7feb99a00bfaa5c6868617bb7651308afde85e5a0b23cd187fe5de65feeb/ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12", size = 100863, upload-time = "2024-10-20T10:13:17.244Z" }, - { url = "https://files.pythonhosted.org/packages/93/07/de635108684b7a5bb06e432b0930c5a04b6c59efe73bd966d8db3cc208f2/ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b", size = 118653, upload-time = "2024-10-20T10:13:18.289Z" }, +version = "0.2.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e9/39ec4d4b3f91188fad1842748f67d4e749c77c37e353c4e545052ee8e893/ruamel.yaml.clib-0.2.14.tar.gz", hash = "sha256:803f5044b13602d58ea378576dd75aa759f52116a0232608e8fdada4da33752e", size = 225394, upload-time = "2025-09-22T19:51:23.753Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/3f/cfed5f088628128a9ec66f46794fd4d165642155c7b78c26d83b16c6bf7b/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a0ac90efbc7a77b0d796c03c8cc4e62fd710b3f1e4c32947713ef2ef52e09543", size = 633768, upload-time = "2025-09-22T19:50:31.228Z" }, + { url = "https://files.pythonhosted.org/packages/3a/d5/5ce2cc156c1da48160171968d91f066d305840fbf930ee955a509d025a44/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bf6b699223afe6c7fe9f2ef76e0bfa6dd892c21e94ce8c957478987ade76cd8", size = 721253, upload-time = "2025-09-22T19:50:28.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/71/d0b56bc902b38ebe4be8e270f730f929eec4edaf8a0fa7028f4ef64fa950/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d73a0187718f6eec5b2f729b0f98e4603f7bd9c48aa65d01227d1a5dcdfbe9e8", size = 683823, upload-time = "2025-09-22T19:50:29.993Z" }, + { url = "https://files.pythonhosted.org/packages/4b/db/1f37449dd89c540218598316ccafc1a0aed60215e72efa315c5367cfd015/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81f6d3b19bc703679a5705c6a16dabdc79823c71d791d73c65949be7f3012c02", size = 690370, upload-time = "2025-09-23T18:42:46.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/53/c498b30f35efcd9f47cb084d7ad9374f2b907470f73913dec6396b81397d/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b28caeaf3e670c08cb7e8de221266df8494c169bd6ed8875493fab45be9607a4", size = 703578, upload-time = "2025-09-22T19:50:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/34/79/492cfad9baed68914840c39e5f3c1cc251f51a897ddb3f532601215cbb12/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94f3efb718f8f49b031f2071ec7a27dd20cbfe511b4dfd54ecee54c956da2b31", size = 722544, upload-time = "2025-09-22T19:50:34.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f5/479ebfd5ba396e209ade90f7282d84b90c57b3e07be8dc6fcd02a6df7ffc/ruamel.yaml.clib-0.2.14-cp310-cp310-win32.whl", hash = "sha256:27c070cf3888e90d992be75dd47292ff9aa17dafd36492812a6a304a1aedc182", size = 100375, upload-time = "2025-09-22T19:50:36.832Z" }, + { url = "https://files.pythonhosted.org/packages/57/31/a044520fdb3bd409889f67f1efebda0658033c7ab3f390cee37531cc9a9e/ruamel.yaml.clib-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:4f4a150a737fccae13fb51234d41304ff2222e3b7d4c8e9428ed1a6ab48389b8", size = 118129, upload-time = "2025-09-22T19:50:35.545Z" }, + { url = "https://files.pythonhosted.org/packages/31/c6/fc687cd1b93bff8e40861eea46d6dc1a6a778d9a085684e4045ff26a8e40/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:10d9595b6a19778f3269399eff6bab642608e5966183abc2adbe558a42d4efc9", size = 641590, upload-time = "2025-09-22T19:50:41.978Z" }, + { url = "https://files.pythonhosted.org/packages/45/5d/65a2bc08b709b08576b3f307bf63951ee68a8e047cbbda6f1c9864ecf9a7/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba72975485f2b87b786075e18a6e5d07dc2b4d8973beb2732b9b2816f1bad70", size = 738090, upload-time = "2025-09-22T19:50:39.152Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d0/a70a03614d9a6788a3661ab1538879ed2aae4e84d861f101243116308a37/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29757bdb7c142f9595cc1b62ec49a3d1c83fab9cef92db52b0ccebaad4eafb98", size = 700744, upload-time = "2025-09-22T19:50:40.811Z" }, + { url = "https://files.pythonhosted.org/packages/77/30/c93fa457611f79946d5cb6cc97493ca5425f3f21891d7b1f9b44eaa1b38e/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:557df28dbccf79b152fe2d1b935f6063d9cc431199ea2b0e84892f35c03bb0ee", size = 742321, upload-time = "2025-09-23T18:42:48.916Z" }, + { url = "https://files.pythonhosted.org/packages/40/85/e2c54ad637117cd13244a4649946eaa00f32edcb882d1f92df90e079ab00/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:26a8de280ab0d22b6e3ec745b4a5a07151a0f74aad92dd76ab9c8d8d7087720d", size = 743805, upload-time = "2025-09-22T19:50:43.58Z" }, + { url = "https://files.pythonhosted.org/packages/81/50/f899072c38877d8ef5382e0b3d47f8c4346226c1f52d6945d6f64fec6a2f/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e501c096aa3889133d674605ebd018471bc404a59cbc17da3c5924421c54d97c", size = 769529, upload-time = "2025-09-22T19:50:45.707Z" }, + { url = "https://files.pythonhosted.org/packages/99/7c/96d4b5075e30c65ea2064e40c2d657c7c235d7b6ef18751cf89a935b9041/ruamel.yaml.clib-0.2.14-cp311-cp311-win32.whl", hash = "sha256:915748cfc25b8cfd81b14d00f4bfdb2ab227a30d6d43459034533f4d1c207a2a", size = 100256, upload-time = "2025-09-22T19:50:48.26Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8c/73ee2babd04e8bfcf1fd5c20aa553d18bf0ebc24b592b4f831d12ae46cc0/ruamel.yaml.clib-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:4ccba93c1e5a40af45b2f08e4591969fa4697eae951c708f3f83dcbf9f6c6bb1", size = 118234, upload-time = "2025-09-22T19:50:47.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c5/346c7094344a60419764b4b1334d9e0285031c961176ff88ffb652405b0c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a911aa73588d9a8b08d662b9484bc0567949529824a55d3885b77e8dd62a127a", size = 647404, upload-time = "2025-09-22T19:50:52.921Z" }, + { url = "https://files.pythonhosted.org/packages/df/99/65080c863eb06d4498de3d6c86f3e90595e02e159fd8529f1565f56cfe2c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05ba88adf3d7189a974b2de7a9d56731548d35dc0a822ec3dc669caa7019b29", size = 753141, upload-time = "2025-09-22T19:50:50.294Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e3/0de85f3e3333f8e29e4b10244374a202a87665d1131798946ee22cf05c7c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb04c5650de6668b853623eceadcdb1a9f2fee381f5d7b6bc842ee7c239eeec4", size = 703477, upload-time = "2025-09-22T19:50:51.508Z" }, + { url = "https://files.pythonhosted.org/packages/d9/25/0d2f09d8833c7fd77ab8efeff213093c16856479a9d293180a0d89f6bed9/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df3ec9959241d07bc261f4983d25a1205ff37703faf42b474f15d54d88b4f8c9", size = 741157, upload-time = "2025-09-23T18:42:50.408Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8c/959f10c2e2153cbdab834c46e6954b6dd9e3b109c8f8c0a3cf1618310985/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fbc08c02e9b147a11dfcaa1ac8a83168b699863493e183f7c0c8b12850b7d259", size = 745859, upload-time = "2025-09-22T19:50:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/ed/6b/e580a7c18b485e1a5f30a32cda96b20364b0ba649d9d2baaf72f8bd21f83/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c099cafc1834d3c5dac305865d04235f7c21c167c8dd31ebc3d6bbc357e2f023", size = 770200, upload-time = "2025-09-22T19:50:55.718Z" }, + { url = "https://files.pythonhosted.org/packages/ef/44/3455eebc761dc8e8fdced90f2b0a3fa61e32ba38b50de4130e2d57db0f21/ruamel.yaml.clib-0.2.14-cp312-cp312-win32.whl", hash = "sha256:b5b0f7e294700b615a3bcf6d28b26e6da94e8eba63b079f4ec92e9ba6c0d6b54", size = 98829, upload-time = "2025-09-22T19:50:58.895Z" }, + { url = "https://files.pythonhosted.org/packages/76/ab/5121f7f3b651db93de546f8c982c241397aad0a4765d793aca1dac5eadee/ruamel.yaml.clib-0.2.14-cp312-cp312-win_amd64.whl", hash = "sha256:a37f40a859b503304dd740686359fcf541d6fb3ff7fc10f539af7f7150917c68", size = 115570, upload-time = "2025-09-22T19:50:57.981Z" }, + { url = "https://files.pythonhosted.org/packages/5a/08/b4499234a420ef42960eeb05585df5cc7eb25ccb8c980490b079e6367050/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:1c1acc3a0209ea9042cc3cfc0790edd2eddd431a2ec3f8283d081e4d5018571e", size = 642558, upload-time = "2025-09-22T19:51:03.388Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ba/1975a27dedf1c4c33306ee67c948121be8710b19387aada29e2f139c43ee/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2070bf0ad1540d5c77a664de07ebcc45eebd1ddcab71a7a06f26936920692beb", size = 744087, upload-time = "2025-09-22T19:51:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/20/15/8a19a13d27f3bd09fa18813add8380a29115a47b553845f08802959acbce/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd8fe07f49c170e09d76773fb86ad9135e0beee44f36e1576a201b0676d3d1d", size = 699709, upload-time = "2025-09-22T19:51:02.075Z" }, + { url = "https://files.pythonhosted.org/packages/19/ee/8d6146a079ad21e534b5083c9ee4a4c8bec42f79cf87594b60978286b39a/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ff86876889ea478b1381089e55cf9e345707b312beda4986f823e1d95e8c0f59", size = 708926, upload-time = "2025-09-23T18:42:51.707Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/426b714abdc222392e68f3b8ad323930d05a214a27c7e7a0f06c69126401/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1f118b707eece8cf84ecbc3e3ec94d9db879d85ed608f95870d39b2d2efa5dca", size = 740202, upload-time = "2025-09-22T19:51:04.673Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ac/3c5c2b27a183f4fda8a57c82211721c016bcb689a4a175865f7646db9f94/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b30110b29484adc597df6bd92a37b90e63a8c152ca8136aad100a02f8ba6d1b6", size = 765196, upload-time = "2025-09-22T19:51:05.916Z" }, + { url = "https://files.pythonhosted.org/packages/92/2e/06f56a71fd55021c993ed6e848c9b2e5e9cfce180a42179f0ddd28253f7c/ruamel.yaml.clib-0.2.14-cp313-cp313-win32.whl", hash = "sha256:f4e97a1cf0b7a30af9e1d9dad10a5671157b9acee790d9e26996391f49b965a2", size = 98635, upload-time = "2025-09-22T19:51:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/51/79/76aba16a1689b50528224b182f71097ece338e7a4ab55e84c2e73443b78a/ruamel.yaml.clib-0.2.14-cp313-cp313-win_amd64.whl", hash = "sha256:090782b5fb9d98df96509eecdbcaffd037d47389a89492320280d52f91330d78", size = 115238, upload-time = "2025-09-22T19:51:07.081Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ec/4edbf17ac2c87fa0845dd366ef8d5852b96eb58fcd65fc1ecf5fe27b4641/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a0cb71ccc6ef9ce36eecb6272c81afdc2f565950cdcec33ae8e6cd8f7fc86f27", size = 739639, upload-time = "2025-09-22T19:51:10.566Z" }, + { url = "https://files.pythonhosted.org/packages/15/18/b0e1fafe59051de9e79cdd431863b03593ecfa8341c110affad7c8121efc/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7cb9ad1d525d40f7d87b6df7c0ff916a66bc52cb61b66ac1b2a16d0c1b07640", size = 764456, upload-time = "2025-09-22T19:51:11.736Z" }, ] [[package]] name = "ruff" -version = "0.12.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/45/2e403fa7007816b5fbb324cb4f8ed3c7402a927a0a0cb2b6279879a8bfdc/ruff-0.12.9.tar.gz", hash = "sha256:fbd94b2e3c623f659962934e52c2bea6fc6da11f667a427a368adaf3af2c866a", size = 5254702, upload-time = "2025-08-14T16:08:55.2Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/20/53bf098537adb7b6a97d98fcdebf6e916fcd11b2e21d15f8c171507909cc/ruff-0.12.9-py3-none-linux_armv6l.whl", hash = "sha256:fcebc6c79fcae3f220d05585229463621f5dbf24d79fdc4936d9302e177cfa3e", size = 11759705, upload-time = "2025-08-14T16:08:12.968Z" }, - { url = "https://files.pythonhosted.org/packages/20/4d/c764ee423002aac1ec66b9d541285dd29d2c0640a8086c87de59ebbe80d5/ruff-0.12.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aed9d15f8c5755c0e74467731a007fcad41f19bcce41cd75f768bbd687f8535f", size = 12527042, upload-time = "2025-08-14T16:08:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/8b/45/cfcdf6d3eb5fc78a5b419e7e616d6ccba0013dc5b180522920af2897e1be/ruff-0.12.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5b15ea354c6ff0d7423814ba6d44be2807644d0c05e9ed60caca87e963e93f70", size = 11724457, upload-time = "2025-08-14T16:08:18.686Z" }, - { url = "https://files.pythonhosted.org/packages/72/e6/44615c754b55662200c48bebb02196dbb14111b6e266ab071b7e7297b4ec/ruff-0.12.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d596c2d0393c2502eaabfef723bd74ca35348a8dac4267d18a94910087807c53", size = 11949446, upload-time = "2025-08-14T16:08:21.059Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d1/9b7d46625d617c7df520d40d5ac6cdcdf20cbccb88fad4b5ecd476a6bb8d/ruff-0.12.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b15599931a1a7a03c388b9c5df1bfa62be7ede6eb7ef753b272381f39c3d0ff", size = 11566350, upload-time = "2025-08-14T16:08:23.433Z" }, - { url = "https://files.pythonhosted.org/packages/59/20/b73132f66f2856bc29d2d263c6ca457f8476b0bbbe064dac3ac3337a270f/ruff-0.12.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d02faa2977fb6f3f32ddb7828e212b7dd499c59eb896ae6c03ea5c303575756", size = 13270430, upload-time = "2025-08-14T16:08:25.837Z" }, - { url = "https://files.pythonhosted.org/packages/a2/21/eaf3806f0a3d4c6be0a69d435646fba775b65f3f2097d54898b0fd4bb12e/ruff-0.12.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:17d5b6b0b3a25259b69ebcba87908496e6830e03acfb929ef9fd4c58675fa2ea", size = 14264717, upload-time = "2025-08-14T16:08:27.907Z" }, - { url = "https://files.pythonhosted.org/packages/d2/82/1d0c53bd37dcb582b2c521d352fbf4876b1e28bc0d8894344198f6c9950d/ruff-0.12.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72db7521860e246adbb43f6ef464dd2a532ef2ef1f5dd0d470455b8d9f1773e0", size = 13684331, upload-time = "2025-08-14T16:08:30.352Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2f/1c5cf6d8f656306d42a686f1e207f71d7cebdcbe7b2aa18e4e8a0cb74da3/ruff-0.12.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a03242c1522b4e0885af63320ad754d53983c9599157ee33e77d748363c561ce", size = 12739151, upload-time = "2025-08-14T16:08:32.55Z" }, - { url = "https://files.pythonhosted.org/packages/47/09/25033198bff89b24d734e6479e39b1968e4c992e82262d61cdccaf11afb9/ruff-0.12.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fc83e4e9751e6c13b5046d7162f205d0a7bac5840183c5beebf824b08a27340", size = 12954992, upload-time = "2025-08-14T16:08:34.816Z" }, - { url = "https://files.pythonhosted.org/packages/52/8e/d0dbf2f9dca66c2d7131feefc386523404014968cd6d22f057763935ab32/ruff-0.12.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:881465ed56ba4dd26a691954650de6ad389a2d1fdb130fe51ff18a25639fe4bb", size = 12899569, upload-time = "2025-08-14T16:08:36.852Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b614d7c08515b1428ed4d3f1d4e3d687deffb2479703b90237682586fa66/ruff-0.12.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:43f07a3ccfc62cdb4d3a3348bf0588358a66da756aa113e071b8ca8c3b9826af", size = 11751983, upload-time = "2025-08-14T16:08:39.314Z" }, - { url = "https://files.pythonhosted.org/packages/58/d6/383e9f818a2441b1a0ed898d7875f11273f10882f997388b2b51cb2ae8b5/ruff-0.12.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:07adb221c54b6bba24387911e5734357f042e5669fa5718920ee728aba3cbadc", size = 11538635, upload-time = "2025-08-14T16:08:41.297Z" }, - { url = "https://files.pythonhosted.org/packages/20/9c/56f869d314edaa9fc1f491706d1d8a47747b9d714130368fbd69ce9024e9/ruff-0.12.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f5cd34fabfdea3933ab85d72359f118035882a01bff15bd1d2b15261d85d5f66", size = 12534346, upload-time = "2025-08-14T16:08:43.39Z" }, - { url = "https://files.pythonhosted.org/packages/bd/4b/d8b95c6795a6c93b439bc913ee7a94fda42bb30a79285d47b80074003ee7/ruff-0.12.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f6be1d2ca0686c54564da8e7ee9e25f93bdd6868263805f8c0b8fc6a449db6d7", size = 13017021, upload-time = "2025-08-14T16:08:45.889Z" }, - { url = "https://files.pythonhosted.org/packages/c7/c1/5f9a839a697ce1acd7af44836f7c2181cdae5accd17a5cb85fcbd694075e/ruff-0.12.9-py3-none-win32.whl", hash = "sha256:cc7a37bd2509974379d0115cc5608a1a4a6c4bff1b452ea69db83c8855d53f93", size = 11734785, upload-time = "2025-08-14T16:08:48.062Z" }, - { url = "https://files.pythonhosted.org/packages/fa/66/cdddc2d1d9a9f677520b7cfc490d234336f523d4b429c1298de359a3be08/ruff-0.12.9-py3-none-win_amd64.whl", hash = "sha256:6fb15b1977309741d7d098c8a3cb7a30bc112760a00fb6efb7abc85f00ba5908", size = 12840654, upload-time = "2025-08-14T16:08:50.158Z" }, - { url = "https://files.pythonhosted.org/packages/ac/fd/669816bc6b5b93b9586f3c1d87cd6bc05028470b3ecfebb5938252c47a35/ruff-0.12.9-py3-none-win_arm64.whl", hash = "sha256:63c8c819739d86b96d500cce885956a1a48ab056bbcbc61b747ad494b2485089", size = 11949623, upload-time = "2025-08-14T16:08:52.233Z" }, +version = "0.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/8e/f9f9ca747fea8e3ac954e3690d4698c9737c23b51731d02df999c150b1c9/ruff-0.13.3.tar.gz", hash = "sha256:5b0ba0db740eefdfbcce4299f49e9eaefc643d4d007749d77d047c2bab19908e", size = 5438533, upload-time = "2025-10-02T19:29:31.582Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/33/8f7163553481466a92656d35dea9331095122bb84cf98210bef597dd2ecd/ruff-0.13.3-py3-none-linux_armv6l.whl", hash = "sha256:311860a4c5e19189c89d035638f500c1e191d283d0cc2f1600c8c80d6dcd430c", size = 12484040, upload-time = "2025-10-02T19:28:49.199Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b5/4a21a4922e5dd6845e91896b0d9ef493574cbe061ef7d00a73c61db531af/ruff-0.13.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2bdad6512fb666b40fcadb65e33add2b040fc18a24997d2e47fee7d66f7fcae2", size = 13122975, upload-time = "2025-10-02T19:28:52.446Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/15649af836d88c9f154e5be87e64ae7d2b1baa5a3ef317cb0c8fafcd882d/ruff-0.13.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fc6fa4637284708d6ed4e5e970d52fc3b76a557d7b4e85a53013d9d201d93286", size = 12346621, upload-time = "2025-10-02T19:28:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/bcbccb8141305f9a6d3f72549dd82d1134299177cc7eaf832599700f95a7/ruff-0.13.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c9e6469864f94a98f412f20ea143d547e4c652f45e44f369d7b74ee78185838", size = 12574408, upload-time = "2025-10-02T19:28:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/ce/19/0f3681c941cdcfa2d110ce4515624c07a964dc315d3100d889fcad3bfc9e/ruff-0.13.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5bf62b705f319476c78891e0e97e965b21db468b3c999086de8ffb0d40fd2822", size = 12285330, upload-time = "2025-10-02T19:28:58.79Z" }, + { url = "https://files.pythonhosted.org/packages/10/f8/387976bf00d126b907bbd7725219257feea58650e6b055b29b224d8cb731/ruff-0.13.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cc1abed87ce40cb07ee0667ce99dbc766c9f519eabfd948ed87295d8737c60", size = 13980815, upload-time = "2025-10-02T19:29:01.577Z" }, + { url = "https://files.pythonhosted.org/packages/0c/a6/7c8ec09d62d5a406e2b17d159e4817b63c945a8b9188a771193b7e1cc0b5/ruff-0.13.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4fb75e7c402d504f7a9a259e0442b96403fa4a7310ffe3588d11d7e170d2b1e3", size = 14987733, upload-time = "2025-10-02T19:29:04.036Z" }, + { url = "https://files.pythonhosted.org/packages/97/e5/f403a60a12258e0fd0c2195341cfa170726f254c788673495d86ab5a9a9d/ruff-0.13.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b951f9d9afb39330b2bdd2dd144ce1c1335881c277837ac1b50bfd99985ed3", size = 14439848, upload-time = "2025-10-02T19:29:06.684Z" }, + { url = "https://files.pythonhosted.org/packages/39/49/3de381343e89364c2334c9f3268b0349dc734fc18b2d99a302d0935c8345/ruff-0.13.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6052f8088728898e0a449f0dde8fafc7ed47e4d878168b211977e3e7e854f662", size = 13421890, upload-time = "2025-10-02T19:29:08.767Z" }, + { url = "https://files.pythonhosted.org/packages/ab/b5/c0feca27d45ae74185a6bacc399f5d8920ab82df2d732a17213fb86a2c4c/ruff-0.13.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc742c50f4ba72ce2a3be362bd359aef7d0d302bf7637a6f942eaa763bd292af", size = 13444870, upload-time = "2025-10-02T19:29:11.234Z" }, + { url = "https://files.pythonhosted.org/packages/50/a1/b655298a1f3fda4fdc7340c3f671a4b260b009068fbeb3e4e151e9e3e1bf/ruff-0.13.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8e5640349493b378431637019366bbd73c927e515c9c1babfea3e932f5e68e1d", size = 13691599, upload-time = "2025-10-02T19:29:13.353Z" }, + { url = "https://files.pythonhosted.org/packages/32/b0/a8705065b2dafae007bcae21354e6e2e832e03eb077bb6c8e523c2becb92/ruff-0.13.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b139f638a80eae7073c691a5dd8d581e0ba319540be97c343d60fb12949c8d0", size = 12421893, upload-time = "2025-10-02T19:29:15.668Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/cbe7082588d025cddbb2f23e6dfef08b1a2ef6d6f8328584ad3015b5cebd/ruff-0.13.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6b547def0a40054825de7cfa341039ebdfa51f3d4bfa6a0772940ed351d2746c", size = 12267220, upload-time = "2025-10-02T19:29:17.583Z" }, + { url = "https://files.pythonhosted.org/packages/a5/99/4086f9c43f85e0755996d09bdcb334b6fee9b1eabdf34e7d8b877fadf964/ruff-0.13.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9cc48a3564423915c93573f1981d57d101e617839bef38504f85f3677b3a0a3e", size = 13177818, upload-time = "2025-10-02T19:29:19.943Z" }, + { url = "https://files.pythonhosted.org/packages/9b/de/7b5db7e39947d9dc1c5f9f17b838ad6e680527d45288eeb568e860467010/ruff-0.13.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1a993b17ec03719c502881cb2d5f91771e8742f2ca6de740034433a97c561989", size = 13618715, upload-time = "2025-10-02T19:29:22.527Z" }, + { url = "https://files.pythonhosted.org/packages/28/d3/bb25ee567ce2f61ac52430cf99f446b0e6d49bdfa4188699ad005fdd16aa/ruff-0.13.3-py3-none-win32.whl", hash = "sha256:f14e0d1fe6460f07814d03c6e32e815bff411505178a1f539a38f6097d3e8ee3", size = 12334488, upload-time = "2025-10-02T19:29:24.782Z" }, + { url = "https://files.pythonhosted.org/packages/cf/49/12f5955818a1139eed288753479ba9d996f6ea0b101784bb1fe6977ec128/ruff-0.13.3-py3-none-win_amd64.whl", hash = "sha256:621e2e5812b691d4f244638d693e640f188bacbb9bc793ddd46837cea0503dd2", size = 13455262, upload-time = "2025-10-02T19:29:26.882Z" }, + { url = "https://files.pythonhosted.org/packages/fe/72/7b83242b26627a00e3af70d0394d68f8f02750d642567af12983031777fc/ruff-0.13.3-py3-none-win_arm64.whl", hash = "sha256:9e9e9d699841eaf4c2c798fa783df2fabc680b72059a02ca0ed81c460bc58330", size = 12538484, upload-time = "2025-10-02T19:29:28.951Z" }, ] [[package]] @@ -3899,71 +4245,36 @@ wheels = [ [[package]] name = "scikit-learn" -version = "1.6.1" +version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "threadpoolctl", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/a5/4ae3b3a0755f7b35a280ac90b28817d1f380318973cff14075ab41ef50d9/scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e", size = 7068312, upload-time = "2025-01-10T08:07:55.348Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/95/d5cb2297a835b0f5fc9a77042b0a2d029866379091ab8b3f52cc62277808/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5", size = 12643991, upload-time = "2025-01-10T08:06:04.813Z" }, - { url = "https://files.pythonhosted.org/packages/b7/91/ab3c697188f224d658969f678be86b0968ccc52774c8ab4a86a07be13c25/scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b", size = 13497182, upload-time = "2025-01-10T08:06:08.42Z" }, - { url = "https://files.pythonhosted.org/packages/17/04/d5d556b6c88886c092cc989433b2bab62488e0f0dafe616a1d5c9cb0efb1/scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002", size = 11125517, upload-time = "2025-01-10T08:06:12.783Z" }, - { url = "https://files.pythonhosted.org/packages/30/cd/ed4399485ef364bb25f388ab438e3724e60dc218c547a407b6e90ccccaef/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2", size = 12592155, upload-time = "2025-01-10T08:06:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f3/62fc9a5a659bb58a03cdd7e258956a5824bdc9b4bb3c5d932f55880be569/scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8", size = 13497069, upload-time = "2025-01-10T08:06:32.515Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/c5b78606743a1f28eae8f11973de6613a5ee87366796583fb74c67d54939/scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415", size = 11139809, upload-time = "2025-01-10T08:06:35.514Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f6/ff7beaeb644bcad72bcfd5a03ff36d32ee4e53a8b29a639f11bcb65d06cd/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f", size = 12253728, upload-time = "2025-01-10T08:06:47.618Z" }, - { url = "https://files.pythonhosted.org/packages/29/7a/8bce8968883e9465de20be15542f4c7e221952441727c4dad24d534c6d99/scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86", size = 13147700, upload-time = "2025-01-10T08:06:50.888Z" }, - { url = "https://files.pythonhosted.org/packages/62/27/585859e72e117fe861c2079bcba35591a84f801e21bc1ab85bce6ce60305/scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52", size = 11110613, upload-time = "2025-01-10T08:06:54.115Z" }, - { url = "https://files.pythonhosted.org/packages/c8/e4/4195d52cf4f113573fb8ebc44ed5a81bd511a92c0228889125fac2f4c3d1/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348", size = 12209004, upload-time = "2025-01-10T08:07:06.931Z" }, - { url = "https://files.pythonhosted.org/packages/94/be/47e16cdd1e7fcf97d95b3cb08bde1abb13e627861af427a3651fcb80b517/scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97", size = 13171776, upload-time = "2025-01-10T08:07:11.715Z" }, - { url = "https://files.pythonhosted.org/packages/34/b0/ca92b90859070a1487827dbc672f998da95ce83edce1270fc23f96f1f61a/scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb", size = 11071865, upload-time = "2025-01-10T08:07:16.088Z" }, - { url = "https://files.pythonhosted.org/packages/3f/58/55856da1adec655bdce77b502e94a267bf40a8c0b89f8622837f89503b5a/scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691", size = 12433852, upload-time = "2025-01-10T08:07:26.817Z" }, - { url = "https://files.pythonhosted.org/packages/ff/4f/c83853af13901a574f8f13b645467285a48940f185b690936bb700a50863/scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f", size = 11337256, upload-time = "2025-01-10T08:07:31.084Z" }, - { url = "https://files.pythonhosted.org/packages/fd/dc/d5457e03dc9c971ce2b0d750e33148dd060fefb8b7dc71acd6054e4bb51b/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107", size = 12693173, upload-time = "2025-01-10T08:07:42.713Z" }, - { url = "https://files.pythonhosted.org/packages/79/35/b1d2188967c3204c78fa79c9263668cf1b98060e8e58d1a730fe5b2317bb/scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422", size = 13518605, upload-time = "2025-01-10T08:07:46.551Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d8/8d603bdd26601f4b07e2363032b8565ab82eb857f93d86d0f7956fcf4523/scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b", size = 11155078, upload-time = "2025-01-10T08:07:51.376Z" }, -] - -[[package]] -name = "scipy" -version = "1.13.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720, upload-time = "2024-05-23T03:29:26.079Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076, upload-time = "2024-05-23T03:19:01.687Z" }, - { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232, upload-time = "2024-05-23T03:19:09.089Z" }, - { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202, upload-time = "2024-05-23T03:19:15.138Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335, upload-time = "2024-05-23T03:19:21.984Z" }, - { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728, upload-time = "2024-05-23T03:19:28.225Z" }, - { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588, upload-time = "2024-05-23T03:19:35.661Z" }, - { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805, upload-time = "2024-05-23T03:19:43.081Z" }, - { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687, upload-time = "2024-05-23T03:19:48.799Z" }, - { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638, upload-time = "2024-05-23T03:19:55.104Z" }, - { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931, upload-time = "2024-05-23T03:20:01.82Z" }, - { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145, upload-time = "2024-05-23T03:20:09.173Z" }, - { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227, upload-time = "2024-05-23T03:20:16.433Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301, upload-time = "2024-05-23T03:20:23.538Z" }, - { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348, upload-time = "2024-05-23T03:20:29.885Z" }, - { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062, upload-time = "2024-05-23T03:20:36.012Z" }, - { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311, upload-time = "2024-05-23T03:20:42.086Z" }, - { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493, upload-time = "2024-05-23T03:20:48.292Z" }, - { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955, upload-time = "2024-05-23T03:20:55.091Z" }, - { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927, upload-time = "2024-05-23T03:21:01.95Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538, upload-time = "2024-05-23T03:21:07.634Z" }, - { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190, upload-time = "2024-05-23T03:21:14.41Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244, upload-time = "2024-05-23T03:21:21.827Z" }, - { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637, upload-time = "2024-05-23T03:21:28.729Z" }, - { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440, upload-time = "2024-05-23T03:21:35.888Z" }, + { name = "joblib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938, upload-time = "2025-09-09T08:20:24.327Z" }, + { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818, upload-time = "2025-09-09T08:20:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969, upload-time = "2025-09-09T08:20:29.329Z" }, + { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424, upload-time = "2025-09-09T08:20:36.776Z" }, + { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234, upload-time = "2025-09-09T08:20:38.957Z" }, + { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244, upload-time = "2025-09-09T08:20:41.166Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381, upload-time = "2025-09-09T08:20:47.982Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296, upload-time = "2025-09-09T08:20:50.366Z" }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256, upload-time = "2025-09-09T08:20:52.627Z" }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180, upload-time = "2025-09-09T08:20:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660, upload-time = "2025-09-09T08:21:01.71Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057, upload-time = "2025-09-09T08:21:04.234Z" }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094, upload-time = "2025-09-09T08:21:11.486Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436, upload-time = "2025-09-09T08:21:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749, upload-time = "2025-09-09T08:21:15.96Z" }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236, upload-time = "2025-09-09T08:21:22.645Z" }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593, upload-time = "2025-09-09T08:21:24.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007, upload-time = "2025-09-09T08:21:26.713Z" }, ] [[package]] @@ -3971,10 +4282,10 @@ name = "scipy" version = "1.15.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*'", + "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } wheels = [ @@ -4027,71 +4338,79 @@ wheels = [ [[package]] name = "scipy" -version = "1.16.1" +version = "1.16.2" 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 = "numpy", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/4a/b927028464795439faec8eaf0b03b011005c487bb2d07409f28bf30879c4/scipy-1.16.1.tar.gz", hash = "sha256:44c76f9e8b6e8e488a586190ab38016e4ed2f8a038af7cd3defa903c0a2238b3", size = 30580861, upload-time = "2025-07-27T16:33:30.834Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/da/91/812adc6f74409b461e3a5fa97f4f74c769016919203138a3bf6fc24ba4c5/scipy-1.16.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c033fa32bab91dc98ca59d0cf23bb876454e2bb02cbe592d5023138778f70030", size = 36552519, upload-time = "2025-07-27T16:26:29.658Z" }, - { url = "https://files.pythonhosted.org/packages/47/18/8e355edcf3b71418d9e9f9acd2708cc3a6c27e8f98fde0ac34b8a0b45407/scipy-1.16.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:6e5c2f74e5df33479b5cd4e97a9104c511518fbd979aa9b8f6aec18b2e9ecae7", size = 28638010, upload-time = "2025-07-27T16:26:38.196Z" }, - { url = "https://files.pythonhosted.org/packages/d9/eb/e931853058607bdfbc11b86df19ae7a08686121c203483f62f1ecae5989c/scipy-1.16.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0a55ffe0ba0f59666e90951971a884d1ff6f4ec3275a48f472cfb64175570f77", size = 20909790, upload-time = "2025-07-27T16:26:43.93Z" }, - { url = "https://files.pythonhosted.org/packages/45/0c/be83a271d6e96750cd0be2e000f35ff18880a46f05ce8b5d3465dc0f7a2a/scipy-1.16.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f8a5d6cd147acecc2603fbd382fed6c46f474cccfcf69ea32582e033fb54dcfe", size = 23513352, upload-time = "2025-07-27T16:26:50.017Z" }, - { url = "https://files.pythonhosted.org/packages/7c/bf/fe6eb47e74f762f933cca962db7f2c7183acfdc4483bd1c3813cfe83e538/scipy-1.16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb18899127278058bcc09e7b9966d41a5a43740b5bb8dcba401bd983f82e885b", size = 33534643, upload-time = "2025-07-27T16:26:57.503Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ba/63f402e74875486b87ec6506a4f93f6d8a0d94d10467280f3d9d7837ce3a/scipy-1.16.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adccd93a2fa937a27aae826d33e3bfa5edf9aa672376a4852d23a7cd67a2e5b7", size = 35376776, upload-time = "2025-07-27T16:27:06.639Z" }, - { url = "https://files.pythonhosted.org/packages/c3/b4/04eb9d39ec26a1b939689102da23d505ea16cdae3dbb18ffc53d1f831044/scipy-1.16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:18aca1646a29ee9a0625a1be5637fa798d4d81fdf426481f06d69af828f16958", size = 35698906, upload-time = "2025-07-27T16:27:14.943Z" }, - { url = "https://files.pythonhosted.org/packages/04/d6/bb5468da53321baeb001f6e4e0d9049eadd175a4a497709939128556e3ec/scipy-1.16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d85495cef541729a70cdddbbf3e6b903421bc1af3e8e3a9a72a06751f33b7c39", size = 38129275, upload-time = "2025-07-27T16:27:23.873Z" }, - { url = "https://files.pythonhosted.org/packages/c4/94/994369978509f227cba7dfb9e623254d0d5559506fe994aef4bea3ed469c/scipy-1.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:226652fca853008119c03a8ce71ffe1b3f6d2844cc1686e8f9806edafae68596", size = 38644572, upload-time = "2025-07-27T16:27:32.637Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d9/ec4864f5896232133f51382b54a08de91a9d1af7a76dfa372894026dfee2/scipy-1.16.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81b433bbeaf35728dad619afc002db9b189e45eebe2cd676effe1fb93fef2b9c", size = 36575194, upload-time = "2025-07-27T16:27:41.321Z" }, - { url = "https://files.pythonhosted.org/packages/5c/6d/40e81ecfb688e9d25d34a847dca361982a6addf8e31f0957b1a54fbfa994/scipy-1.16.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:886cc81fdb4c6903a3bb0464047c25a6d1016fef77bb97949817d0c0d79f9e04", size = 28594590, upload-time = "2025-07-27T16:27:49.204Z" }, - { url = "https://files.pythonhosted.org/packages/0e/37/9f65178edfcc629377ce9a64fc09baebea18c80a9e57ae09a52edf84880b/scipy-1.16.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:15240c3aac087a522b4eaedb09f0ad061753c5eebf1ea430859e5bf8640d5919", size = 20866458, upload-time = "2025-07-27T16:27:54.98Z" }, - { url = "https://files.pythonhosted.org/packages/2c/7b/749a66766871ea4cb1d1ea10f27004db63023074c22abed51f22f09770e0/scipy-1.16.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f81a25805f3659b48126b5053d9e823d3215e4a63730b5e1671852a1705921", size = 23539318, upload-time = "2025-07-27T16:28:01.604Z" }, - { url = "https://files.pythonhosted.org/packages/c4/db/8d4afec60eb833a666434d4541a3151eedbf2494ea6d4d468cbe877f00cd/scipy-1.16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6c62eea7f607f122069b9bad3f99489ddca1a5173bef8a0c75555d7488b6f725", size = 33292899, upload-time = "2025-07-27T16:28:09.147Z" }, - { url = "https://files.pythonhosted.org/packages/51/1e/79023ca3bbb13a015d7d2757ecca3b81293c663694c35d6541b4dca53e98/scipy-1.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f965bbf3235b01c776115ab18f092a95aa74c271a52577bcb0563e85738fd618", size = 35162637, upload-time = "2025-07-27T16:28:17.535Z" }, - { url = "https://files.pythonhosted.org/packages/b6/49/0648665f9c29fdaca4c679182eb972935b3b4f5ace41d323c32352f29816/scipy-1.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f006e323874ffd0b0b816d8c6a8e7f9a73d55ab3b8c3f72b752b226d0e3ac83d", size = 35490507, upload-time = "2025-07-27T16:28:25.705Z" }, - { url = "https://files.pythonhosted.org/packages/62/8f/66cbb9d6bbb18d8c658f774904f42a92078707a7c71e5347e8bf2f52bb89/scipy-1.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8fd15fc5085ab4cca74cb91fe0a4263b1f32e4420761ddae531ad60934c2119", size = 37923998, upload-time = "2025-07-27T16:28:34.339Z" }, - { url = "https://files.pythonhosted.org/packages/14/c3/61f273ae550fbf1667675701112e380881905e28448c080b23b5a181df7c/scipy-1.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7b8013c6c066609577d910d1a2a077021727af07b6fab0ee22c2f901f22352a", size = 38508060, upload-time = "2025-07-27T16:28:43.242Z" }, - { url = "https://files.pythonhosted.org/packages/93/0b/b5c99382b839854a71ca9482c684e3472badc62620287cbbdab499b75ce6/scipy-1.16.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5451606823a5e73dfa621a89948096c6528e2896e40b39248295d3a0138d594f", size = 36533717, upload-time = "2025-07-27T16:28:51.706Z" }, - { url = "https://files.pythonhosted.org/packages/eb/e5/69ab2771062c91e23e07c12e7d5033a6b9b80b0903ee709c3c36b3eb520c/scipy-1.16.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:89728678c5ca5abd610aee148c199ac1afb16e19844401ca97d43dc548a354eb", size = 28570009, upload-time = "2025-07-27T16:28:57.017Z" }, - { url = "https://files.pythonhosted.org/packages/f4/69/bd75dbfdd3cf524f4d753484d723594aed62cfaac510123e91a6686d520b/scipy-1.16.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e756d688cb03fd07de0fffad475649b03cb89bee696c98ce508b17c11a03f95c", size = 20841942, upload-time = "2025-07-27T16:29:01.152Z" }, - { url = "https://files.pythonhosted.org/packages/ea/74/add181c87663f178ba7d6144b370243a87af8476664d5435e57d599e6874/scipy-1.16.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5aa2687b9935da3ed89c5dbed5234576589dd28d0bf7cd237501ccfbdf1ad608", size = 23498507, upload-time = "2025-07-27T16:29:05.202Z" }, - { url = "https://files.pythonhosted.org/packages/1d/74/ece2e582a0d9550cee33e2e416cc96737dce423a994d12bbe59716f47ff1/scipy-1.16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0851f6a1e537fe9399f35986897e395a1aa61c574b178c0d456be5b1a0f5ca1f", size = 33286040, upload-time = "2025-07-27T16:29:10.201Z" }, - { url = "https://files.pythonhosted.org/packages/e4/82/08e4076df538fb56caa1d489588d880ec7c52d8273a606bb54d660528f7c/scipy-1.16.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fedc2cbd1baed37474b1924c331b97bdff611d762c196fac1a9b71e67b813b1b", size = 35176096, upload-time = "2025-07-27T16:29:17.091Z" }, - { url = "https://files.pythonhosted.org/packages/fa/79/cd710aab8c921375711a8321c6be696e705a120e3011a643efbbcdeeabcc/scipy-1.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2ef500e72f9623a6735769e4b93e9dcb158d40752cdbb077f305487e3e2d1f45", size = 35490328, upload-time = "2025-07-27T16:29:22.928Z" }, - { url = "https://files.pythonhosted.org/packages/71/73/e9cc3d35ee4526d784520d4494a3e1ca969b071fb5ae5910c036a375ceec/scipy-1.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:978d8311674b05a8f7ff2ea6c6bce5d8b45a0cb09d4c5793e0318f448613ea65", size = 37939921, upload-time = "2025-07-27T16:29:29.108Z" }, - { url = "https://files.pythonhosted.org/packages/21/12/c0efd2941f01940119b5305c375ae5c0fcb7ec193f806bd8f158b73a1782/scipy-1.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:81929ed0fa7a5713fcdd8b2e6f73697d3b4c4816d090dd34ff937c20fa90e8ab", size = 38479462, upload-time = "2025-07-27T16:30:24.078Z" }, - { url = "https://files.pythonhosted.org/packages/7a/19/c3d08b675260046a991040e1ea5d65f91f40c7df1045fffff412dcfc6765/scipy-1.16.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:bcc12db731858abda693cecdb3bdc9e6d4bd200213f49d224fe22df82687bdd6", size = 36938832, upload-time = "2025-07-27T16:29:35.057Z" }, - { url = "https://files.pythonhosted.org/packages/81/f2/ce53db652c033a414a5b34598dba6b95f3d38153a2417c5a3883da429029/scipy-1.16.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:744d977daa4becb9fc59135e75c069f8d301a87d64f88f1e602a9ecf51e77b27", size = 29093084, upload-time = "2025-07-27T16:29:40.201Z" }, - { url = "https://files.pythonhosted.org/packages/a9/ae/7a10ff04a7dc15f9057d05b33737ade244e4bd195caa3f7cc04d77b9e214/scipy-1.16.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:dc54f76ac18073bcecffb98d93f03ed6b81a92ef91b5d3b135dcc81d55a724c7", size = 21365098, upload-time = "2025-07-27T16:29:44.295Z" }, - { url = "https://files.pythonhosted.org/packages/36/ac/029ff710959932ad3c2a98721b20b405f05f752f07344622fd61a47c5197/scipy-1.16.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:367d567ee9fc1e9e2047d31f39d9d6a7a04e0710c86e701e053f237d14a9b4f6", size = 23896858, upload-time = "2025-07-27T16:29:48.784Z" }, - { url = "https://files.pythonhosted.org/packages/71/13/d1ef77b6bd7898720e1f0b6b3743cb945f6c3cafa7718eaac8841035ab60/scipy-1.16.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf5785e44e19dcd32a0e4807555e1e9a9b8d475c6afff3d21c3c543a6aa84f4", size = 33438311, upload-time = "2025-07-27T16:29:54.164Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e0/e64a6821ffbb00b4c5b05169f1c1fddb4800e9307efe3db3788995a82a2c/scipy-1.16.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3d0b80fb26d3e13a794c71d4b837e2a589d839fd574a6bbb4ee1288c213ad4a3", size = 35279542, upload-time = "2025-07-27T16:30:00.249Z" }, - { url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload-time = "2025-07-27T16:30:05.916Z" }, - { url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload-time = "2025-07-27T16:30:11.655Z" }, - { url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload-time = "2025-07-27T16:30:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload-time = "2025-07-27T16:30:30.081Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload-time = "2025-07-27T16:30:35.336Z" }, - { url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload-time = "2025-07-27T16:30:39.421Z" }, - { url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload-time = "2025-07-27T16:30:43.663Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload-time = "2025-07-27T16:30:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload-time = "2025-07-27T16:30:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload-time = "2025-07-27T16:30:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload-time = "2025-07-27T16:31:06.151Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload-time = "2025-07-27T16:31:59.942Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload-time = "2025-07-27T16:31:11.865Z" }, - { url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload-time = "2025-07-27T16:31:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload-time = "2025-07-27T16:31:21.188Z" }, - { url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload-time = "2025-07-27T16:31:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload-time = "2025-07-27T16:31:30.62Z" }, - { url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload-time = "2025-07-27T16:31:36.112Z" }, - { url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload-time = "2025-07-27T16:31:42.025Z" }, - { url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload-time = "2025-07-27T16:31:48.109Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload-time = "2025-07-27T16:31:53.96Z" }, + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599, upload-time = "2025-09-11T17:48:08.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/ef/37ed4b213d64b48422df92560af7300e10fe30b5d665dd79932baebee0c6/scipy-1.16.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ab88ea43a57da1af33292ebd04b417e8e2eaf9d5aa05700be8d6e1b6501cd92", size = 36619956, upload-time = "2025-09-11T17:39:20.5Z" }, + { url = "https://files.pythonhosted.org/packages/85/ab/5c2eba89b9416961a982346a4d6a647d78c91ec96ab94ed522b3b6baf444/scipy-1.16.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c95e96c7305c96ede73a7389f46ccd6c659c4da5ef1b2789466baeaed3622b6e", size = 28931117, upload-time = "2025-09-11T17:39:29.06Z" }, + { url = "https://files.pythonhosted.org/packages/80/d1/eed51ab64d227fe60229a2d57fb60ca5898cfa50ba27d4f573e9e5f0b430/scipy-1.16.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:87eb178db04ece7c698220d523c170125dbffebb7af0345e66c3554f6f60c173", size = 20921997, upload-time = "2025-09-11T17:39:34.892Z" }, + { url = "https://files.pythonhosted.org/packages/be/7c/33ea3e23bbadde96726edba6bf9111fb1969d14d9d477ffa202c67bec9da/scipy-1.16.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:4e409eac067dcee96a57fbcf424c13f428037827ec7ee3cb671ff525ca4fc34d", size = 23523374, upload-time = "2025-09-11T17:39:40.846Z" }, + { url = "https://files.pythonhosted.org/packages/96/0b/7399dc96e1e3f9a05e258c98d716196a34f528eef2ec55aad651ed136d03/scipy-1.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e574be127bb760f0dad24ff6e217c80213d153058372362ccb9555a10fc5e8d2", size = 33583702, upload-time = "2025-09-11T17:39:49.011Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bc/a5c75095089b96ea72c1bd37a4497c24b581ec73db4ef58ebee142ad2d14/scipy-1.16.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5db5ba6188d698ba7abab982ad6973265b74bb40a1efe1821b58c87f73892b9", size = 35883427, upload-time = "2025-09-11T17:39:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/ab/66/e25705ca3d2b87b97fe0a278a24b7f477b4023a926847935a1a71488a6a6/scipy-1.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec6e74c4e884104ae006d34110677bfe0098203a3fec2f3faf349f4cb05165e3", size = 36212940, upload-time = "2025-09-11T17:40:06.013Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fd/0bb911585e12f3abdd603d721d83fc1c7492835e1401a0e6d498d7822b4b/scipy-1.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:912f46667d2d3834bc3d57361f854226475f695eb08c08a904aadb1c936b6a88", size = 38865092, upload-time = "2025-09-11T17:40:15.143Z" }, + { url = "https://files.pythonhosted.org/packages/d6/73/c449a7d56ba6e6f874183759f8483cde21f900a8be117d67ffbb670c2958/scipy-1.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:91e9e8a37befa5a69e9cacbe0bcb79ae5afb4a0b130fd6db6ee6cc0d491695fa", size = 38687626, upload-time = "2025-09-11T17:40:24.041Z" }, + { url = "https://files.pythonhosted.org/packages/68/72/02f37316adf95307f5d9e579023c6899f89ff3a051fa079dbd6faafc48e5/scipy-1.16.2-cp311-cp311-win_arm64.whl", hash = "sha256:f3bf75a6dcecab62afde4d1f973f1692be013110cad5338007927db8da73249c", size = 25503506, upload-time = "2025-09-11T17:40:30.703Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259, upload-time = "2025-09-11T17:40:39.329Z" }, + { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976, upload-time = "2025-09-11T17:40:46.82Z" }, + { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905, upload-time = "2025-09-11T17:40:52.545Z" }, + { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066, upload-time = "2025-09-11T17:40:59.014Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407, upload-time = "2025-09-11T17:41:06.796Z" }, + { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281, upload-time = "2025-09-11T17:41:15.055Z" }, + { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222, upload-time = "2025-09-11T17:41:23.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586, upload-time = "2025-09-11T17:41:31.021Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641, upload-time = "2025-09-11T17:41:36.61Z" }, + { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070, upload-time = "2025-09-11T17:41:41.3Z" }, + { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856, upload-time = "2025-09-11T17:41:47.695Z" }, + { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626, upload-time = "2025-09-11T17:41:52.642Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689, upload-time = "2025-09-11T17:41:57.886Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151, upload-time = "2025-09-11T17:42:02.303Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824, upload-time = "2025-09-11T17:42:07.549Z" }, + { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881, upload-time = "2025-09-11T17:42:13.255Z" }, + { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219, upload-time = "2025-09-11T17:42:18.765Z" }, + { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147, upload-time = "2025-09-11T17:42:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766, upload-time = "2025-09-11T17:43:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169, upload-time = "2025-09-11T17:43:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682, upload-time = "2025-09-11T17:42:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926, upload-time = "2025-09-11T17:42:35.845Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152, upload-time = "2025-09-11T17:42:40.07Z" }, + { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410, upload-time = "2025-09-11T17:42:44.313Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880, upload-time = "2025-09-11T17:42:49.325Z" }, + { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425, upload-time = "2025-09-11T17:42:54.711Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622, upload-time = "2025-09-11T17:43:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985, upload-time = "2025-09-11T17:43:06.661Z" }, + { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367, upload-time = "2025-09-11T17:43:14.44Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992, upload-time = "2025-09-11T17:43:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109, upload-time = "2025-09-11T17:43:35.713Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110, upload-time = "2025-09-11T17:43:40.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110, upload-time = "2025-09-11T17:43:44.981Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014, upload-time = "2025-09-11T17:43:49.074Z" }, + { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155, upload-time = "2025-09-11T17:43:54.661Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174, upload-time = "2025-09-11T17:44:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752, upload-time = "2025-09-11T17:44:05.619Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010, upload-time = "2025-09-11T17:44:11.322Z" }, + { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061, upload-time = "2025-09-11T17:45:09.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914, upload-time = "2025-09-11T17:45:14.73Z" }, + { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193, upload-time = "2025-09-11T17:44:16.757Z" }, + { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172, upload-time = "2025-09-11T17:44:21.783Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326, upload-time = "2025-09-11T17:44:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036, upload-time = "2025-09-11T17:44:30.527Z" }, + { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341, upload-time = "2025-09-11T17:44:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840, upload-time = "2025-09-11T17:44:41.76Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716, upload-time = "2025-09-11T17:44:47.316Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088, upload-time = "2025-09-11T17:44:53.011Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455, upload-time = "2025-09-11T17:44:58.899Z" }, + { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374, upload-time = "2025-09-11T17:45:03.45Z" }, ] [[package]] @@ -4140,16 +4459,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/57/cb/7dc739a484b1a17ccf92a23dfe558ae615c232bd81e78a72049c25d1ff66/selectolax-0.3.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:484274f73839f9a143f4c13ce1b0a0123b5d64be22f967a1dc202a9a78687d67", size = 5727944, upload-time = "2025-04-30T15:16:49.52Z" }, { url = "https://files.pythonhosted.org/packages/b7/09/95da4d2919d99a6090327390b84bc5440133196351e5e04c24cccda06cbb/selectolax-0.3.29-cp313-cp313-win32.whl", hash = "sha256:29e71fbd58b90d2920ef91a940680cb5331710fe397925ce9d10c3f2f086bf27", size = 1697529, upload-time = "2025-04-30T15:16:51.123Z" }, { url = "https://files.pythonhosted.org/packages/0e/17/5a3951da22a4ad8f959088ddc370c68b28dad03190d91fcd137a52410fb9/selectolax-0.3.29-cp313-cp313-win_amd64.whl", hash = "sha256:e13befacff5f78102aa11465055ecb6d4b35f89663e36f271f2b506bcab14112", size = 1803334, upload-time = "2025-04-30T15:16:53.775Z" }, - { url = "https://files.pythonhosted.org/packages/fb/2c/ba1fd5acf52928ebe998c05681619f11a128d8e6765d469c97149cea1f93/selectolax-0.3.29-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9858fef96e4e332fa64102f0ab1ecf8f88a9ea46a82d379fb421c8f736b60090", size = 3643918, upload-time = "2025-04-30T15:17:15.875Z" }, - { url = "https://files.pythonhosted.org/packages/e7/cb/bec139ba6be1ee59951d02f0bd639d4f3c54976d690a2bd7da82cf2430c1/selectolax-0.3.29-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c198a1d3693aeccf1c45871bf3fee4bd46428fa99cdb9f3dfee20e1b48c363c7", size = 2089312, upload-time = "2025-04-30T15:17:17.544Z" }, - { url = "https://files.pythonhosted.org/packages/22/64/86ae8f9543ee34f5ffbd3b12a9d760e42ad33c81387cbf17bad3cbb7bc16/selectolax-0.3.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6b569fa67a122bfd7f0776c1c922daf122fb4502c8116a903c6168742b84db9", size = 5505835, upload-time = "2025-04-30T15:17:19.714Z" }, - { url = "https://files.pythonhosted.org/packages/48/98/f5b121d8852fe749a58ca65c94a7d2ccf8959b179c03463a8395c6482d8b/selectolax-0.3.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1676cd243812ca6ddd79ad53997996535e27db17fda3d440b470bb322f5959", size = 5529671, upload-time = "2025-04-30T15:17:22.164Z" }, - { url = "https://files.pythonhosted.org/packages/ae/d5/bda3433bca372dfa0fac1db2bb312695b5b628635988153a84815fe6c5d5/selectolax-0.3.29-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24f3f5de4051ca33ea769c8a99798c7e30e6500e090e363d5fcd3382b1ae8dfa", size = 5146745, upload-time = "2025-04-30T15:17:23.923Z" }, - { url = "https://files.pythonhosted.org/packages/8a/92/c18af1224dd9adfffe41182914090f1e18aeb2375717e7834e5416304065/selectolax-0.3.29-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:50b18a262ea01ca5522f9a30c28ecadb004be88296f6bd2ace21464f89a3cbcc", size = 5406891, upload-time = "2025-04-30T15:17:25.997Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8c/a40988c1098ab06c16b1a7f725f54b5c4e1a5167547541e88cb57109cbbc/selectolax-0.3.29-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d458db7fee5f6b1ce75664ce8a009343c0aac1993a7b844a997cfea3ad0ea77b", size = 5139978, upload-time = "2025-04-30T15:17:28.503Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fd/a407a5b63f64351a2fff212f95e0be219355bfe758cd7d6a36d59266d4ad/selectolax-0.3.29-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6c684d66a0f8e48786ef6d79b9e1e84cb1ffd0835232b4033bed37cf978d1303", size = 5477920, upload-time = "2025-04-30T15:17:30.322Z" }, - { url = "https://files.pythonhosted.org/packages/c1/a9/41c785f21e63eba278881fb7c84897d158581a753a8f6e069747db246b6b/selectolax-0.3.29-cp39-cp39-win32.whl", hash = "sha256:aecf29641a4b092331d081fb59f12f6b3fd236c16b48ef6e86419454df787ae1", size = 1702276, upload-time = "2025-04-30T15:17:32.629Z" }, - { url = "https://files.pythonhosted.org/packages/5d/b7/70c880f722ec02b172c1c37e22bc37c0aeac6f50a7238932b89701514b47/selectolax-0.3.29-cp39-cp39-win_amd64.whl", hash = "sha256:565304311e45c582e85ec525b0646aede6f8db1f22bc08786e94f7b6552d4311", size = 1808204, upload-time = "2025-04-30T15:17:34.392Z" }, ] [[package]] @@ -4193,7 +4502,7 @@ name = "sortedcollections" version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sortedcontainers", marker = "python_full_version < '3.10'" }, + { name = "sortedcontainers" }, ] sdist = { url = "https://files.pythonhosted.org/packages/01/00/6d749cc1f88e7f95f5442a8abb195fa607094deba9e0475affbfb7fa8c04/sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd", size = 9287, upload-time = "2021-01-18T22:15:16.623Z" } wheels = [ @@ -4211,24 +4520,25 @@ wheels = [ [[package]] name = "soupsieve" -version = "2.7" +version = "2.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" }, ] [[package]] name = "spirack" -version = "0.2.7" +version = "0.2.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "pyserial", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyserial" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ba/f6/50b27f7abf76b282d22748ac3a503f30a78d33f9b0d091a680682079bc9b/spirack-0.2.7.tar.gz", hash = "sha256:2ba7f81ae3ab5b568027499360a178c4d762a20771717c76e06d5c1d3eed2f49", size = 48970, upload-time = "2025-08-05T07:20:40.744Z" } +sdist = { url = "https://files.pythonhosted.org/packages/90/7f/1e07521afeaf25ad4d792789ea271e8221fb2010ceb403ea71c15987af84/spirack-0.2.8.tar.gz", hash = "sha256:ff1de8fe9e7658f59fcc8befed05ffc64710fc53e02150f79af67a86d8c948fd", size = 48936, upload-time = "2025-09-11T12:47:41.551Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/42/0bfeafc3a2d6c1b1e79cc3e8ca63948179a5ae803286493198b9288c4b1d/spirack-0.2.7-py3-none-any.whl", hash = "sha256:009eda5211bb8c913d4b6465dbcd1a99b53e992a1352cd90782084740b21aab6", size = 59506, upload-time = "2025-08-05T07:20:39.844Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2c/2b723da6e3420320b9c9a88437ce9d68db21d0ed512c5591bafb1cc15291/spirack-0.2.8-py3-none-any.whl", hash = "sha256:5dd53ed32789338dcf060b35c21e03774f6d47438e39564e09469ba340558cea", size = 59444, upload-time = "2025-09-11T12:47:40.308Z" }, ] [[package]] @@ -4370,7 +4680,7 @@ wheels = [ [[package]] name = "tox" -version = "4.28.4" +version = "4.30.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachetools" }, @@ -4385,9 +4695,9 @@ dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/01/321c98e3cc584fd101d869c85be2a8236a41a84842bc6af5c078b10c2126/tox-4.28.4.tar.gz", hash = "sha256:b5b14c6307bd8994ff1eba5074275826620325ee1a4f61316959d562bfd70b9d", size = 199692, upload-time = "2025-07-31T21:20:26.6Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799, upload-time = "2025-10-02T16:24:39.974Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/54/564a33093e41a585e2e997220986182c037bc998abf03a0eb4a7a67c4eff/tox-4.28.4-py3-none-any.whl", hash = "sha256:8d4ad9ee916ebbb59272bb045e154a10fa12e3bbdcf94cc5185cbdaf9b241f99", size = 174058, upload-time = "2025-07-31T21:20:24.836Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512, upload-time = "2025-10-02T16:24:38.209Z" }, ] [[package]] @@ -4395,7 +4705,7 @@ name = "tqdm" version = "4.67.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } wheels = [ @@ -4413,20 +4723,20 @@ wheels = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20250809" +version = "2.9.0.20250822" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/53/07dac71db45fb6b3c71c2fd29a87cada2239eac7ecfb318e6ebc7da00a3b/types_python_dateutil-2.9.0.20250809.tar.gz", hash = "sha256:69cbf8d15ef7a75c3801d65d63466e46ac25a0baa678d89d0a137fc31a608cc1", size = 15820, upload-time = "2025-08-09T03:14:14.109Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/0a/775f8551665992204c756be326f3575abba58c4a3a52eef9909ef4536428/types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53", size = 16084, upload-time = "2025-08-22T03:02:00.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/5e/67312e679f612218d07fcdbd14017e6d571ce240a5ba1ad734f15a8523cc/types_python_dateutil-2.9.0.20250809-py3-none-any.whl", hash = "sha256:768890cac4f2d7fd9e0feb6f3217fce2abbfdfc0cadd38d11fba325a815e4b9f", size = 17707, upload-time = "2025-08-09T03:14:13.314Z" }, + { url = "https://files.pythonhosted.org/packages/ab/d9/a29dfa84363e88b053bf85a8b7f212a04f0d7343a4d24933baa45c06e08b/types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc", size = 17892, upload-time = "2025-08-22T03:01:59.436Z" }, ] [[package]] name = "typing-extensions" -version = "4.14.1" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] [[package]] @@ -4434,8 +4744,8 @@ name = "typing-inspect" version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mypy-extensions", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { 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 = [ @@ -4444,14 +4754,14 @@ wheels = [ [[package]] name = "typing-inspection" -version = "0.4.1" +version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] [[package]] @@ -4481,6 +4791,18 @@ 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 = "url-normalize" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/31/febb777441e5fcdaacb4522316bf2a527c44551430a4873b052d545e3279/url_normalize-2.2.1.tar.gz", hash = "sha256:74a540a3b6eba1d95bdc610c24f2c0141639f3ba903501e61a52a8730247ff37", size = 18846, upload-time = "2025-04-26T20:37:58.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/d9/5ec15501b675f7bc07c5d16aa70d8d778b12375686b6efd47656efdc67cd/url_normalize-2.2.1-py3-none-any.whl", hash = "sha256:3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b", size = 14728, upload-time = "2025-04-26T20:37:57.217Z" }, +] + [[package]] name = "urllib3" version = "2.5.0" @@ -4495,9 +4817,8 @@ name = "versioningit" version = "3.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, + { name = "packaging" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/89/f4/bc578cc80989c572231a36cc03cc097091176fa3fb8b4e2af1deb4370eb7/versioningit-3.3.0.tar.gz", hash = "sha256:b91ad7d73e73d21220e69540f20213f2b729a1f9b35c04e9e137eaf28d2214da", size = 220280, upload-time = "2025-06-27T20:13:23.368Z" } wheels = [ @@ -4546,13 +4867,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/05/52/7223011bb760fce8ddc53416beb65b83a3ea6d7d13738dde75eeb2c89679/watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8", size = 96390, upload-time = "2024-11-01T14:06:49.325Z" }, - { url = "https://files.pythonhosted.org/packages/9c/62/d2b21bc4e706d3a9d467561f487c2938cbd881c69f3808c43ac1ec242391/watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a", size = 88386, upload-time = "2024-11-01T14:06:50.536Z" }, - { url = "https://files.pythonhosted.org/packages/ea/22/1c90b20eda9f4132e4603a26296108728a8bfe9584b006bd05dd94548853/watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c", size = 89017, upload-time = "2024-11-01T14:06:51.717Z" }, { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, - { url = "https://files.pythonhosted.org/packages/5b/79/69f2b0e8d3f2afd462029031baafb1b75d11bb62703f0e1022b2e54d49ee/watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa", size = 87903, upload-time = "2024-11-01T14:06:57.052Z" }, - { url = "https://files.pythonhosted.org/packages/e2/2b/dc048dd71c2e5f0f7ebc04dd7912981ec45793a03c0dc462438e0591ba5d/watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e", size = 88381, upload-time = "2024-11-01T14:06:58.193Z" }, { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, @@ -4567,11 +4883,11 @@ wheels = [ [[package]] name = "wcwidth" -version = "0.2.13" +version = "0.2.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, + { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, ] [[package]] @@ -4596,6 +4912,9 @@ wheels = [ name = "webob" version = "1.8.9" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "legacy-cgi", marker = "python_full_version >= '3.13'" }, +] sdist = { url = "https://files.pythonhosted.org/packages/85/0b/1732085540b01f65e4e7999e15864fe14cd18b12a95731a43fd6fd11b26a/webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589", size = 279775, upload-time = "2024-10-24T03:19:20.651Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/50/bd/c336448be43d40be28e71f2e0f3caf7ccb28e2755c58f4c02c065bfe3e8e/WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9", size = 115364, upload-time = "2024-10-24T03:19:18.642Z" }, @@ -4648,22 +4967,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/1c/cb/51ba82e59b3a664df54beed8ad95517c1b4dc1a913730e7a7db778f21291/websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", size = 182094, upload-time = "2025-03-05T20:03:01.827Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0f/bf3788c03fec679bcdaef787518dbe60d12fe5615a544a6d4cf82f045193/websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", size = 181094, upload-time = "2025-03-05T20:03:03.123Z" }, - { url = "https://files.pythonhosted.org/packages/5e/da/9fb8c21edbc719b66763a571afbaf206cb6d3736d28255a46fc2fe20f902/websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", size = 181397, upload-time = "2025-03-05T20:03:04.443Z" }, - { url = "https://files.pythonhosted.org/packages/2e/65/65f379525a2719e91d9d90c38fe8b8bc62bd3c702ac651b7278609b696c4/websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee", size = 181794, upload-time = "2025-03-05T20:03:06.708Z" }, - { url = "https://files.pythonhosted.org/packages/d9/26/31ac2d08f8e9304d81a1a7ed2851c0300f636019a57cbaa91342015c72cc/websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed", size = 181194, upload-time = "2025-03-05T20:03:08.844Z" }, - { url = "https://files.pythonhosted.org/packages/98/72/1090de20d6c91994cd4b357c3f75a4f25ee231b63e03adea89671cc12a3f/websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", size = 181164, upload-time = "2025-03-05T20:03:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/2d/37/098f2e1c103ae8ed79b0e77f08d83b0ec0b241cf4b7f2f10edd0126472e1/websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", size = 176381, upload-time = "2025-03-05T20:03:12.77Z" }, - { url = "https://files.pythonhosted.org/packages/75/8b/a32978a3ab42cebb2ebdd5b05df0696a09f4d436ce69def11893afa301f0/websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", size = 176841, upload-time = "2025-03-05T20:03:14.367Z" }, { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/87/28/bd23c6344b18fb43df40d0700f6d3fffcd7cef14a6995b4f976978b52e62/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", size = 174597, upload-time = "2025-03-05T20:03:32.247Z" }, - { url = "https://files.pythonhosted.org/packages/6d/79/ca288495863d0f23a60f546f0905ae8f3ed467ad87f8b6aceb65f4c013e4/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", size = 174205, upload-time = "2025-03-05T20:03:33.731Z" }, - { url = "https://files.pythonhosted.org/packages/04/e4/120ff3180b0872b1fe6637f6f995bcb009fb5c87d597c1fc21456f50c848/websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", size = 174150, upload-time = "2025-03-05T20:03:35.757Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c3/30e2f9c539b8da8b1d76f64012f3b19253271a63413b2d3adb94b143407f/websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123", size = 176877, upload-time = "2025-03-05T20:03:37.199Z" }, { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] @@ -4681,7 +4988,7 @@ name = "wirerope" version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six", marker = "python_full_version < '3.10'" }, + { name = "six" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/f1/d0a4c936ba77eb1050da6ea5e7cd80aa36add343d9e5f7f9cf79a206c5b8/wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0", size = 10930, upload-time = "2025-01-16T11:01:25.427Z" } wheels = [ @@ -4736,178 +5043,211 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717, upload-time = "2025-08-12T05:53:15.214Z" }, { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334, upload-time = "2025-08-12T05:53:14.178Z" }, { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471, upload-time = "2025-08-12T05:52:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/43/46/dd0791943613885f62619f18ee6107e6133237a6b6ed8a9ecfac339d0b4f/wrapt-1.17.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a", size = 81745, upload-time = "2025-08-12T05:52:49.62Z" }, - { url = "https://files.pythonhosted.org/packages/dd/ec/bb2d19bd1a614cc4f438abac13ae26c57186197920432d2a915183b15a8b/wrapt-1.17.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139", size = 82833, upload-time = "2025-08-12T05:52:27.738Z" }, - { url = "https://files.pythonhosted.org/packages/8d/eb/66579aea6ad36f07617fedca8e282e49c7c9bab64c63b446cfe4f7f47a49/wrapt-1.17.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df", size = 81889, upload-time = "2025-08-12T05:52:29.023Z" }, - { url = "https://files.pythonhosted.org/packages/04/9c/a56b5ac0e2473bdc3fb11b22dd69ff423154d63861cf77911cdde5e38fd2/wrapt-1.17.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b", size = 81344, upload-time = "2025-08-12T05:52:50.869Z" }, - { url = "https://files.pythonhosted.org/packages/93/4c/9bd735c42641d81cb58d7bfb142c58f95c833962d15113026705add41a07/wrapt-1.17.3-cp39-cp39-win32.whl", hash = "sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81", size = 36462, upload-time = "2025-08-12T05:53:19.623Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ea/0b72f29cb5ebc16eb55c57dc0c98e5de76fc97f435fd407f7d409459c0a6/wrapt-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f", size = 38740, upload-time = "2025-08-12T05:53:18.271Z" }, - { url = "https://files.pythonhosted.org/packages/c3/8b/9eae65fb92321e38dbfec7719b87d840a4b92fde83fd1bbf238c5488d055/wrapt-1.17.3-cp39-cp39-win_arm64.whl", hash = "sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f", size = 36806, upload-time = "2025-08-12T05:52:58.765Z" }, { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] [[package]] name = "xarray" -version = "2024.7.0" +version = "2025.6.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pandas", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pandas", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/84/e8/8ee12706df0d34ad04b3737621a73432458d47bc8abfbd6f049e51ca89c3/xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638", size = 3728663, upload-time = "2024-07-30T08:31:45.48Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185, upload-time = "2025-06-12T03:04:09.099Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/95/233e1f9c939f5ba314297315df709e6a5e823bf3cade7211991b15aa65d2/xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64", size = 1176466, upload-time = "2024-07-30T08:31:43.077Z" }, + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739, upload-time = "2025-06-12T03:04:06.708Z" }, ] [package.optional-dependencies] io = [ - { name = "cftime", marker = "python_full_version < '3.10'" }, - { name = "fsspec", marker = "python_full_version < '3.10'" }, - { name = "h5netcdf", marker = "python_full_version < '3.10'" }, - { name = "netcdf4", marker = "python_full_version < '3.10'" }, - { name = "pooch", marker = "python_full_version < '3.10'" }, - { name = "pydap", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "zarr", marker = "python_full_version < '3.10'" }, -] - -[[package]] -name = "xxhash" -version = "3.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241, upload-time = "2024-08-17T09:20:38.972Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/ee/b8a99ebbc6d1113b3a3f09e747fa318c3cde5b04bd9c197688fadf0eeae8/xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680", size = 220927, upload-time = "2024-08-17T09:17:38.835Z" }, - { url = "https://files.pythonhosted.org/packages/58/62/15d10582ef159283a5c2b47f6d799fc3303fe3911d5bb0bcc820e1ef7ff4/xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da", size = 200360, upload-time = "2024-08-17T09:17:40.851Z" }, - { url = "https://files.pythonhosted.org/packages/23/41/61202663ea9b1bd8e53673b8ec9e2619989353dba8cfb68e59a9cbd9ffe3/xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23", size = 428528, upload-time = "2024-08-17T09:17:42.545Z" }, - { url = "https://files.pythonhosted.org/packages/f2/07/d9a3059f702dec5b3b703737afb6dda32f304f6e9da181a229dafd052c29/xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196", size = 194149, upload-time = "2024-08-17T09:17:44.361Z" }, - { url = "https://files.pythonhosted.org/packages/eb/58/27caadf78226ecf1d62dbd0c01d152ed381c14c1ee4ad01f0d460fc40eac/xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c", size = 207703, upload-time = "2024-08-17T09:17:46.656Z" }, - { url = "https://files.pythonhosted.org/packages/b1/08/32d558ce23e1e068453c39aed7b3c1cdc690c177873ec0ca3a90d5808765/xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482", size = 216255, upload-time = "2024-08-17T09:17:48.031Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d4/2b971e2d2b0a61045f842b622ef11e94096cf1f12cd448b6fd426e80e0e2/xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296", size = 202744, upload-time = "2024-08-17T09:17:50.045Z" }, - { url = "https://files.pythonhosted.org/packages/19/ae/6a6438864a8c4c39915d7b65effd85392ebe22710412902487e51769146d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415", size = 210115, upload-time = "2024-08-17T09:17:51.834Z" }, - { url = "https://files.pythonhosted.org/packages/48/7d/b3c27c27d1fc868094d02fe4498ccce8cec9fcc591825c01d6bcb0b4fc49/xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198", size = 414247, upload-time = "2024-08-17T09:17:53.094Z" }, - { url = "https://files.pythonhosted.org/packages/a1/05/918f9e7d2fbbd334b829997045d341d6239b563c44e683b9a7ef8fe50f5d/xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442", size = 191419, upload-time = "2024-08-17T09:17:54.906Z" }, - { url = "https://files.pythonhosted.org/packages/08/29/dfe393805b2f86bfc47c290b275f0b7c189dc2f4e136fd4754f32eb18a8d/xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da", size = 30114, upload-time = "2024-08-17T09:17:56.566Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d7/aa0b22c4ebb7c3ccb993d4c565132abc641cd11164f8952d89eb6a501909/xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9", size = 30003, upload-time = "2024-08-17T09:17:57.596Z" }, - { url = "https://files.pythonhosted.org/packages/69/12/f969b81541ee91b55f1ce469d7ab55079593c80d04fd01691b550e535000/xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6", size = 26773, upload-time = "2024-08-17T09:17:59.169Z" }, - { url = "https://files.pythonhosted.org/packages/04/9e/01067981d98069eec1c20201f8c145367698e9056f8bc295346e4ea32dd1/xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166", size = 221566, upload-time = "2024-08-17T09:18:03.461Z" }, - { url = "https://files.pythonhosted.org/packages/d4/09/d4996de4059c3ce5342b6e1e6a77c9d6c91acce31f6ed979891872dd162b/xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7", size = 201214, upload-time = "2024-08-17T09:18:05.616Z" }, - { url = "https://files.pythonhosted.org/packages/62/f5/6d2dc9f8d55a7ce0f5e7bfef916e67536f01b85d32a9fbf137d4cadbee38/xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623", size = 429433, upload-time = "2024-08-17T09:18:06.957Z" }, - { url = "https://files.pythonhosted.org/packages/d9/72/9256303f10e41ab004799a4aa74b80b3c5977d6383ae4550548b24bd1971/xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a", size = 194822, upload-time = "2024-08-17T09:18:08.331Z" }, - { url = "https://files.pythonhosted.org/packages/34/92/1a3a29acd08248a34b0e6a94f4e0ed9b8379a4ff471f1668e4dce7bdbaa8/xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88", size = 208538, upload-time = "2024-08-17T09:18:10.332Z" }, - { url = "https://files.pythonhosted.org/packages/53/ad/7fa1a109663366de42f724a1cdb8e796a260dbac45047bce153bc1e18abf/xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c", size = 216953, upload-time = "2024-08-17T09:18:11.707Z" }, - { url = "https://files.pythonhosted.org/packages/35/02/137300e24203bf2b2a49b48ce898ecce6fd01789c0fcd9c686c0a002d129/xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2", size = 203594, upload-time = "2024-08-17T09:18:13.799Z" }, - { url = "https://files.pythonhosted.org/packages/23/03/aeceb273933d7eee248c4322b98b8e971f06cc3880e5f7602c94e5578af5/xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084", size = 210971, upload-time = "2024-08-17T09:18:15.824Z" }, - { url = "https://files.pythonhosted.org/packages/e3/64/ed82ec09489474cbb35c716b189ddc1521d8b3de12b1b5ab41ce7f70253c/xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d", size = 415050, upload-time = "2024-08-17T09:18:17.142Z" }, - { url = "https://files.pythonhosted.org/packages/71/43/6db4c02dcb488ad4e03bc86d70506c3d40a384ee73c9b5c93338eb1f3c23/xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839", size = 192216, upload-time = "2024-08-17T09:18:18.779Z" }, - { url = "https://files.pythonhosted.org/packages/22/6d/db4abec29e7a567455344433d095fdb39c97db6955bb4a2c432e486b4d28/xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da", size = 30120, upload-time = "2024-08-17T09:18:20.009Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/fa3b61c0cf03e1da4767213672efe186b1dfa4fc901a4a694fb184a513d1/xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58", size = 30003, upload-time = "2024-08-17T09:18:21.052Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8e/9e6fc572acf6e1cc7ccb01973c213f895cb8668a9d4c2b58a99350da14b7/xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3", size = 26777, upload-time = "2024-08-17T09:18:22.809Z" }, - { url = "https://files.pythonhosted.org/packages/5b/84/de7c89bc6ef63d750159086a6ada6416cc4349eab23f76ab870407178b93/xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84", size = 220959, upload-time = "2024-08-17T09:18:26.518Z" }, - { url = "https://files.pythonhosted.org/packages/fe/86/51258d3e8a8545ff26468c977101964c14d56a8a37f5835bc0082426c672/xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793", size = 200006, upload-time = "2024-08-17T09:18:27.905Z" }, - { url = "https://files.pythonhosted.org/packages/02/0a/96973bd325412feccf23cf3680fd2246aebf4b789122f938d5557c54a6b2/xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be", size = 428326, upload-time = "2024-08-17T09:18:29.335Z" }, - { url = "https://files.pythonhosted.org/packages/11/a7/81dba5010f7e733de88af9555725146fc133be97ce36533867f4c7e75066/xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6", size = 194380, upload-time = "2024-08-17T09:18:30.706Z" }, - { url = "https://files.pythonhosted.org/packages/fb/7d/f29006ab398a173f4501c0e4977ba288f1c621d878ec217b4ff516810c04/xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90", size = 207934, upload-time = "2024-08-17T09:18:32.133Z" }, - { url = "https://files.pythonhosted.org/packages/8a/6e/6e88b8f24612510e73d4d70d9b0c7dff62a2e78451b9f0d042a5462c8d03/xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27", size = 216301, upload-time = "2024-08-17T09:18:33.474Z" }, - { url = "https://files.pythonhosted.org/packages/af/51/7862f4fa4b75a25c3b4163c8a873f070532fe5f2d3f9b3fc869c8337a398/xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2", size = 203351, upload-time = "2024-08-17T09:18:34.889Z" }, - { url = "https://files.pythonhosted.org/packages/22/61/8d6a40f288f791cf79ed5bb113159abf0c81d6efb86e734334f698eb4c59/xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d", size = 210294, upload-time = "2024-08-17T09:18:36.355Z" }, - { url = "https://files.pythonhosted.org/packages/17/02/215c4698955762d45a8158117190261b2dbefe9ae7e5b906768c09d8bc74/xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab", size = 414674, upload-time = "2024-08-17T09:18:38.536Z" }, - { url = "https://files.pythonhosted.org/packages/31/5c/b7a8db8a3237cff3d535261325d95de509f6a8ae439a5a7a4ffcff478189/xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e", size = 192022, upload-time = "2024-08-17T09:18:40.138Z" }, - { url = "https://files.pythonhosted.org/packages/78/e3/dd76659b2811b3fd06892a8beb850e1996b63e9235af5a86ea348f053e9e/xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8", size = 30170, upload-time = "2024-08-17T09:18:42.163Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6b/1c443fe6cfeb4ad1dcf231cdec96eb94fb43d6498b4469ed8b51f8b59a37/xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e", size = 30040, upload-time = "2024-08-17T09:18:43.699Z" }, - { url = "https://files.pythonhosted.org/packages/0f/eb/04405305f290173acc0350eba6d2f1a794b57925df0398861a20fbafa415/xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2", size = 26796, upload-time = "2024-08-17T09:18:45.29Z" }, - { url = "https://files.pythonhosted.org/packages/c3/cc/762312960691da989c7cd0545cb120ba2a4148741c6ba458aa723c00a3f8/xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc", size = 220950, upload-time = "2024-08-17T09:18:49.06Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e9/cc266f1042c3c13750e86a535496b58beb12bf8c50a915c336136f6168dc/xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3", size = 199980, upload-time = "2024-08-17T09:18:50.445Z" }, - { url = "https://files.pythonhosted.org/packages/bf/85/a836cd0dc5cc20376de26b346858d0ac9656f8f730998ca4324921a010b9/xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c", size = 428324, upload-time = "2024-08-17T09:18:51.988Z" }, - { url = "https://files.pythonhosted.org/packages/b4/0e/15c243775342ce840b9ba34aceace06a1148fa1630cd8ca269e3223987f5/xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb", size = 194370, upload-time = "2024-08-17T09:18:54.164Z" }, - { url = "https://files.pythonhosted.org/packages/87/a1/b028bb02636dfdc190da01951d0703b3d904301ed0ef6094d948983bef0e/xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f", size = 207911, upload-time = "2024-08-17T09:18:55.509Z" }, - { url = "https://files.pythonhosted.org/packages/80/d5/73c73b03fc0ac73dacf069fdf6036c9abad82de0a47549e9912c955ab449/xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7", size = 216352, upload-time = "2024-08-17T09:18:57.073Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2a/5043dba5ddbe35b4fe6ea0a111280ad9c3d4ba477dd0f2d1fe1129bda9d0/xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326", size = 203410, upload-time = "2024-08-17T09:18:58.54Z" }, - { url = "https://files.pythonhosted.org/packages/a2/b2/9a8ded888b7b190aed75b484eb5c853ddd48aa2896e7b59bbfbce442f0a1/xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf", size = 210322, upload-time = "2024-08-17T09:18:59.943Z" }, - { url = "https://files.pythonhosted.org/packages/98/62/440083fafbc917bf3e4b67c2ade621920dd905517e85631c10aac955c1d2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7", size = 414725, upload-time = "2024-08-17T09:19:01.332Z" }, - { url = "https://files.pythonhosted.org/packages/75/db/009206f7076ad60a517e016bb0058381d96a007ce3f79fa91d3010f49cc2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c", size = 192070, upload-time = "2024-08-17T09:19:03.007Z" }, - { url = "https://files.pythonhosted.org/packages/1f/6d/c61e0668943a034abc3a569cdc5aeae37d686d9da7e39cf2ed621d533e36/xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637", size = 30172, upload-time = "2024-08-17T09:19:04.355Z" }, - { url = "https://files.pythonhosted.org/packages/96/14/8416dce965f35e3d24722cdf79361ae154fa23e2ab730e5323aa98d7919e/xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43", size = 30041, upload-time = "2024-08-17T09:19:05.435Z" }, - { url = "https://files.pythonhosted.org/packages/27/ee/518b72faa2073f5aa8e3262408d284892cb79cf2754ba0c3a5870645ef73/xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b", size = 26801, upload-time = "2024-08-17T09:19:06.547Z" }, - { url = "https://files.pythonhosted.org/packages/b4/92/9ac297e3487818f429bcf369c1c6a097edf5b56ed6fc1feff4c1882e87ef/xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f", size = 220644, upload-time = "2024-08-17T09:19:51.081Z" }, - { url = "https://files.pythonhosted.org/packages/86/48/c1426dd3c86fc4a52f983301867463472f6a9013fb32d15991e60c9919b6/xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd", size = 200021, upload-time = "2024-08-17T09:19:52.923Z" }, - { url = "https://files.pythonhosted.org/packages/f3/de/0ab8c79993765c94fc0d0c1a22b454483c58a0161e1b562f58b654f47660/xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc", size = 428217, upload-time = "2024-08-17T09:19:54.349Z" }, - { url = "https://files.pythonhosted.org/packages/b4/b4/332647451ed7d2c021294b7c1e9c144dbb5586b1fb214ad4f5a404642835/xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754", size = 193868, upload-time = "2024-08-17T09:19:55.763Z" }, - { url = "https://files.pythonhosted.org/packages/f4/1c/a42c0a6cac752f84f7b44a90d1a9fa9047cf70bdba5198a304fde7cc471f/xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6", size = 207403, upload-time = "2024-08-17T09:19:57.945Z" }, - { url = "https://files.pythonhosted.org/packages/c4/d7/04e1b0daae9dc9b02c73c1664cc8aa527498c3f66ccbc586eeb25bbe9f14/xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898", size = 215978, upload-time = "2024-08-17T09:19:59.381Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f4/05e15e67505228fc19ee98a79e427b3a0b9695f5567cd66ced5d66389883/xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833", size = 202416, upload-time = "2024-08-17T09:20:01.534Z" }, - { url = "https://files.pythonhosted.org/packages/94/fb/e9028d3645bba5412a09de13ee36df276a567e60bdb31d499dafa46d76ae/xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6", size = 209853, upload-time = "2024-08-17T09:20:03.376Z" }, - { url = "https://files.pythonhosted.org/packages/02/2c/18c6a622429368274739372d2f86c8125413ec169025c7d8ffb051784bba/xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af", size = 413926, upload-time = "2024-08-17T09:20:04.946Z" }, - { url = "https://files.pythonhosted.org/packages/72/bb/5b55c391084a0321c3809632a018b9b657e59d5966289664f85a645942ac/xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606", size = 191156, upload-time = "2024-08-17T09:20:06.318Z" }, - { url = "https://files.pythonhosted.org/packages/86/2b/915049db13401792fec159f57e4f4a5ca7a9768e83ef71d6645b9d0cd749/xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4", size = 30122, upload-time = "2024-08-17T09:20:07.691Z" }, - { url = "https://files.pythonhosted.org/packages/d5/87/382ef7b24917d7cf4c540ee30f29b283bc87ac5893d2f89b23ea3cdf7d77/xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558", size = 30021, upload-time = "2024-08-17T09:20:08.832Z" }, - { url = "https://files.pythonhosted.org/packages/e2/47/d06b24e2d9c3dcabccfd734d11b5bbebfdf59ceac2c61509d8205dd20ac6/xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e", size = 26780, upload-time = "2024-08-17T09:20:09.989Z" }, - { url = "https://files.pythonhosted.org/packages/0c/67/f75276ca39e2c6604e3bee6c84e9db8a56a4973fde9bf35989787cf6e8aa/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986", size = 36214, upload-time = "2024-08-17T09:20:12.335Z" }, - { url = "https://files.pythonhosted.org/packages/0f/f8/f6c61fd794229cc3848d144f73754a0c107854372d7261419dcbbd286299/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6", size = 32020, upload-time = "2024-08-17T09:20:13.537Z" }, - { url = "https://files.pythonhosted.org/packages/79/d3/c029c99801526f859e6b38d34ab87c08993bf3dcea34b11275775001638a/xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b", size = 40515, upload-time = "2024-08-17T09:20:14.669Z" }, - { url = "https://files.pythonhosted.org/packages/62/e3/bef7b82c1997579c94de9ac5ea7626d01ae5858aa22bf4fcb38bf220cb3e/xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da", size = 30064, upload-time = "2024-08-17T09:20:15.925Z" }, - { url = "https://files.pythonhosted.org/packages/82/dd/3c42a1f022ad0d82c852d3cb65493ebac03dcfa8c994465a5fb052b00e3c/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1", size = 36216, upload-time = "2024-08-17T09:20:32.116Z" }, - { url = "https://files.pythonhosted.org/packages/b2/40/8f902ab3bebda228a9b4de69eba988280285a7f7f167b942bc20bb562df9/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f", size = 32042, upload-time = "2024-08-17T09:20:33.562Z" }, - { url = "https://files.pythonhosted.org/packages/db/87/bd06beb8ccaa0e9e577c9b909a49cfa5c5cd2ca46034342d72dd9ce5bc56/xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0", size = 40516, upload-time = "2024-08-17T09:20:36.004Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f8/505385e2fbd753ddcaafd5550eabe86f6232cbebabad3b2508d411b19153/xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240", size = 30108, upload-time = "2024-08-17T09:20:37.214Z" }, + { name = "cftime", marker = "python_full_version < '3.11'" }, + { name = "fsspec", marker = "python_full_version < '3.11'" }, + { name = "h5netcdf", marker = "python_full_version < '3.11'" }, + { name = "netcdf4", marker = "python_full_version < '3.11'" }, + { name = "pooch", marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "zarr", version = "2.18.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] [[package]] -name = "zarr" -version = "2.18.2" +name = "xarray" +version = "2025.9.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] dependencies = [ - { name = "asciitree", marker = "python_full_version < '3.10'" }, - { name = "fasteners", marker = "python_full_version < '3.10' and sys_platform != 'emscripten'" }, - { name = "numcodecs", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pandas", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/00/ac5c518ff1c1b1cc87a62f86ad9d19c647c19d969a91faa40d3b6342ccaa/zarr-2.18.2.tar.gz", hash = "sha256:9bb393b8a0a38fb121dbb913b047d75db28de9890f6d644a217a73cf4ae74f47", size = 3603055, upload-time = "2024-05-26T19:23:24.131Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/5d/e139112a463336c636d4455494f3227b7f47a2e06ca7571e6b88158ffc06/xarray-2025.9.1.tar.gz", hash = "sha256:f34a27a52c13d1f3cceb7b27276aeec47021558363617dd7ef4f4c8b379011c0", size = 3057322, upload-time = "2025-09-30T05:28:53.084Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/bd/8d881d8ca6d80fcb8da2b2f94f8855384daf649499ddfba78ffd1ee2caa3/zarr-2.18.2-py3-none-any.whl", hash = "sha256:a638754902f97efa99b406083fdc807a0e2ccf12a949117389d2a4ba9b05df38", size = 210228, upload-time = "2024-05-26T19:23:22.171Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a7/6eeb32e705d510a672f74135f538ad27f87f3d600845bfd3834ea3a77c7e/xarray-2025.9.1-py3-none-any.whl", hash = "sha256:3e9708db0d7915c784ed6c227d81b398dca4957afe68d119481f8a448fc88c44", size = 1364411, upload-time = "2025-09-30T05:28:51.294Z" }, +] + +[package.optional-dependencies] +io = [ + { name = "cftime", marker = "python_full_version >= '3.11'" }, + { name = "fsspec", marker = "python_full_version >= '3.11'" }, + { name = "h5netcdf", marker = "python_full_version >= '3.11'" }, + { name = "netcdf4", marker = "python_full_version >= '3.11'" }, + { name = "pooch", marker = "python_full_version >= '3.11'" }, + { name = "pydap", marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "zarr", version = "3.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] [[package]] -name = "zhinst" -version = "21.8.20515" +name = "xxhash" +version = "3.6.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", marker = "python_full_version < '3.10'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/56/24/3af8acbc6815c91ec1dd4c339e43897cd44b0a6d21be6e3b66adc236e965/zhinst-21.8.20515-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df5e562f4e928e168be8816e20b5c138e7c70306eb402ad7fc9e8a5eec893613", size = 7672570, upload-time = "2021-09-09T14:10:55.759Z" }, - { url = "https://files.pythonhosted.org/packages/19/29/6d3108917c2bdcbc146fb370d93cc13d3b89f10b9d628e211be8adcc290d/zhinst-21.8.20515-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:db35ebcc5bb5b195de20bbfb71487159adbfc89e35b71412e06dc30c089a59b9", size = 6886563, upload-time = "2021-09-09T14:10:57.559Z" }, - { url = "https://files.pythonhosted.org/packages/b0/24/734641b651e94453171d2a3f392e47842e3d8bbf81b9edb846274bb7d66f/zhinst-21.8.20515-cp39-cp39-win_amd64.whl", hash = "sha256:423966ca97d78dfdb13c4e6bd9eaba6521f84bd7fb812b973dfdb50aeb51c5aa", size = 6366500, upload-time = "2021-09-09T14:11:00.585Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/55/28c93a3662f2d200c70704efe74aab9640e824f8ce330d8d3943bf7c9b3c/xxhash-3.6.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:89952ea539566b9fed2bbd94e589672794b4286f342254fad28b149f9615fef8", size = 193786, upload-time = "2025-10-02T14:33:54.272Z" }, + { url = "https://files.pythonhosted.org/packages/c1/96/fec0be9bb4b8f5d9c57d76380a366f31a1781fb802f76fc7cda6c84893c7/xxhash-3.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e6f2ffb07a50b52465a1032c3cf1f4a5683f944acaca8a134a2f23674c2058", size = 212830, upload-time = "2025-10-02T14:33:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a0/c706845ba77b9611f81fd2e93fad9859346b026e8445e76f8c6fd057cc6d/xxhash-3.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5b848ad6c16d308c3ac7ad4ba6bede80ed5df2ba8ed382f8932df63158dd4b2", size = 211606, upload-time = "2025-10-02T14:33:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/164126a2999e5045f04a69257eea946c0dc3e86541b400d4385d646b53d7/xxhash-3.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a034590a727b44dd8ac5914236a7b8504144447a9682586c3327e935f33ec8cc", size = 444872, upload-time = "2025-10-02T14:33:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a8f1972e75ebdd161d7896743122834fe87378160c20e97f8b09166213bf8cc", size = 193217, upload-time = "2025-10-02T14:33:59.724Z" }, + { url = "https://files.pythonhosted.org/packages/45/e6/52abf06bac316db33aa269091ae7311bd53cfc6f4b120ae77bac1b348091/xxhash-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ee34327b187f002a596d7b167ebc59a1b729e963ce645964bbc050d2f1b73d07", size = 210139, upload-time = "2025-10-02T14:34:02.041Z" }, + { url = "https://files.pythonhosted.org/packages/34/37/db94d490b8691236d356bc249c08819cbcef9273a1a30acf1254ff9ce157/xxhash-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:339f518c3c7a850dd033ab416ea25a692759dc7478a71131fe8869010d2b75e4", size = 197669, upload-time = "2025-10-02T14:34:03.664Z" }, + { url = "https://files.pythonhosted.org/packages/b7/36/c4f219ef4a17a4f7a64ed3569bc2b5a9c8311abdb22249ac96093625b1a4/xxhash-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bf48889c9630542d4709192578aebbd836177c9f7a4a2778a7d6340107c65f06", size = 210018, upload-time = "2025-10-02T14:34:05.325Z" }, + { url = "https://files.pythonhosted.org/packages/fd/06/bfac889a374fc2fc439a69223d1750eed2e18a7db8514737ab630534fa08/xxhash-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5576b002a56207f640636056b4160a378fe36a58db73ae5c27a7ec8db35f71d4", size = 413058, upload-time = "2025-10-02T14:34:06.925Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d1/555d8447e0dd32ad0930a249a522bb2e289f0d08b6b16204cfa42c1f5a0c/xxhash-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af1f3278bd02814d6dedc5dec397993b549d6f16c19379721e5a1d31e132c49b", size = 190628, upload-time = "2025-10-02T14:34:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/d1/15/8751330b5186cedc4ed4b597989882ea05e0408b53fa47bcb46a6125bfc6/xxhash-3.6.0-cp310-cp310-win32.whl", hash = "sha256:aed058764db109dc9052720da65fafe84873b05eb8b07e5e653597951af57c3b", size = 30577, upload-time = "2025-10-02T14:34:10.234Z" }, + { url = "https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:e82da5670f2d0d98950317f82a0e4a0197150ff19a6df2ba40399c2a3b9ae5fb", size = 31487, upload-time = "2025-10-02T14:34:11.618Z" }, + { url = "https://files.pythonhosted.org/packages/9f/00/60f9ea3bb697667a14314d7269956f58bf56bb73864f8f8d52a3c2535e9a/xxhash-3.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a082ffff8c6ac07707fb6b671caf7c6e020c75226c561830b73d862060f281d", size = 27863, upload-time = "2025-10-02T14:34:12.619Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/19fe357ea348d98ca22f456f75a30ac0916b51c753e1f8b2e0e6fb884cce/xxhash-3.6.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d0a9751f71a1a65ce3584e9cae4467651c7e70c9d31017fa57574583a4540248", size = 194665, upload-time = "2025-10-02T14:34:16.541Z" }, + { url = "https://files.pythonhosted.org/packages/90/3b/d1f1a8f5442a5fd8beedae110c5af7604dc37349a8e16519c13c19a9a2de/xxhash-3.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b29ee68625ab37b04c0b40c3fafdf24d2f75ccd778333cfb698f65f6c463f62", size = 213550, upload-time = "2025-10-02T14:34:17.878Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ef/3a9b05eb527457d5db13a135a2ae1a26c80fecd624d20f3e8dcc4cb170f3/xxhash-3.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6812c25fe0d6c36a46ccb002f40f27ac903bf18af9f6dd8f9669cb4d176ab18f", size = 212384, upload-time = "2025-10-02T14:34:19.182Z" }, + { url = "https://files.pythonhosted.org/packages/0f/18/ccc194ee698c6c623acbf0f8c2969811a8a4b6185af5e824cd27b9e4fd3e/xxhash-3.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ccbff013972390b51a18ef1255ef5ac125c92dc9143b2d1909f59abc765540e", size = 445749, upload-time = "2025-10-02T14:34:20.659Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:297b7fbf86c82c550e12e8fb71968b3f033d27b874276ba3624ea868c11165a8", size = 193880, upload-time = "2025-10-02T14:34:22.431Z" }, + { url = "https://files.pythonhosted.org/packages/82/fb/96213c8560e6f948a1ecc9a7613f8032b19ee45f747f4fca4eb31bb6d6ed/xxhash-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dea26ae1eb293db089798d3973a5fc928a18fdd97cc8801226fae705b02b14b0", size = 210912, upload-time = "2025-10-02T14:34:23.937Z" }, + { url = "https://files.pythonhosted.org/packages/40/aa/4395e669b0606a096d6788f40dbdf2b819d6773aa290c19e6e83cbfc312f/xxhash-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7a0b169aafb98f4284f73635a8e93f0735f9cbde17bd5ec332480484241aaa77", size = 198654, upload-time = "2025-10-02T14:34:25.644Z" }, + { url = "https://files.pythonhosted.org/packages/67/74/b044fcd6b3d89e9b1b665924d85d3f400636c23590226feb1eb09e1176ce/xxhash-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:08d45aef063a4531b785cd72de4887766d01dc8f362a515693df349fdb825e0c", size = 210867, upload-time = "2025-10-02T14:34:27.203Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fd/3ce73bf753b08cb19daee1eb14aa0d7fe331f8da9c02dd95316ddfe5275e/xxhash-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:929142361a48ee07f09121fe9e96a84950e8d4df3bb298ca5d88061969f34d7b", size = 414012, upload-time = "2025-10-02T14:34:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b3/5a4241309217c5c876f156b10778f3ab3af7ba7e3259e6d5f5c7d0129eb2/xxhash-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51312c768403d8540487dbbfb557454cfc55589bbde6424456951f7fcd4facb3", size = 191409, upload-time = "2025-10-02T14:34:29.696Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/99bfbc15fb9abb9a72b088c1d95219fc4782b7d01fc835bd5744d66dd0b8/xxhash-3.6.0-cp311-cp311-win32.whl", hash = "sha256:d1927a69feddc24c987b337ce81ac15c4720955b667fe9b588e02254b80446fd", size = 30574, upload-time = "2025-10-02T14:34:31.028Z" }, + { url = "https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:26734cdc2d4ffe449b41d186bbeac416f704a482ed835d375a5c0cb02bc63fef", size = 31481, upload-time = "2025-10-02T14:34:32.062Z" }, + { url = "https://files.pythonhosted.org/packages/30/4e/15cd0e3e8772071344eab2961ce83f6e485111fed8beb491a3f1ce100270/xxhash-3.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:d72f67ef8bf36e05f5b6c65e8524f265bd61071471cd4cf1d36743ebeeeb06b7", size = 27861, upload-time = "2025-10-02T14:34:33.555Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, + { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, + { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, + { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, + { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, + { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, + { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, + { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, + { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, + { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, + { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, + { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, + { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, + { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, + { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, + { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, + { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, + { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, + { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, + { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, + { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, + { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, + { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, + { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, + { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, + { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, + { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/b14510b38ba91caf43006209db846a696ceea6a847a0c9ba0a5b1adc53d6/xxhash-3.6.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5dc1e14d14fa0f5789ec29a7062004b5933964bb9b02aae6622b8f530dc40296", size = 41056, upload-time = "2025-10-02T14:37:02.879Z" }, + { url = "https://files.pythonhosted.org/packages/50/55/15a7b8a56590e66ccd374bbfa3f9ffc45b810886c8c3b614e3f90bd2367c/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:881b47fc47e051b37d94d13e7455131054b56749b91b508b0907eb07900d1c13", size = 36251, upload-time = "2025-10-02T14:37:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/5ac99a041a29e58e95f907876b04f7067a0242cb85b5f39e726153981503/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6dc31591899f5e5666f04cc2e529e69b4072827085c1ef15294d91a004bc1bd", size = 32481, upload-time = "2025-10-02T14:37:05.869Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/8d95e906764a386a3d3b596f3c68bb63687dfca806373509f51ce8eea81f/xxhash-3.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:15e0dac10eb9309508bfc41f7f9deaa7755c69e35af835db9cb10751adebc35d", size = 31565, upload-time = "2025-10-02T14:37:06.966Z" }, ] [[package]] -name = "zhinst-qcodes" -version = "0.1.4" +name = "zarr" +version = "2.18.3" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "qcodes", marker = "python_full_version < '3.10'" }, - { name = "setuptools", marker = "python_full_version < '3.10'" }, - { name = "zhinst", marker = "python_full_version < '3.10'" }, - { name = "zhinst-toolkit", marker = "python_full_version < '3.10'" }, + { name = "asciitree", marker = "python_full_version < '3.11'" }, + { name = "fasteners", marker = "python_full_version < '3.11' and sys_platform != 'emscripten'" }, + { name = "numcodecs", version = "0.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/23/c4/187a21ce7cf7c8f00c060dd0e04c2a81139bb7b1ab178bba83f2e1134ce2/zarr-2.18.3.tar.gz", hash = "sha256:2580d8cb6dd84621771a10d31c4d777dca8a27706a1a89b29f42d2d37e2df5ce", size = 3603224, upload-time = "2024-09-04T23:20:16.595Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/1d/a4bc3a785fe9a494f9540ec3b01ec7d6d7c408f83802e6ba92d231474463/zhinst_qcodes-0.1.4-py3-none-any.whl", hash = "sha256:9f56739dcf7176764f55bb6212a0db391b31a208a15f265cc978cd28355fa3ae", size = 22481, upload-time = "2021-05-10T08:00:27.985Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c9/142095e654c2b97133ff71df60979422717b29738b08bc8a1709a5d5e0d0/zarr-2.18.3-py3-none-any.whl", hash = "sha256:b1f7dfd2496f436745cdd4c7bcf8d3b4bc1dceef5fdd0d589c87130d842496dd", size = 210723, upload-time = "2024-09-04T23:20:14.491Z" }, ] [[package]] -name = "zhinst-toolkit" -version = "0.1.5" +name = "zarr" +version = "3.1.3" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version == '3.11.*'", +] dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "numpy", marker = "python_full_version < '3.10'" }, - { name = "setuptools", marker = "python_full_version < '3.10'" }, - { name = "zhinst", marker = "python_full_version < '3.10'" }, + { name = "donfig", marker = "python_full_version >= '3.11'" }, + { name = "numcodecs", version = "0.16.3", source = { registry = "https://pypi.org/simple" }, extra = ["crc32c"], marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/67/14be68a7bad15eecda09b1e81fca2420f7533645fe187bf4d6104c1aad52/zarr-3.1.3.tar.gz", hash = "sha256:01342f3e26a02ed5670db608a5576fbdb8d76acb5c280bd2d0082454b1ba6f79", size = 349125, upload-time = "2025-09-18T19:32:41.688Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl", hash = "sha256:45f67f87f65f14fa453f99dd8110a5936b7ac69f3a21981d33e90407c80c302a", size = 276427, upload-time = "2025-09-18T19:32:40.042Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/2d/459c53a535a79552a950bbab6ca54d15d4e32f70d4321c7eb434c34bc400/zhinst-toolkit-0.1.5.tar.gz", hash = "sha256:e3fb7966a5c03b929cc762a84d1f5708b09117afb51ea4188946763caf5818c9", size = 1728637, upload-time = "2021-02-04T13:57:32.724Z" } [[package]] name = "zipp" From 6670ef837088237970c45860059eb7a42a29fcad Mon Sep 17 00:00:00 2001 From: Chris Elenbaas <67630508+elenbaasc@users.noreply.github.com> Date: Mon, 3 Nov 2025 08:08:40 +0100 Subject: [PATCH 10/12] Release 0.8.0 (#637) --- CHANGELOG.md | 15 +- .../exporting/quantify-scheduler-exporter.md | 2 + opensquirrel/circuit.py | 22 +- opensquirrel/circuit_builder.py | 8 +- opensquirrel/circuit_matrix_calculator.py | 42 - opensquirrel/default_instructions.py | 14 +- opensquirrel/exceptions.py | 2 +- opensquirrel/ir/__init__.py | 4 +- opensquirrel/ir/control_instruction.py | 61 + .../ir/default_gates/two_qubit_gates.py | 15 +- opensquirrel/ir/ir.py | 11 +- opensquirrel/ir/non_unitary.py | 63 +- opensquirrel/ir/semantics/bsr.py | 17 +- opensquirrel/ir/semantics/canonical_gate.py | 22 +- opensquirrel/ir/semantics/controlled_gate.py | 10 +- opensquirrel/ir/semantics/matrix_gate.py | 8 +- opensquirrel/ir/statement.py | 7 +- opensquirrel/ir/unitary.py | 21 +- .../passes/exporter/cqasmv1_exporter.py | 32 +- .../exporter/quantify_scheduler_exporter.py | 227 +- opensquirrel/passes/mapper/mip_mapper.py | 4 +- opensquirrel/passes/mapper/qubit_remapper.py | 54 +- opensquirrel/passes/mapper/utils.py | 22 +- opensquirrel/passes/router/astar_router.py | 79 +- opensquirrel/passes/router/common.py | 158 + opensquirrel/passes/router/general_router.py | 7 +- opensquirrel/passes/router/heuristics.py | 37 +- .../passes/router/shortest_path_router.py | 58 +- opensquirrel/reader/libqasm_parser.py | 42 +- opensquirrel/reindexer/qubit_reindexer.py | 34 - opensquirrel/utils/matrix_expander.py | 34 - opensquirrel/writer/writer.py | 28 +- pyproject.toml | 4 +- .../docs/compilation-passes/test_exporter.py | 2 + tests/integration/test_tuna_5.py | 5 + .../test_quantify_scheduler_exporter.py | 336 +- tests/writer/test_writer.py | 47 + uv.lock | 4881 +++++++++-------- 38 files changed, 3480 insertions(+), 2955 deletions(-) create mode 100644 opensquirrel/ir/control_instruction.py create mode 100644 opensquirrel/passes/router/common.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 46dd5333..ffae69bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,15 +10,26 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. +## [ 0.8.0 ] - [ 2025-11-03 ] + +### Added + +- Processing of control instructions (Barrier, Wait) added to quantify-scheduler exporter + +### Changed + +- Refactor of visitor functionality of IR components and implementations +- Improved SWAP placement and refactor of common functionalities in existing router passes + ## [ 0.7.0 ] - [ 2025-10-13 ] ### Added -- Support for Python 3.13 added. +- Support for Python 3.13 added ### Removed -- Support for Python 3.9 dropped. +- Support for Python 3.9 dropped ## [ 0.6.1 ] - [ 2025-10-06 ] diff --git a/docs/compilation-passes/exporting/quantify-scheduler-exporter.md b/docs/compilation-passes/exporting/quantify-scheduler-exporter.md index 17dd50f8..d9b642ea 100644 --- a/docs/compilation-passes/exporting/quantify-scheduler-exporter.md +++ b/docs/compilation-passes/exporting/quantify-scheduler-exporter.md @@ -231,6 +231,8 @@ The four examples below show how circuits written in [cQASM](https://qutech-delf ``` ``` + Reset q[0] + Reset q[1] Rxy(90, 90, 'q[0]') Rxy(180, 0, 'q[0]') CNOT (q[0], q[1]) diff --git a/opensquirrel/circuit.py b/opensquirrel/circuit.py index 5cc87864..40748fbf 100644 --- a/opensquirrel/circuit.py +++ b/opensquirrel/circuit.py @@ -106,16 +106,20 @@ def decompose(self, decomposer: Decomposer) -> None: general_decomposer.decompose(self.ir, decomposer) def export(self, fmt: ExportFormat | None = None) -> Any: - if fmt == ExportFormat.QUANTIFY_SCHEDULER: - from opensquirrel.passes.exporter import quantify_scheduler_exporter + match fmt: + case ExportFormat.QUANTIFY_SCHEDULER: + from opensquirrel.passes.exporter import quantify_scheduler_exporter - return quantify_scheduler_exporter.export(self) - if fmt == ExportFormat.CQASM_V1: - from opensquirrel.passes.exporter import cqasmv1_exporter + return quantify_scheduler_exporter.export(self) - return cqasmv1_exporter.export(self) - msg = "unknown exporter format" - raise ValueError(msg) + case ExportFormat.CQASM_V1: + from opensquirrel.passes.exporter import cqasmv1_exporter + + return cqasmv1_exporter.export(self) + + case _: + msg = "unknown exporter format" + raise ValueError(msg) def map(self, mapper: Mapper) -> None: """Generic qubit mapper pass. @@ -132,7 +136,7 @@ def merge(self, merger: Merger) -> None: def route(self, router: Router) -> None: """Generic router pass. It applies the given router to the circuit.""" - router.route(self.ir) + router.route(self.ir, self.qubit_register_size) def replace(self, gate: type[Gate], replacement_gates_function: Callable[..., list[Gate]]) -> None: """Manually replace occurrences of a given gate with a list of gates. diff --git a/opensquirrel/circuit_builder.py b/opensquirrel/circuit_builder.py index 503d5ff4..fddb5abc 100644 --- a/opensquirrel/circuit_builder.py +++ b/opensquirrel/circuit_builder.py @@ -8,7 +8,7 @@ from opensquirrel.circuit import Circuit from opensquirrel.default_instructions import default_instruction_set -from opensquirrel.ir import IR, AsmDeclaration, Bit, BitLike, Instruction, Qubit, QubitLike +from opensquirrel.ir import IR, AsmDeclaration, Bit, BitLike, Instruction, Measure, Qubit, QubitLike from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager _builder_dynamic_attributes = (*default_instruction_set, "asm") @@ -77,8 +77,10 @@ def _check_bit_out_of_bounds_access(self, bit: BitLike) -> None: def _check_out_of_bounds_access(self, instruction: Instruction) -> None: for qubit in instruction.get_qubit_operands(): self._check_qubit_out_of_bounds_access(qubit) - for bit in instruction.get_bit_operands(): - self._check_bit_out_of_bounds_access(bit) + + if isinstance(instruction, Measure): + for bit in instruction.get_bit_operands(): + self._check_bit_out_of_bounds_access(bit) def _add_statement(self, attr: str, *args: Any) -> Self: if attr == "asm": diff --git a/opensquirrel/circuit_matrix_calculator.py b/opensquirrel/circuit_matrix_calculator.py index 6311e2b8..9fdc2ef5 100644 --- a/opensquirrel/circuit_matrix_calculator.py +++ b/opensquirrel/circuit_matrix_calculator.py @@ -9,16 +9,7 @@ from opensquirrel.utils import get_matrix if TYPE_CHECKING: - from opensquirrel import CNOT, CR, CZ, SWAP, CRk from opensquirrel.circuit import Circuit - from opensquirrel.ir.semantics import ( - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - MatrixGate, - ) class _CircuitMatrixCalculator(IRVisitor): @@ -30,39 +21,6 @@ def visit_gate(self, gate: Gate) -> None: big_matrix = get_matrix(gate, qubit_register_size=self.qubit_register_size) self.matrix = np.asarray(big_matrix @ self.matrix, dtype=np.complex128) - def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: - self.visit_gate(gate) - - def visit_bsr_no_params(self, gate: BsrNoParams) -> None: - self.visit_gate(gate) - - def visit_bsr_full_params(self, gate: BsrFullParams) -> None: - self.visit_gate(gate) - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: - self.visit_gate(gate) - - def visit_matrix_gate(self, gate: MatrixGate) -> None: - self.visit_gate(gate) - - def visit_swap(self, gate: SWAP) -> None: - self.visit_gate(gate) - - def visit_controlled_gate(self, gate: ControlledGate) -> None: - self.visit_gate(gate) - - def visit_cnot(self, gate: CNOT) -> None: - self.visit_gate(gate) - - def visit_cz(self, gate: CZ) -> None: - self.visit_gate(gate) - - def visit_cr(self, gate: CR) -> None: - self.visit_gate(gate) - - def visit_crk(self, gate: CRk) -> None: - self.visit_gate(gate) - def get_circuit_matrix(circuit: Circuit) -> NDArray[np.complex128]: """Compute the (large) unitary matrix corresponding to the circuit. diff --git a/opensquirrel/default_instructions.py b/opensquirrel/default_instructions.py index c9234a03..b160f0d4 100644 --- a/opensquirrel/default_instructions.py +++ b/opensquirrel/default_instructions.py @@ -36,12 +36,7 @@ ) if TYPE_CHECKING: - from opensquirrel.ir import ( - Gate, - Instruction, - NonUnitary, - Unitary, - ) + from opensquirrel.ir import ControlInstruction, Gate, Instruction, NonUnitary, Unitary from opensquirrel.ir.semantics import ( BlochSphereRotation, BsrAngleParam, @@ -112,10 +107,14 @@ default_non_unitary_set: Mapping[str, type[NonUnitary]] default_non_unitary_set = { - "barrier": Barrier, "init": Init, "measure": Measure, "reset": Reset, +} + +default_control_instruction_set: Mapping[str, type[ControlInstruction]] +default_control_instruction_set = { + "barrier": Barrier, "wait": Wait, } @@ -123,6 +122,7 @@ default_instruction_set = { **default_unitary_set, **default_non_unitary_set, + **default_control_instruction_set, } default_bsr_set_without_rn: Mapping[str, type[BsrNoParams] | type[BsrAngleParam]] diff --git a/opensquirrel/exceptions.py b/opensquirrel/exceptions.py index c8affdc9..52367c4f 100644 --- a/opensquirrel/exceptions.py +++ b/opensquirrel/exceptions.py @@ -12,7 +12,7 @@ def __init__(self, gate: Any, *args: Any) -> None: Args: gate: Gate that is not supported. """ - super().__init__(f"{gate} not supported", *args) + super().__init__(f"{gate} is not supported", *args) class ExporterError(Exception): diff --git a/opensquirrel/ir/__init__.py b/opensquirrel/ir/__init__.py index f94cd225..d474f811 100644 --- a/opensquirrel/ir/__init__.py +++ b/opensquirrel/ir/__init__.py @@ -1,6 +1,7 @@ +from opensquirrel.ir.control_instruction import Barrier, ControlInstruction, Wait from opensquirrel.ir.expression import Axis, AxisLike, Bit, BitLike, Float, Int, Qubit, QubitLike, String, SupportsStr from opensquirrel.ir.ir import IR, IRNode, IRVisitor -from opensquirrel.ir.non_unitary import Barrier, Init, Measure, NonUnitary, Reset, Wait +from opensquirrel.ir.non_unitary import Init, Measure, NonUnitary, Reset from opensquirrel.ir.statement import AsmDeclaration, Instruction, Statement from opensquirrel.ir.unitary import Gate, Unitary, compare_gates @@ -12,6 +13,7 @@ "Barrier", "Bit", "BitLike", + "ControlInstruction", "Float", "Gate", "IRNode", diff --git a/opensquirrel/ir/control_instruction.py b/opensquirrel/ir/control_instruction.py new file mode 100644 index 00000000..9712f332 --- /dev/null +++ b/opensquirrel/ir/control_instruction.py @@ -0,0 +1,61 @@ +from abc import ABC, abstractmethod +from typing import Any, SupportsInt + +from opensquirrel.ir.expression import Expression, Int, Qubit, QubitLike +from opensquirrel.ir.ir import IRVisitor +from opensquirrel.ir.statement import Instruction + + +class ControlInstruction(Instruction, ABC): + def __init__(self, qubit: QubitLike, name: str) -> None: + Instruction.__init__(self, name) + self.qubit = Qubit(qubit) + + @property + @abstractmethod + def arguments(self) -> tuple[Expression, ...]: + pass + + def get_qubit_operands(self) -> list[Qubit]: + return [self.qubit] + + +class Barrier(ControlInstruction): + def __init__(self, qubit: QubitLike) -> None: + ControlInstruction.__init__(self, qubit=qubit, name="barrier") + self.qubit = Qubit(qubit) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(qubit={self.qubit})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Barrier) and self.qubit == other.qubit + + @property + def arguments(self) -> tuple[Expression, ...]: + return (self.qubit,) + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_control_instruction(self) + return visitor.visit_barrier(self) + + +class Wait(ControlInstruction): + def __init__(self, qubit: QubitLike, time: SupportsInt) -> None: + ControlInstruction.__init__(self, qubit=qubit, name="wait") + self.qubit = Qubit(qubit) + self.time = Int(time) + + def __repr__(self) -> str: + return f"{self.name}(qubit={self.qubit}, time={self.time})" + + def __eq__(self, other: object) -> bool: + return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time + + @property + def arguments(self) -> tuple[Expression, ...]: + return self.qubit, self.time + + def accept(self, visitor: IRVisitor) -> Any: + visitor.visit_control_instruction(self) + return visitor.visit_wait(self) diff --git a/opensquirrel/ir/default_gates/two_qubit_gates.py b/opensquirrel/ir/default_gates/two_qubit_gates.py index f4a599eb..585de861 100644 --- a/opensquirrel/ir/default_gates/two_qubit_gates.py +++ b/opensquirrel/ir/default_gates/two_qubit_gates.py @@ -47,7 +47,8 @@ def get_qubit_operands(self) -> list[Qubit]: return [self.qubit_0, self.qubit_1] def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_swap(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_swap(self) class CNOT(ControlledGate): @@ -57,7 +58,8 @@ def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: self.target_qubit = Qubit(target_qubit) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cnot(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_cnot(self) class CZ(ControlledGate): @@ -67,7 +69,8 @@ def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike) -> None: self.target_qubit = Qubit(target_qubit) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cz(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_cz(self) class CR(ControlledGate): @@ -78,7 +81,8 @@ def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, theta: Sup self.theta = Float(normalize_angle(theta)) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_cr(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_cr(self) class CRk(ControlledGate): @@ -94,4 +98,5 @@ def __init__(self, control_qubit: QubitLike, target_qubit: QubitLike, k: Support self.k = Int(k) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_crk(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_crk(self) diff --git a/opensquirrel/ir/ir.py b/opensquirrel/ir/ir.py index 2172a092..d637a03f 100644 --- a/opensquirrel/ir/ir.py +++ b/opensquirrel/ir/ir.py @@ -20,6 +20,7 @@ Unitary, Wait, ) + from opensquirrel.ir.control_instruction import ControlInstruction from opensquirrel.ir.default_gates import CNOT, CR, CZ, SWAP, CRk from opensquirrel.ir.non_unitary import NonUnitary from opensquirrel.ir.semantics import ( @@ -110,6 +111,9 @@ def visit_crk(self, gate: CRk) -> Any: def visit_non_unitary(self, gate: NonUnitary) -> Any: pass + def visit_control_instruction(self, instruction: ControlInstruction) -> Any: + pass + def visit_measure(self, measure: Measure) -> Any: pass @@ -139,7 +143,6 @@ def __init__(self) -> None: def __eq__(self, other: object) -> bool: if not isinstance(other, IR): return False - return self.statements == other.statements def __repr__(self) -> str: @@ -157,6 +160,12 @@ def add_non_unitary(self, non_unitary: NonUnitary) -> None: def add_statement(self, statement: Statement) -> None: self.statements.append(statement) + def reverse(self) -> IR: + ir = IR() + for statement in self.statements[::-1]: + ir.add_statement(statement) + return ir + def accept(self, visitor: IRVisitor) -> None: for statement in self.statements: statement.accept(visitor) diff --git a/opensquirrel/ir/non_unitary.py b/opensquirrel/ir/non_unitary.py index a68a1028..508ab825 100644 --- a/opensquirrel/ir/non_unitary.py +++ b/opensquirrel/ir/non_unitary.py @@ -1,10 +1,10 @@ from abc import ABC, abstractmethod -from typing import Any, SupportsInt +from typing import Any import numpy as np from opensquirrel.common import ATOL -from opensquirrel.ir.expression import Axis, AxisLike, Bit, BitLike, Expression, Int, Qubit, QubitLike +from opensquirrel.ir.expression import Axis, AxisLike, Bit, BitLike, Expression, Qubit, QubitLike from opensquirrel.ir.ir import IRVisitor from opensquirrel.ir.statement import Instruction @@ -22,8 +22,8 @@ def arguments(self) -> tuple[Expression, ...]: def get_qubit_operands(self) -> list[Qubit]: return [self.qubit] - def get_bit_operands(self) -> list[Bit]: - return [] + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_non_unitary(self) class Measure(NonUnitary): @@ -43,11 +43,11 @@ def __eq__(self, other: object) -> bool: @property def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.bit + return self.qubit, self.bit, self.axis def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_measure(self) + non_unitary_visit = super().accept(visitor) + return non_unitary_visit if non_unitary_visit is not None else visitor.visit_measure(self) def get_bit_operands(self) -> list[Bit]: return [self.bit] @@ -69,8 +69,8 @@ def arguments(self) -> tuple[Expression, ...]: return (self.qubit,) def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_init(self) + non_unitary_visit = super().accept(visitor) + return non_unitary_visit if non_unitary_visit is not None else visitor.visit_init(self) class Reset(NonUnitary): @@ -89,46 +89,5 @@ def arguments(self) -> tuple[Expression, ...]: return (self.qubit,) def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_reset(self) - - -class Barrier(NonUnitary): - def __init__(self, qubit: QubitLike) -> None: - NonUnitary.__init__(self, qubit=qubit, name="barrier") - self.qubit = Qubit(qubit) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(qubit={self.qubit})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Barrier) and self.qubit == other.qubit - - @property - def arguments(self) -> tuple[Expression, ...]: - return (self.qubit,) - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_barrier(self) - - -class Wait(NonUnitary): - def __init__(self, qubit: QubitLike, time: SupportsInt) -> None: - NonUnitary.__init__(self, qubit=qubit, name="wait") - self.qubit = Qubit(qubit) - self.time = Int(time) - - def __repr__(self) -> str: - return f"{self.name}(qubit={self.qubit}, time={self.time})" - - def __eq__(self, other: object) -> bool: - return isinstance(other, Wait) and self.qubit == other.qubit and self.time == other.time - - @property - def arguments(self) -> tuple[Expression, ...]: - return self.qubit, self.time - - def accept(self, visitor: IRVisitor) -> Any: - visitor.visit_non_unitary(self) - return visitor.visit_wait(self) + non_unitary_visit = super().accept(visitor) + return non_unitary_visit if non_unitary_visit is not None else visitor.visit_reset(self) diff --git a/opensquirrel/ir/semantics/bsr.py b/opensquirrel/ir/semantics/bsr.py index 5f24c20a..d5844cc1 100644 --- a/opensquirrel/ir/semantics/bsr.py +++ b/opensquirrel/ir/semantics/bsr.py @@ -5,7 +5,7 @@ import numpy as np from opensquirrel.common import ATOL, normalize_angle, repr_round -from opensquirrel.ir.expression import Axis, AxisLike, Bit, Float, Qubit, QubitLike +from opensquirrel.ir.expression import Axis, AxisLike, Float, Qubit, QubitLike from opensquirrel.ir.unitary import Gate if TYPE_CHECKING: @@ -61,14 +61,12 @@ def arguments(self) -> tuple[Expression, ...]: return (self.qubit,) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bloch_sphere_rotation(self) + visit_gate = visitor.visit_gate(self) + return visit_gate if visit_gate is not None else visitor.visit_bloch_sphere_rotation(self) def get_qubit_operands(self) -> list[Qubit]: return [self.qubit] - def get_bit_operands(self) -> list[Bit]: - return [] - def is_identity(self) -> bool: # Angle and phase are already normalized. return abs(self.angle) < ATOL and abs(self.phase) < ATOL @@ -111,7 +109,8 @@ def arguments(self) -> tuple[Expression, ...]: return (self.qubit,) def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_no_params(self) + visit_bsr = super().accept(visitor) + return visit_bsr if visit_bsr is not None else visitor.visit_bsr_no_params(self) class BsrFullParams(BlochSphereRotation): @@ -128,7 +127,8 @@ def arguments(self) -> tuple[Expression, ...]: return self.qubit, self.nx, self.ny, self.nz, self.theta, self.phi def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_full_params(self) + visit_bsr = super().accept(visitor) + return visit_bsr if visit_bsr is not None else visitor.visit_bsr_full_params(self) class BsrAngleParam(BlochSphereRotation): @@ -148,4 +148,5 @@ def arguments(self) -> tuple[Expression, ...]: return self.qubit, self.theta def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_bsr_angle_param(self) + visit_bsr = super().accept(visitor) + return visit_bsr if visit_bsr is not None else visitor.visit_bsr_angle_param(self) diff --git a/opensquirrel/ir/semantics/canonical_gate.py b/opensquirrel/ir/semantics/canonical_gate.py index 00a1a505..9fdc9ea6 100644 --- a/opensquirrel/ir/semantics/canonical_gate.py +++ b/opensquirrel/ir/semantics/canonical_gate.py @@ -5,7 +5,7 @@ from opensquirrel.common import repr_round from opensquirrel.ir import AxisLike, IRVisitor, Qubit, QubitLike -from opensquirrel.ir.expression import BaseAxis, Bit, Expression +from opensquirrel.ir.expression import BaseAxis, Expression from opensquirrel.ir.unitary import Gate @@ -60,14 +60,15 @@ def restrict_to_weyl_chamber(axis: NDArray[np.float64]) -> NDArray[np.float64]: axis = (axis + 1) % 2 - 1 axis = np.sort(axis)[::-1] - n = sum(t > 1 / 2 for t in axis) - if n == 1: - axis[0] = 1 - axis[0] - if n == 2: - axis[0], axis[2] = axis[2], axis[0] - axis[1:] = 1 - axis[1:] - if n == 3: - axis = 1 - axis + match sum(t > 1 / 2 for t in axis): + case 1: + axis[0] = 1 - axis[0] + case 2: + axis[0], axis[2] = axis[2], axis[0] + axis[1:] = 1 - axis[1:] + case 3: + axis = 1 - axis + return np.sort(axis)[::-1] def accept(self, visitor: IRVisitor) -> Any: @@ -98,8 +99,5 @@ def arguments(self) -> tuple[Expression, ...]: def get_qubit_operands(self) -> list[Qubit]: return [self.qubit_0, self.qubit_1] - def get_bit_operands(self) -> list[Bit]: - return [] - def is_identity(self) -> bool: return self.axis == CanonicalAxis(0, 0, 0) diff --git a/opensquirrel/ir/semantics/controlled_gate.py b/opensquirrel/ir/semantics/controlled_gate.py index ddf7407a..4a567e3a 100644 --- a/opensquirrel/ir/semantics/controlled_gate.py +++ b/opensquirrel/ir/semantics/controlled_gate.py @@ -1,6 +1,6 @@ from typing import Any -from opensquirrel.ir import Bit, IRVisitor, Qubit, QubitLike +from opensquirrel.ir import IRVisitor, Qubit, QubitLike from opensquirrel.ir.expression import Expression from opensquirrel.ir.semantics import BlochSphereRotation from opensquirrel.ir.unitary import Gate @@ -12,8 +12,8 @@ def __init__( ) -> None: Gate.__init__(self, name) self.control_qubit = Qubit(control_qubit) - self.target_qubit = Qubit(target_gate.qubit) self.target_gate = target_gate + self.target_qubit = Qubit(target_gate.qubit) if self._check_repeated_qubit_operands([self.control_qubit, self.target_qubit]): msg = "control and target qubit cannot be the same" @@ -23,7 +23,8 @@ def __repr__(self) -> str: return f"{self.name}(control_qubit={self.control_qubit}, target_gate={self.target_gate})" def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_controlled_gate(self) + visit_parent = super().accept(visitor) + return visit_parent if visit_parent is not None else visitor.visit_controlled_gate(self) @property def arguments(self) -> tuple[Expression, ...]: @@ -32,8 +33,5 @@ def arguments(self) -> tuple[Expression, ...]: def get_qubit_operands(self) -> list[Qubit]: return [self.control_qubit, self.target_qubit] - def get_bit_operands(self) -> list[Bit]: - return [] - def is_identity(self) -> bool: return self.target_gate.is_identity() diff --git a/opensquirrel/ir/semantics/matrix_gate.py b/opensquirrel/ir/semantics/matrix_gate.py index ea627850..85894d14 100644 --- a/opensquirrel/ir/semantics/matrix_gate.py +++ b/opensquirrel/ir/semantics/matrix_gate.py @@ -7,7 +7,7 @@ from numpy.typing import ArrayLike, DTypeLike from opensquirrel.common import ATOL, repr_round -from opensquirrel.ir import Bit, Qubit, QubitLike +from opensquirrel.ir import Qubit, QubitLike from opensquirrel.ir.unitary import Gate if TYPE_CHECKING: @@ -50,13 +50,11 @@ def __repr__(self) -> str: return f"{self.name}(qubits={self.operands}, matrix={repr_round(self.matrix)})" def accept(self, visitor: IRVisitor) -> Any: - return visitor.visit_matrix_gate(self) + parent_visit = super().accept(visitor) + return parent_visit if parent_visit is not None else visitor.visit_matrix_gate(self) def get_qubit_operands(self) -> list[Qubit]: return self.operands - def get_bit_operands(self) -> list[Bit]: - return [] - def is_identity(self) -> bool: return np.allclose(self.matrix, np.eye(2 ** len(self.operands)), atol=ATOL) diff --git a/opensquirrel/ir/statement.py b/opensquirrel/ir/statement.py index a0340257..ca2f4987 100644 --- a/opensquirrel/ir/statement.py +++ b/opensquirrel/ir/statement.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod from typing import Any -from opensquirrel.ir.expression import Bit, Expression, Qubit, String, SupportsStr +from opensquirrel.ir.expression import Expression, Qubit, String, SupportsStr from opensquirrel.ir.ir import IRNode, IRVisitor @@ -44,6 +44,5 @@ def arguments(self) -> tuple[Expression, ...]: def get_qubit_operands(self) -> list[Qubit]: pass - @abstractmethod - def get_bit_operands(self) -> list[Bit]: - pass + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_instruction(self) diff --git a/opensquirrel/ir/unitary.py b/opensquirrel/ir/unitary.py index c873379c..d861e645 100644 --- a/opensquirrel/ir/unitary.py +++ b/opensquirrel/ir/unitary.py @@ -1,8 +1,10 @@ from abc import ABC, abstractmethod from collections.abc import Sequence +from typing import Any from opensquirrel.common import are_matrices_equivalent_up_to_global_phase -from opensquirrel.ir.expression import Bit, Expression, Qubit +from opensquirrel.ir import IRVisitor +from opensquirrel.ir.expression import Expression, Qubit from opensquirrel.ir.statement import Instruction @@ -15,11 +17,6 @@ class Gate(Unitary, ABC): def __init__(self, name: str) -> None: Unitary.__init__(self, name) - def __eq__(self, other: object) -> bool: - if not isinstance(other, Gate): - return False - return compare_gates(self, other) - @property @abstractmethod def arguments(self) -> tuple[Expression, ...]: @@ -33,14 +30,18 @@ def _check_repeated_qubit_operands(qubits: Sequence[Qubit]) -> bool: def get_qubit_operands(self) -> list[Qubit]: pass - @abstractmethod - def get_bit_operands(self) -> list[Bit]: - pass - @abstractmethod def is_identity(self) -> bool: pass + def accept(self, visitor: IRVisitor) -> Any: + return visitor.visit_gate(self) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Gate): + return False + return compare_gates(self, other) + def compare_gates(g1: Gate, g2: Gate) -> bool: union_mapping = [q.index for q in list(set(g1.get_qubit_operands()) | set(g2.get_qubit_operands()))] diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py index 84c6a4e9..2f7ba129 100644 --- a/opensquirrel/passes/exporter/cqasmv1_exporter.py +++ b/opensquirrel/passes/exporter/cqasmv1_exporter.py @@ -7,7 +7,6 @@ from opensquirrel.ir import ( Barrier, Float, - Gate, Init, Int, IRVisitor, @@ -16,6 +15,11 @@ Reset, Wait, ) +from opensquirrel.ir.semantics import ( + BlochSphereRotation, + ControlledGate, + MatrixGate, +) if TYPE_CHECKING: from opensquirrel import ( @@ -27,12 +31,8 @@ ) from opensquirrel.circuit import Circuit from opensquirrel.ir.semantics import ( - BlochSphereRotation, BsrAngleParam, - BsrFullParams, BsrNoParams, - ControlledGate, - MatrixGate, ) from opensquirrel.register_manager import RegisterManager @@ -62,35 +62,35 @@ def visit_float(self, f: SupportsFloat) -> str: f = Float(f) return f"{f.value:.{self.FLOAT_PRECISION}}" - def visit_gate(self, gate: Gate) -> None: + def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: + if isinstance(gate, BlochSphereRotation) and type(gate) is not BlochSphereRotation: + return raise UnsupportedGateError(gate) - def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: + def visit_matrix_gate(self, gate: MatrixGate) -> None: + if isinstance(gate, MatrixGate) and type(gate) is not MatrixGate: + return + raise UnsupportedGateError(gate) + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + if isinstance(gate, ControlledGate) and type(gate) is not ControlledGate: + return raise UnsupportedGateError(gate) def visit_bsr_no_params(self, gate: BsrNoParams) -> None: qubit_operand = gate.qubit.accept(self) self.output += f"{gate.name.lower()} {qubit_operand}\n" - def visit_bsr_full_params(self, gate: BsrFullParams) -> None: - raise UnsupportedGateError(gate) - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: theta_argument = gate.theta.accept(self) qubit_operand = gate.qubit.accept(self) self.output += f"{gate.name.lower()} {qubit_operand}, {theta_argument}\n" - def visit_matrix_gate(self, gate: MatrixGate) -> None: - raise UnsupportedGateError(gate) - def visit_swap(self, gate: SWAP) -> Any: qubit_operand_0 = gate.qubit_0.accept(self) qubit_operand_1 = gate.qubit_1.accept(self) self.output += f"swap {qubit_operand_0}, {qubit_operand_1}\n" - def visit_controlled_gate(self, gate: ControlledGate) -> None: - raise UnsupportedGateError(gate) - def visit_cnot(self, gate: CNOT) -> None: control_qubit_operand = gate.control_qubit.accept(self) target_qubit_operand = gate.target_qubit.accept(self) diff --git a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py index 64b958e0..1674d158 100644 --- a/opensquirrel/passes/exporter/quantify_scheduler_exporter.py +++ b/opensquirrel/passes/exporter/quantify_scheduler_exporter.py @@ -1,51 +1,147 @@ from __future__ import annotations import math -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, cast +from uuid import uuid4 -from opensquirrel.circuit import Circuit +from opensquirrel import CNOT, CR, CZ, CRk, Init, Measure, Reset, Wait from opensquirrel.common import ATOL from opensquirrel.exceptions import ExporterError, UnsupportedGateError from opensquirrel.ir import ( + ControlInstruction, + Gate, IRVisitor, - Measure, - Reset, -) -from opensquirrel.ir.semantics import ( - BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, - ControlledGate, - MatrixGate, + NonUnitary, ) try: import quantify_scheduler + from quantify_scheduler.schedules import Schedulable # noqa: TC002 except ModuleNotFoundError: pass if TYPE_CHECKING: - from opensquirrel import ( - CNOT, - CR, - CZ, - SWAP, - CRk, - ) - from opensquirrel.circuit import Circuit + from opensquirrel import Circuit from opensquirrel.ir import Qubit + from opensquirrel.ir.semantics import ( + BlochSphereRotation, + MatrixGate, + ) from opensquirrel.register_manager import RegisterManager -# Radian to degree conversion outcome precision -FIXED_POINT_DEG_PRECISION = 5 +FIXED_POINT_DEG_PRECISION = 5 # Radian to degree conversion outcome precision. +CYCLE_TIME = 20e-9 # Operation cycle time (set at 20ns). +OPERATION_CYCLES = 1 # Amount of cycles an operation takes. + + +class OperationRecord: + def __init__(self, qubit_register_size: int, schedulables: list[Schedulable]) -> None: + self._schedulables = schedulables + self._cycles: list[int] = [0] * qubit_register_size + self._ref_index: list[int] = list(range(qubit_register_size)) + self._ref_schedulables: list[tuple[Schedulable | None, int]] = list( + zip([None] * qubit_register_size, [0] * qubit_register_size, strict=False) + ) + self._barrier_record: list[int] = [] + self._schedulable_timing_constraints: dict[str, dict[str, Any]] = {} + + @property + def schedulable_timing_constraints(self) -> dict[str, dict[str, Any]]: + return self._schedulable_timing_constraints + + def add_qubit_index_to_barrier_record(self, qubit_index: int) -> None: + if qubit_index not in self._barrier_record: + self._barrier_record.append(qubit_index) + + def process_wait(self, qubit_index: int, cycles: int) -> None: + self._process_barriers() + self._cycles[qubit_index] += cycles + + def set_schedulable_timing_constraints(self, qubit_indices: list[int]) -> None: + self._process_barriers() + schedulable: Schedulable = self._schedulables.pop() + pertinent_qubit_index, ref_schedulable, ref_cycle = self._get_reference(qubit_indices=qubit_indices) + + operation_cycles = OPERATION_CYCLES if ref_schedulable else 0 + cycle = self._cycles[pertinent_qubit_index] + operation_cycles + waiting_time = -1.0 * ((cycle - operation_cycles) - ref_cycle) * CYCLE_TIME + self._set_timing_constraints(schedulable, ref_schedulable, waiting_time) + + self._set_reference(qubit_indices, schedulable, cycle) + + def _process_barriers(self) -> None: + if self._barrier_record: + pertinent_qubit_index, ref_schedulable, ref_cycle = self._get_reference(qubit_indices=self._barrier_record) + temp_cycles = self._cycles.copy() + for qubit_index in self._barrier_record: + temp_cycles[qubit_index] = self._cycles[pertinent_qubit_index] + self._ref_schedulables[qubit_index] = (ref_schedulable, ref_cycle) + self._cycles = temp_cycles + self._barrier_record = [] + + def _get_reference(self, qubit_indices: list[int]) -> tuple[int, Schedulable, int]: + schedulable_counts = [self._cycles[qubit_index] for qubit_index in qubit_indices] + pertinent_qubit_index = qubit_indices[self._get_index_of_max_value(schedulable_counts)] + ref_schedulable, ref_counter_value = self._ref_schedulables[pertinent_qubit_index] + return pertinent_qubit_index, ref_schedulable, ref_counter_value + + def _set_timing_constraints( + self, schedulable: Schedulable, ref_schedulable: Schedulable, waiting_time: float + ) -> None: + timing_constraints: dict[str, str | float | None] = {} + if not ref_schedulable: + timing_constraints["ref_schedulable"] = None + timing_constraints["ref_pt"] = "end" + timing_constraints["ref_pt_new"] = "end" + else: + timing_constraints["ref_schedulable"] = ref_schedulable["name"] + timing_constraints["ref_pt"] = "start" + timing_constraints["ref_pt_new"] = "end" + timing_constraints["rel_time"] = waiting_time + self._schedulable_timing_constraints[schedulable["name"]] = timing_constraints + + def _set_reference(self, qubit_indices: list[int], new_ref_schedulable: Schedulable, new_ref_cycle: int) -> None: + temp_cycles = self._cycles.copy() + for qubit_index in qubit_indices: + temp_cycles[qubit_index] = new_ref_cycle + self._ref_schedulables[qubit_index] = (new_ref_schedulable, new_ref_cycle) + self._cycles = temp_cycles + + @staticmethod + def _get_index_of_max_value(input_list: list[int]) -> int: + return max(range(len(input_list)), key=input_list.__getitem__) + + +class _Scheduler(IRVisitor): + def __init__(self, register_manager: RegisterManager, schedulables: list[Schedulable]) -> None: + self._qubit_register_size = register_manager.get_qubit_register_size() + self._operation_record = OperationRecord(self._qubit_register_size, schedulables) + + @property + def operation_record(self) -> OperationRecord: + return self._operation_record + + def visit_gate(self, gate: Gate) -> None: + qubit_indices = [qubit.index for qubit in gate.get_qubit_operands()] + self._operation_record.set_schedulable_timing_constraints(qubit_indices) + + def visit_non_unitary(self, non_unitary: NonUnitary) -> None: + qubit_indices = [qubit.index for qubit in non_unitary.get_qubit_operands()] + self._operation_record.set_schedulable_timing_constraints(qubit_indices) + + def visit_control_instruction(self, control_instruction: ControlInstruction) -> None: + if isinstance(control_instruction, Wait): + self._operation_record.process_wait(control_instruction.qubit.index, control_instruction.time.value) + else: + self._operation_record.add_qubit_index_to_barrier_record(control_instruction.qubit.index) -class _ScheduleCreator(IRVisitor): - def _get_qubit_string(self, qubit: Qubit) -> str: - return f"{self.qubit_register_name}[{qubit.index}]" - def __init__(self, register_manager: RegisterManager) -> None: +class _ScheduleCreator(IRVisitor): + def __init__( + self, + register_manager: RegisterManager, + ) -> None: self.register_manager = register_manager self.qubit_register_size = register_manager.get_qubit_register_size() self.qubit_register_name = register_manager.get_qubit_register_name() @@ -59,54 +155,50 @@ def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: # there exists an ambiguity with how Quantify-scheduler will store an angle of 180 degrees. # Depending on the system the angle may be stored as either 180 or -180 degrees. # This ambiguity has no physical consequences, but may cause the exporter test fail. + if ( + abs(gate.axis[0] - 1 / math.sqrt(2)) < ATOL + and abs(gate.axis[1]) < ATOL + and abs(gate.axis[2] - 1 / math.sqrt(2)) < ATOL + ): + # Hadamard gate. + self.schedule.add( + quantify_scheduler.operations.gate_library.H(self._get_qubit_string(gate.qubit)), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), + ) + return if abs(gate.axis[2]) < ATOL: # Rxy rotation. theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) phi: float = round(math.degrees(math.atan2(gate.axis[1], gate.axis[0])), FIXED_POINT_DEG_PRECISION) + self.schedule.add( quantify_scheduler.operations.gate_library.Rxy( theta=theta, phi=phi, qubit=self._get_qubit_string(gate.qubit) - ) + ), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), ) return - if abs(gate.axis[0]) < ATOL and abs(gate.axis[1]) < ATOL: # Rz rotation. theta = round(math.degrees(gate.angle), FIXED_POINT_DEG_PRECISION) self.schedule.add( - quantify_scheduler.operations.gate_library.Rz(theta=theta, qubit=self._get_qubit_string(gate.qubit)) + quantify_scheduler.operations.gate_library.Rz(theta=theta, qubit=self._get_qubit_string(gate.qubit)), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), ) return - raise UnsupportedGateError(gate) - def visit_bsr_no_params(self, gate: BsrNoParams) -> None: - self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_full_params(self, gate: BsrFullParams) -> None: - self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: - self.visit_bloch_sphere_rotation(gate) - def visit_matrix_gate(self, gate: MatrixGate) -> None: raise UnsupportedGateError(gate) - def visit_swap(self, gate: SWAP) -> None: - raise UnsupportedGateError(gate) - - def visit_controlled_gate(self, gate: ControlledGate) -> None: - if not isinstance(gate.target_gate, BlochSphereRotation): - raise UnsupportedGateError(gate) - def visit_cnot(self, gate: CNOT) -> None: self.schedule.add( quantify_scheduler.operations.gate_library.CNOT( qC=self._get_qubit_string(gate.control_qubit), qT=self._get_qubit_string(gate.target_qubit), ), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), ) - return def visit_cz(self, gate: CZ) -> None: self.schedule.add( @@ -114,8 +206,8 @@ def visit_cz(self, gate: CZ) -> None: qC=self._get_qubit_string(gate.control_qubit), qT=self._get_qubit_string(gate.target_qubit), ), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), ) - return def visit_cr(self, gate: CR) -> None: raise UnsupportedGateError(gate) @@ -134,13 +226,26 @@ def visit_measure(self, gate: Measure) -> None: acq_channel=qubit_index, acq_index=acq_index, acq_protocol="ThresholdedAcquisition", - ) + ), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), ) self.acq_index_record[qubit_index] += 1 - return - def visit_reset(self, gate: Reset) -> Any: - self.schedule.add(quantify_scheduler.operations.gate_library.Reset(self._get_qubit_string(gate.qubit))) + def visit_init(self, gate: Init) -> None: + self.visit_reset(cast("Reset", gate)) + + def visit_reset(self, gate: Reset) -> None: + self.schedule.add( + quantify_scheduler.operations.gate_library.Reset(self._get_qubit_string(gate.qubit)), + label=self._get_operation_label(gate.name, gate.get_qubit_operands()), + ) + + def _get_qubit_string(self, qubit: Qubit) -> str: + return f"{self.qubit_register_name}[{qubit.index}]" + + def _get_operation_label(self, name: str, qubits: list[Qubit]) -> str: + qubit_operands = ", ".join([self._get_qubit_string(qubit) for qubit in qubits]) + return f"{name} {qubit_operands} | " + str(uuid4()) def export(circuit: Circuit) -> tuple[quantify_scheduler.Schedule, list[tuple[Any, Any]]]: @@ -154,13 +259,27 @@ def __getattr__(self, attr_name: Any) -> None: global quantify_scheduler quantify_scheduler = QuantifySchedulerNotInstalled() - schedule_creator = _ScheduleCreator(circuit.register_manager) try: + # Create circuit, with measure data + schedule_creator = _ScheduleCreator(circuit.register_manager) circuit.ir.accept(schedule_creator) + + # Obtain ALAP reference timing for schedulables + schedulables = list(schedule_creator.schedule.schedulables.values()) + if schedulables: + scheduler = _Scheduler(circuit.register_manager, schedulables) + circuit.ir.reverse().accept(scheduler) + + # Update timing constraints of schedulables + for name, schedulable in schedule_creator.schedule.schedulables.items(): + schedulable["timing_constraints"] = [scheduler.operation_record.schedulable_timing_constraints[name]] + except UnsupportedGateError as e: msg = ( f"cannot export circuit: {e}. " - "Decompose all gates to the Quantify-scheduler gate set first (rxy, rz, cnot, cz)" + "Decompose all gates to the gate set supported by quantify-scheduler first, i.e., " + "(init, reset, H, Rx, Ry, Rz, CNOT, CZ, measure)" ) raise ExporterError(msg) from e + return schedule_creator.schedule, schedule_creator.bit_string_mapping diff --git a/opensquirrel/passes/mapper/mip_mapper.py b/opensquirrel/passes/mapper/mip_mapper.py index 2774c9f8..511603a2 100644 --- a/opensquirrel/passes/mapper/mip_mapper.py +++ b/opensquirrel/passes/mapper/mip_mapper.py @@ -13,11 +13,13 @@ DISTANCE_UL = 999999 +Connectivity = dict[str, list[int]] + class MIPMapper(Mapper): def __init__( self, - connectivity: dict[str, list[int]], + connectivity: Connectivity, timeout: float | None = None, **kwargs: Any, ) -> None: diff --git a/opensquirrel/passes/mapper/qubit_remapper.py b/opensquirrel/passes/mapper/qubit_remapper.py index 062cbb9d..0eafa767 100644 --- a/opensquirrel/passes/mapper/qubit_remapper.py +++ b/opensquirrel/passes/mapper/qubit_remapper.py @@ -1,26 +1,14 @@ -from opensquirrel import ( - CNOT, - CR, - CZ, - SWAP, - CRk, -) from opensquirrel.circuit import Circuit from opensquirrel.ir import ( IR, Barrier, - Init, IRVisitor, - Measure, + NonUnitary, Qubit, - Reset, Wait, ) from opensquirrel.ir.semantics import ( BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, ControlledGate, MatrixGate, ) @@ -50,17 +38,9 @@ def visit_qubit(self, qubit: Qubit) -> Qubit: qubit.index = self.mapping[qubit.index] return qubit - def visit_measure(self, measure: Measure) -> Measure: - measure.qubit.accept(self) - return measure - - def visit_init(self, init: Init) -> Init: - init.qubit.accept(self) - return init - - def visit_reset(self, reset: Reset) -> Reset: - reset.qubit.accept(self) - return reset + def visit_non_unitary(self, non_unitary: NonUnitary) -> NonUnitary: + non_unitary.qubit.accept(self) + return non_unitary def visit_barrier(self, barrier: Barrier) -> Barrier: barrier.qubit.accept(self) @@ -74,41 +54,17 @@ def visit_bloch_sphere_rotation(self, bloch_sphere_rotation: BlochSphereRotation bloch_sphere_rotation.qubit.accept(self) return bloch_sphere_rotation - def visit_bsr_no_params(self, gate: BsrNoParams) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_full_params(self, gate: BsrFullParams) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - def visit_matrix_gate(self, matrix_gate: MatrixGate) -> MatrixGate: for operand in matrix_gate.operands: operand.accept(self) return matrix_gate - def visit_swap(self, gate: SWAP) -> MatrixGate: - return self.visit_matrix_gate(gate) - def visit_controlled_gate(self, controlled_gate: ControlledGate) -> ControlledGate: controlled_gate.control_qubit.accept(self) + controlled_gate.target_gate.accept(self) controlled_gate.target_qubit.accept(self) - self.visit_bloch_sphere_rotation(controlled_gate.target_gate) return controlled_gate - def visit_cnot(self, gate: CNOT) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_cz(self, gate: CZ) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_cr(self, gate: CR) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_crk(self, gate: CRk) -> ControlledGate: - return self.visit_controlled_gate(gate) - def get_remapped_ir(circuit: Circuit, mapping: Mapping) -> IR: if len(mapping) > circuit.qubit_register_size: diff --git a/opensquirrel/passes/mapper/utils.py b/opensquirrel/passes/mapper/utils.py index 7fb7952a..376b865a 100644 --- a/opensquirrel/passes/mapper/utils.py +++ b/opensquirrel/passes/mapper/utils.py @@ -9,14 +9,18 @@ def make_interaction_graph(ir: IR) -> nx.Graph: for gate in gates: target_qubits = gate.get_qubit_operands() - if len(target_qubits) == 1: - continue - if len(target_qubits) > 2: - msg = ( - f"the gate {gate} acts on more than 2 qubits. " - "The gate must be decomposed before an interaction graph can be made", - ) - raise ValueError(msg) - interaction_graph.add_edge(*target_qubits) + match len(target_qubits): + case 1: + continue + + case 2: + interaction_graph.add_edge(*target_qubits) + + case _: + msg = ( + f"the gate {gate} acts on more than 2 qubits. " + "The gate must be decomposed before an interaction graph can be made", + ) + raise ValueError(msg) return interaction_graph diff --git a/opensquirrel/passes/router/astar_router.py b/opensquirrel/passes/router/astar_router.py index 6df5e8ad..49fbeab2 100644 --- a/opensquirrel/passes/router/astar_router.py +++ b/opensquirrel/passes/router/astar_router.py @@ -1,74 +1,35 @@ -from __future__ import annotations - -import itertools import math from typing import Any import networkx as nx -from opensquirrel import SWAP -from opensquirrel.exceptions import NoRoutingPathError -from opensquirrel.ir import IR, Gate, Instruction -from opensquirrel.passes.router.general_router import Router +from opensquirrel.ir import IR +from opensquirrel.passes.router.common import PathFinderType, ProcessSwaps +from opensquirrel.passes.router.general_router import Connectivity, Router from opensquirrel.passes.router.heuristics import DistanceMetric, calculate_distance class AStarRouter(Router): def __init__( - self, connectivity: dict[str, list[int]], distance_metric: DistanceMetric | None = None, **kwargs: Any + self, connectivity: Connectivity, distance_metric: DistanceMetric | None = None, **kwargs: Any ) -> None: - super().__init__(**kwargs) - self.connectivity = connectivity - self.distance_metric = distance_metric + super().__init__(connectivity, **kwargs) + self._distance_metric = distance_metric - def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: - for start_qubit_index, end_qubit_index in itertools.pairwise(shortest_path[:-1]): - ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) - # Update subsequent statements to reflect the swap - for statement in ir.statements[statement_index + 1 :]: - if isinstance(statement, Instruction): - for qubit in statement.get_qubit_operands(): - if qubit.index == start_qubit_index: - qubit.index = end_qubit_index - elif qubit.index == end_qubit_index: - qubit.index = start_qubit_index - statement_index += 1 + def route(self, ir: IR, qubit_register_size: int) -> IR: + pathfinder: PathFinderType = self._astar_pathfinder + return ProcessSwaps.process_swaps(ir, qubit_register_size, self._connectivity, pathfinder) - def route(self, ir: IR) -> IR: - """ - Routes the circuit by inserting SWAP gates, with A*, to make it executable given the hardware connectivity. - Args: - ir: The intermediate representation of the circuit. - Returns: - The intermediate representation of the routed circuit (including the additional SWAP gates). - """ - graph_data = {int(start_node): end_nodes for start_node, end_nodes in self.connectivity.items()} - graph = nx.Graph(graph_data) + def _astar_pathfinder(self, graph: nx.Graph, source: int, target: int) -> Any: num_available_qubits = max(graph.nodes) + 1 num_columns = math.ceil(math.sqrt(num_available_qubits)) - statement_index = 0 - while statement_index < len(ir.statements): - statement = ir.statements[statement_index] - if isinstance(statement, Gate) and len(statement.get_qubit_operands()) == 2: - q0, q1 = statement.get_qubit_operands() - if not graph.has_edge(q0.index, q1.index): - try: - if self.distance_metric is None: - shortest_path = nx.astar_path(graph, source=q0.index, target=q1.index) - else: - shortest_path = nx.astar_path( - graph, - source=q0.index, - target=q1.index, - heuristic=lambda u, v: calculate_distance(u, v, num_columns, self.distance_metric), - ) - # -2 because we skip inserting a swap for the last edge in the path: - # len(path) - 1 edges in total - num_swaps_inserted = len(shortest_path) - 2 - self._insert_and_propagate_swaps(ir, statement_index, shortest_path) - statement_index += num_swaps_inserted - except nx.NetworkXNoPath as e: - msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" - raise NoRoutingPathError(msg) from e - statement_index += 1 - return ir + return nx.astar_path( + graph, + source=source, + target=target, + heuristic=lambda q0_index, q1_index: calculate_distance( + q0_index, q1_index, num_columns, self._distance_metric + ) + if self._distance_metric + else None, + ) diff --git a/opensquirrel/passes/router/common.py b/opensquirrel/passes/router/common.py new file mode 100644 index 00000000..8faffb7d --- /dev/null +++ b/opensquirrel/passes/router/common.py @@ -0,0 +1,158 @@ +from __future__ import annotations + +import itertools +from collections.abc import Callable +from typing import TYPE_CHECKING + +import networkx as nx + +from opensquirrel import SWAP +from opensquirrel.exceptions import NoRoutingPathError +from opensquirrel.ir import IR, Gate, Instruction, Statement + +if TYPE_CHECKING: + from opensquirrel.passes.router.general_router import Connectivity + +PathFinderType = Callable[[nx.Graph, int, int], list[int]] + + +def get_graph(connectivity: Connectivity) -> nx.Graph: + """Creates a networkx graph from the given connectivity. + + Args: + connectivity (dict[str, list[int]]): Connectivity mapping of physical qubits. + + Returns: + nx.Graph: Networkx graph from the given connectivity. + + """ + return nx.Graph({int(start): ends for start, ends in connectivity.items()}) + + +def get_identity_mapping(qubit_register_size: int) -> dict[int, int]: + """Creates an identity mapping. + + Args: + qubit_register_size (int): The size of the qubit register. + + Returns: + dict[int, int]: An identity mapping. + + """ + return {qubit_index: qubit_index for qubit_index in range(qubit_register_size)} + + +class ProcessSwaps: + @staticmethod + def process_swaps( + ir: IR, + qubit_register_size: int, + connectivity: Connectivity, + pathfinder: PathFinderType, + ) -> IR: + """Processes SWAPs as determined by the pathfinder algorithm. + + Args: + ir (IR): The IR of the circuit. + qubit_register_size (int): The size of the qubit register. + connectivity (dict[str, list[int]]): Connectivity mapping of physical qubits. + pathfinder (PathFinderType): The pathfinder algorithm. + Returns: + IR: IR with the SWAPs processed through. + + """ + graph = get_graph(connectivity) + initial_mapping = get_identity_mapping(qubit_register_size) + planned_swaps = ProcessSwaps._plan_swaps(ir, graph, initial_mapping, pathfinder) + ir.statements = ProcessSwaps._apply_swaps(ir, planned_swaps, initial_mapping) + return ir + + @staticmethod + def _plan_swaps( + ir: IR, + graph: nx.Graph, + initial_mapping: dict[int, int], + pathfinder: PathFinderType, + ) -> dict[int, SWAP]: + """Traverses the IR and determines where SWAPs need to be placed. + + Args: + ir (IR): The IR of the circuit. + graph (nx.Graph): The NetworkX graph representation of the qubit connectivity. + initial_mapping (dict[int, int]): The initial mapping of the qubits. + pathfinder (Callable[[nx.Graph, int, int], list[int]]): + Returns: + dict[int, SWAP]: An mapping from the insert position to SWAP instruction. + + """ + planned_swaps: dict[int, SWAP] = {} + temp_mapping = initial_mapping.copy() + + for statement_index, statement in enumerate(ir.statements): + if isinstance(statement, Gate) and len(statement.get_qubit_operands()) == 2: + q0, q1 = statement.get_qubit_operands() + physical_q0_index = temp_mapping[q0.index] + physical_q1_index = temp_mapping[q1.index] + + if not graph.has_edge(physical_q0_index, physical_q1_index): + try: + path = pathfinder(graph, physical_q0_index, physical_q1_index) + except nx.NetworkXNoPath as e: + msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" + raise NoRoutingPathError(msg) from e + + base_offset = len(planned_swaps) + + # Final edge of the path is skipped as those qubits are already neighbors. + swaps_for_path = itertools.pairwise(path[:-1]) + for swap_count, swap_pair in enumerate(swaps_for_path): + insert_position = statement_index + base_offset + swap_count + planned_swaps[insert_position] = SWAP(*swap_pair) + ProcessSwaps._update_mapping_for_swap(temp_mapping, swap_pair) + return planned_swaps + + @staticmethod + def _apply_swaps(ir: IR, planned_swaps: dict[int, SWAP], initial_mapping: dict[int, int]) -> list[Statement]: + """Insert planned SWAPs and update qubit indices. + + Args: + ir (IR): The IR of the circuit. + planned_swaps (dict[int, SWAP]): The mapping from the insert position to SWAP instruction. + initial_mapping (dict[int, int]): The initial mapping of the qubits. + Returns: + list[Statement]: An updated list of IR Statements. + + """ + new_ir_statements: list[Statement] = [] + new_mapping = initial_mapping.copy() + + for statement in ir.statements: + while len(new_ir_statements) in planned_swaps: + swap_gate = planned_swaps[len(new_ir_statements)] + swap_qubit_indices = tuple(qubit.index for qubit in swap_gate.get_qubit_operands()) + ProcessSwaps._update_mapping_for_swap(new_mapping, swap_qubit_indices) + new_ir_statements.append(swap_gate) + + if isinstance(statement, Instruction): + for qubit in statement.get_qubit_operands(): + qubit.index = new_mapping[qubit.index] + + new_ir_statements.append(statement) + return new_ir_statements + + @staticmethod + def _update_mapping_for_swap(mapping: dict[int, int], swap_qubit_indices: tuple[int, ...]) -> None: + """Updates the mapping for the given swap qubit indices. + + Args: + mapping (dict[int, int]): The mapping of the qubit indices (logical qubit index: physical qubit index). + swap_qubit_indices (tuple[int, int]): The swap qubit indices. + + """ + index_q0, index_q1 = swap_qubit_indices + reverse_mapping = {value: key for key, value in mapping.items()} + logical_index_q0, logical_index_q1 = reverse_mapping.get(index_q0), reverse_mapping.get(index_q1) + if logical_index_q0 is not None: + mapping[logical_index_q0] = index_q1 + if logical_index_q1 is not None: + mapping[logical_index_q1] = index_q0 diff --git a/opensquirrel/passes/router/general_router.py b/opensquirrel/passes/router/general_router.py index 80c3ff7e..dc1ece21 100644 --- a/opensquirrel/passes/router/general_router.py +++ b/opensquirrel/passes/router/general_router.py @@ -3,11 +3,14 @@ from opensquirrel.ir import IR +Connectivity = dict[str, list[int]] + class Router(ABC): - def __init__(self, **kwargs: Any) -> None: + def __init__(self, connectivity: Connectivity, **kwargs: Any) -> None: + self._connectivity = connectivity """Generic router class""" @abstractmethod - def route(self, ir: IR) -> IR: + def route(self, ir: IR, qubit_register_size: int) -> IR: raise NotImplementedError diff --git a/opensquirrel/passes/router/heuristics.py b/opensquirrel/passes/router/heuristics.py index 02d99505..5be73975 100644 --- a/opensquirrel/passes/router/heuristics.py +++ b/opensquirrel/passes/router/heuristics.py @@ -9,25 +9,30 @@ class DistanceMetric(Enum): CHEBYSHEV = "chebyshev" -def calculate_distance(a: int, b: int, num_columns: int, distance_metric: DistanceMetric) -> float: +def calculate_distance(q0_index: int, q1_index: int, num_columns: int, distance_metric: DistanceMetric) -> float: """ Calculate the distance between two qubits based on the specified distance metric. Args: - a: The index of the first qubit. - b: The index of the second qubit. - num_columns: The number of columns in the grid. - distance_metric: Distance metric to be used (Manhattan, Euclidean, or Chebyshev). + q0_index (int): The index of the first qubit. + q1_index (int): The index of the second qubit. + num_columns (int): The number of columns in the grid. + distance_metric (DistanceMetric): Distance metric to be used (Manhattan, Euclidean, or Chebyshev). Returns: float: The distance between the two qubits. """ - x1, y1 = divmod(a, num_columns) - x2, y2 = divmod(b, num_columns) - - if distance_metric == DistanceMetric.MANHATTAN: - return abs(x1 - x2) + abs(y1 - y2) - if distance_metric == DistanceMetric.EUCLIDEAN: - return float(((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5) - if distance_metric == DistanceMetric.CHEBYSHEV: - return max(abs(x1 - x2), abs(y1 - y2)) - msg = "Invalid distance metric. Choose Manhattan, Euclidean, or Chebyshev." - raise ValueError(msg) + x1, y1 = divmod(q0_index, num_columns) + x2, y2 = divmod(q1_index, num_columns) + + match distance_metric: + case DistanceMetric.MANHATTAN: + return abs(x1 - x2) + abs(y1 - y2) + + case DistanceMetric.EUCLIDEAN: + return float(((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5) + + case DistanceMetric.CHEBYSHEV: + return max(abs(x1 - x2), abs(y1 - y2)) + + case _: + msg = "Invalid distance metric. Choose Manhattan, Euclidean, or Chebyshev." + raise ValueError(msg) diff --git a/opensquirrel/passes/router/shortest_path_router.py b/opensquirrel/passes/router/shortest_path_router.py index 652cc069..995175f2 100644 --- a/opensquirrel/passes/router/shortest_path_router.py +++ b/opensquirrel/passes/router/shortest_path_router.py @@ -1,58 +1,16 @@ -import itertools from typing import Any import networkx as nx -from opensquirrel import SWAP -from opensquirrel.exceptions import NoRoutingPathError -from opensquirrel.ir import IR, Gate, Instruction -from opensquirrel.passes.router.general_router import Router +from opensquirrel.ir import IR +from opensquirrel.passes.router.common import PathFinderType, ProcessSwaps +from opensquirrel.passes.router.general_router import Connectivity, Router class ShortestPathRouter(Router): - def __init__(self, connectivity: dict[str, list[int]], **kwargs: Any) -> None: - super().__init__(**kwargs) - self.connectivity = connectivity + def __init__(self, connectivity: Connectivity, **kwargs: Any) -> None: + super().__init__(connectivity, **kwargs) - def _insert_and_propagate_swaps(self, ir: IR, statement_index: int, shortest_path: list[int]) -> None: - for start_qubit_index, end_qubit_index in itertools.pairwise(shortest_path[:-1]): - ir.statements.insert(statement_index, SWAP(start_qubit_index, end_qubit_index)) - # Update subsequent statements to reflect the swap - for statement in ir.statements[statement_index + 1 :]: - if isinstance(statement, Instruction): - for qubit in statement.get_qubit_operands(): - if qubit.index == start_qubit_index: - qubit.index = end_qubit_index - elif qubit.index == end_qubit_index: - qubit.index = start_qubit_index - statement_index += 1 - - def route(self, ir: IR) -> IR: - """ - Routes the circuit by inserting SWAP gates along the shortest path between qubits which can not - interact with each other, to make it executable given the hardware connectivity. - Args: - ir: The intermediate representation of the circuit. - Returns: - The intermediate representation of the routed circuit (including the additional SWAP gates). - """ - graph_data = {int(start_node): end_nodes for start_node, end_nodes in self.connectivity.items()} - graph = nx.Graph(graph_data) - statement_index = 0 - while statement_index < len(ir.statements): - statement = ir.statements[statement_index] - if isinstance(statement, Gate) and len(statement.get_qubit_operands()) == 2: - q0, q1 = statement.get_qubit_operands() - if not graph.has_edge(q0.index, q1.index): - try: - shortest_path = nx.shortest_path(graph, source=q0.index, target=q1.index) - # -2 because we skip inserting a swap for the last edge in the path: - # len(path) - 1 edges in total - num_swaps_inserted = len(shortest_path) - 2 - self._insert_and_propagate_swaps(ir, statement_index, shortest_path) - statement_index += num_swaps_inserted - except nx.NetworkXNoPath as e: - msg = f"No routing path available between qubit {q0.index} and qubit {q1.index}" - raise NoRoutingPathError(msg) from e - statement_index += 1 - return ir + def route(self, ir: IR, qubit_register_size: int) -> IR: + pathfinder: PathFinderType = nx.shortest_path + return ProcessSwaps.process_swaps(ir, qubit_register_size, self._connectivity, pathfinder) diff --git a/opensquirrel/reader/libqasm_parser.py b/opensquirrel/reader/libqasm_parser.py index 45f52771..c1a79642 100644 --- a/opensquirrel/reader/libqasm_parser.py +++ b/opensquirrel/reader/libqasm_parser.py @@ -7,11 +7,12 @@ from opensquirrel.circuit import Circuit from opensquirrel.default_gate_modifiers import ControlGateModifier, InverseGateModifier, PowerGateModifier -from opensquirrel.default_instructions import default_gate_set, default_non_unitary_set +from opensquirrel.default_instructions import default_control_instruction_set, default_gate_set, default_non_unitary_set from opensquirrel.ir import ( IR, AsmDeclaration, Bit, + ControlInstruction, Float, Gate, Int, @@ -71,7 +72,7 @@ def _is_gate_instruction(ast_node: Any) -> bool: return isinstance(ast_node, cqasm.semantic.GateInstruction) @staticmethod - def _is_non_unitary_instruction(ast_node: Any) -> bool: + def _is_non_gate_instruction(ast_node: Any) -> bool: return isinstance(ast_node, cqasm.semantic.NonGateInstruction) @staticmethod @@ -181,20 +182,29 @@ def _get_gate_generator(self, instruction: cqasm.semantic.GateInstruction) -> Ca modified_gate_generator = cast( "Callable[..., BlochSphereRotation]", self._get_gate_generator(instruction.gate) ) - if gate_name == "inv": - return InverseGateModifier(modified_gate_generator) - if gate_name == "pow": - gate = instruction.gate - exponent = gate.parameters[0].value - return PowerGateModifier(exponent, modified_gate_generator) - if gate_name == "ctrl": - return ControlGateModifier(modified_gate_generator) - msg = "parsing error: unknown unitary instruction" - - raise OSError(msg) + + match gate_name: + case "inv": + return InverseGateModifier(modified_gate_generator) + + case "pow": + gate = instruction.gate + exponent = gate.parameters[0].value + return PowerGateModifier(exponent, modified_gate_generator) + + case "ctrl": + return ControlGateModifier(modified_gate_generator) + + case _: + msg = "parsing error: unknown unitary instruction" + raise OSError(msg) return lambda *args: default_gate_set[gate_name](*args) - def _get_non_unitary_generator(self, instruction: cqasm.semantic.NonGateInstruction) -> Callable[..., NonUnitary]: + def _get_non_gate_instruction_generator( + self, instruction: cqasm.semantic.NonGateInstruction + ) -> Callable[..., NonUnitary | ControlInstruction]: + if instruction.name in default_control_instruction_set: + return lambda *args: default_control_instruction_set[instruction.name](*args) return lambda *args: default_non_unitary_set[instruction.name](*args) def circuit_from_string(self, s: str) -> Circuit: @@ -214,8 +224,8 @@ def circuit_from_string(self, s: str) -> Circuit: if LibQasmParser._is_gate_instruction(statement): instruction_generator = self._get_gate_generator(statement) expanded_args = self._get_expanded_instruction_args(statement) - elif LibQasmParser._is_non_unitary_instruction(statement): - instruction_generator = self._get_non_unitary_generator(statement) + elif LibQasmParser._is_non_gate_instruction(statement): + instruction_generator = self._get_non_gate_instruction_generator(statement) expanded_args = ( self._get_expanded_measure_args(statement.operands) if statement.name == "measure" diff --git a/opensquirrel/reindexer/qubit_reindexer.py b/opensquirrel/reindexer/qubit_reindexer.py index 23c856e9..27219d79 100644 --- a/opensquirrel/reindexer/qubit_reindexer.py +++ b/opensquirrel/reindexer/qubit_reindexer.py @@ -15,22 +15,12 @@ ) from opensquirrel.ir.semantics import ( BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, ControlledGate, MatrixGate, ) from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager if TYPE_CHECKING: - from opensquirrel import ( - CNOT, - CR, - CZ, - SWAP, - CRk, - ) from opensquirrel.circuit import Circuit @@ -77,39 +67,15 @@ def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> BlochSphereR name=gate.name, ) - def visit_bsr_no_params(self, gate: BsrNoParams) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_full_params(self, gate: BsrFullParams) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> BlochSphereRotation: - return self.visit_bloch_sphere_rotation(gate) - def visit_matrix_gate(self, gate: MatrixGate) -> MatrixGate: reindexed_operands = [self.qubit_indices.index(op.index) for op in gate.operands] return MatrixGate(matrix=gate.matrix, operands=reindexed_operands) - def visit_swap(self, gate: SWAP) -> MatrixGate: - return self.visit_matrix_gate(gate) - def visit_controlled_gate(self, gate: ControlledGate) -> ControlledGate: control_qubit = self.qubit_indices.index(gate.control_qubit.index) target_gate = gate.target_gate.accept(self) return ControlledGate(control_qubit=control_qubit, target_gate=target_gate) - def visit_cnot(self, gate: CNOT) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_cz(self, gate: CZ) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_cr(self, gate: CR) -> ControlledGate: - return self.visit_controlled_gate(gate) - - def visit_crk(self, gate: CRk) -> ControlledGate: - return self.visit_controlled_gate(gate) - def get_reindexed_circuit( replacement_gates: Iterable[Gate], diff --git a/opensquirrel/utils/matrix_expander.py b/opensquirrel/utils/matrix_expander.py index 6147e833..8c9f1f3f 100644 --- a/opensquirrel/utils/matrix_expander.py +++ b/opensquirrel/utils/matrix_expander.py @@ -20,18 +20,8 @@ from opensquirrel.ir.semantics.canonical_gate import CanonicalAxis, CanonicalGate if TYPE_CHECKING: - from opensquirrel import ( - CNOT, - CR, - CZ, - SWAP, - CRk, - ) from opensquirrel.ir.semantics import ( BlochSphereRotation, - BsrAngleParam, - BsrFullParams, - BsrNoParams, ControlledGate, MatrixGate, ) @@ -139,15 +129,6 @@ def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> NDArray[np.c ValueError(msg) return np.asarray(result, dtype=np.complex128) - def visit_bsr_no_params(self, gate: BsrNoParams) -> NDArray[np.complex128]: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_full_params(self, gate: BsrFullParams) -> NDArray[np.complex128]: - return self.visit_bloch_sphere_rotation(gate) - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> NDArray[np.complex128]: - return self.visit_bloch_sphere_rotation(gate) - def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: if gate.control_qubit.index >= self.qubit_register_size: msg = "index out of range" @@ -160,18 +141,6 @@ def visit_controlled_gate(self, gate: ControlledGate) -> NDArray[np.complex128]: col[col_index] = 1 return np.asarray(expanded_matrix, dtype=np.complex128) - def visit_cnot(self, gate: CNOT) -> Any: - return self.visit_controlled_gate(gate) - - def visit_cz(self, gate: CZ) -> Any: - return self.visit_controlled_gate(gate) - - def visit_cr(self, gate: CR) -> Any: - return self.visit_controlled_gate(gate) - - def visit_crk(self, gate: CRk) -> Any: - return self.visit_controlled_gate(gate) - def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: # The convention is to write gate matrices with operands reversed. # For instance, the first operand of CNOT is the control qubit, and this is written as @@ -210,9 +179,6 @@ def visit_matrix_gate(self, gate: MatrixGate) -> NDArray[np.complex128]: raise ValueError(msg) return expanded_matrix - def visit_swap(self, gate: SWAP) -> NDArray[np.complex128]: - return self.visit_matrix_gate(gate) - def visit_canonical_gate(self, gate: CanonicalGate) -> Any: qubit_operands = list(reversed(gate.get_qubit_operands())) diff --git a/opensquirrel/writer/writer.py b/opensquirrel/writer/writer.py index b5862976..f294e2e1 100644 --- a/opensquirrel/writer/writer.py +++ b/opensquirrel/writer/writer.py @@ -13,7 +13,6 @@ Barrier, Bit, Float, - Gate, Init, Int, IRVisitor, @@ -78,13 +77,20 @@ def visit_asm_declaration(self, asm_declaration: AsmDeclaration) -> None: backend_code = asm_declaration.backend_code.accept(self) self.output += f"asm({backend_name}) '''{backend_code}'''\n" - def visit_gate(self, gate: Gate) -> None: - if gate.name == "Gate": - self.output += f"{gate}\n" - def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: - if gate.name == "BlochSphereRotation": - self.output += f"{gate}\n" + if isinstance(gate, BlochSphereRotation) and type(gate) is not BlochSphereRotation: + return + self.output += f"{gate}\n" + + def visit_matrix_gate(self, gate: MatrixGate) -> None: + if isinstance(gate, MatrixGate) and type(gate) is not MatrixGate: + return + self.output += f"{gate}\n" + + def visit_controlled_gate(self, gate: ControlledGate) -> None: + if isinstance(gate, ControlledGate) and type(gate) is not ControlledGate: + return + self.output += f"{gate}\n" def visit_bsr_no_params(self, gate: BsrNoParams) -> None: qubit_operand = gate.qubit.accept(self) @@ -104,19 +110,11 @@ def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: qubit_operand = gate.qubit.accept(self) self.output += f"{gate.name}({theta_argument}) {qubit_operand}\n" - def visit_matrix_gate(self, gate: MatrixGate) -> None: - if gate.name == "MatrixGate": - self.output += f"{gate}\n" - def visit_swap(self, gate: SWAP) -> Any: qubit_operand_0 = gate.qubit_0.accept(self) qubit_operand_1 = gate.qubit_1.accept(self) self.output += f"SWAP {qubit_operand_0}, {qubit_operand_1}\n" - def visit_controlled_gate(self, gate: ControlledGate) -> None: - if gate.name == "ControlledGate": - self.output += f"{gate}\n" - def visit_cnot(self, gate: CNOT) -> None: control_qubit_operand = gate.control_qubit.accept(self) target_qubit_operand = gate.target_qubit.accept(self) diff --git a/pyproject.toml b/pyproject.toml index 7b7c46f7..5877157f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "opensquirrel" -version = "0.7.0" +version = "0.8.0" description = "A quantum circuit transformation and manipulation tool" authors = [ { name = "Quantum Inspire", email = "support@quantum-inspire.com" }, @@ -53,7 +53,7 @@ docs = [ "mkdocs>=1.6.1,<2", "mkdocs-exclude==1.0.2", "mkdocs-build-plantuml-plugin==1.9.0", - "mkdocs-glightbox==0.5.1", + "mkdocs-glightbox==0.5.2", "mkdocs-literate-nav>=0.6.2,<0.7", "mkdocs-material>=9.6.20,<10", "mkdocs-material-extensions==1.3.1", diff --git a/tests/docs/compilation-passes/test_exporter.py b/tests/docs/compilation-passes/test_exporter.py index 28debda3..8477fe0b 100644 --- a/tests/docs/compilation-passes/test_exporter.py +++ b/tests/docs/compilation-passes/test_exporter.py @@ -307,6 +307,8 @@ def test_init_and_reset(self) -> None: ] assert operations == [ + "Reset q[0]", + "Reset q[1]", "Rxy(90, 90, 'q[0]')", "Rxy(180, 0, 'q[0]')", "CNOT (q[0], q[1])", diff --git a/tests/integration/test_tuna_5.py b/tests/integration/test_tuna_5.py index 5cf831f0..f9470fd0 100644 --- a/tests/integration/test_tuna_5.py +++ b/tests/integration/test_tuna_5.py @@ -167,6 +167,11 @@ def test_complete_circuit(self, qs_is_installed: bool, data: DataType) -> None: assert exported_schedule.name == "Exported OpenSquirrel circuit" assert operations == [ + "Reset q[0]", + "Reset q[1]", + "Reset q[2]", + "Reset q[3]", + "Reset q[4]", "Rxy(90, 0, 'q[0]')", "Rxy(90, 90, 'q[0]')", "Rxy(90, 0, 'q[0]')", diff --git a/tests/passes/exporter/test_quantify_scheduler_exporter.py b/tests/passes/exporter/test_quantify_scheduler_exporter.py index f30d4e5a..d0841440 100644 --- a/tests/passes/exporter/test_quantify_scheduler_exporter.py +++ b/tests/passes/exporter/test_quantify_scheduler_exporter.py @@ -10,20 +10,350 @@ import pytest -from opensquirrel import CircuitBuilder, H +from opensquirrel import Circuit, CircuitBuilder from opensquirrel.common import ATOL from opensquirrel.exceptions import ExporterError from opensquirrel.ir.semantics import BlochSphereRotation +from opensquirrel.passes.exporter import ExportFormat +from opensquirrel.passes.exporter.quantify_scheduler_exporter import CYCLE_TIME if TYPE_CHECKING: from opensquirrel.ir import Gate + try: + from quantify_scheduler import Schedule + except ModuleNotFoundError: + pass + class FloatEq(float): def __eq__(self, other: Any) -> bool: return isclose(self, other, abs_tol=ATOL) +def _check_ref_schedulables(exported_schedule: Schedule, expected_ref_schedulable_indices: list[int | None]) -> None: + ref_schedulables = [ + schedulable_data["timing_constraints"][0]["ref_schedulable"] + for schedulable_data in list(exported_schedule.schedulables.values()) + ] + schedulable_index_map = { + None: None, + **{schedulable: index for index, schedulable in enumerate(list(exported_schedule.schedulables.keys()))}, + } + for ref_schedulable, expected_ref_schedulable_index in zip( + ref_schedulables, expected_ref_schedulable_indices, strict=False + ): + assert schedulable_index_map[ref_schedulable] == expected_ref_schedulable_index + + +def _check_waiting_cycles(exported_schedule: Schedule, expected_waiting_cycles: list[int]) -> None: + for schedulable_data, expected_waiting_cycle in zip( + exported_schedule.schedulables.values(), expected_waiting_cycles, strict=False + ): + waiting_time = schedulable_data.data["timing_constraints"][0]["rel_time"] + assert waiting_time == -1.0 * expected_waiting_cycle * CYCLE_TIME + + +@pytest.fixture +def qs_is_installed() -> bool: + return importlib.util.find_spec("quantify_scheduler") is not None + + +def test_empty_circuit_export(qs_is_installed: bool) -> None: + if qs_is_installed: + circuit = CircuitBuilder(1).to_circuit() + exported_schedule, _ = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + assert len(exported_schedule.schedulables) == 0 + + +@pytest.mark.parametrize( + ("cqasm_string", "expected_ref_schedulable_indices"), + [ + ( + """version 3; qubit[5] q; bit[5] b; reset q; barrier q; X q[0]; X q[0:1]; X q[0:2]; X q[0:3]; X q[0:4]; + barrier q; b = measure q""", + [5, 5, 5, 5, 5, 6, 8, 9, 11, 12, 13, 15, 16, 17, 18, 24, 24, 24, 24, 24, None, None, None, None, None], + ), + ( + """version 3; qubit[5] q; bit[2] b; init q; barrier q; X q[3]; barrier q[3,4]; X q[4]; barrier q[3,4]; + X q[4]; b[0,1] = measure q[3,4]""", + [5, 5, 5, 5, 5, 6, 7, 9, None, None], + ), + ( + """version 3; qubit[5] q; bit[5] b; init q; barrier q; mY90 q[2]; CNOT q[2], q[0]; CNOT q[2], q[1]; + CNOT q[2], q[3]; CNOT q[2], q[4]; barrier q; b[0:4] = measure q[0:4]""", + [5, 5, 5, 5, 5, 6, 7, 8, 9, 14, None, None, None, None, None], + ), + ( + """version 3; qubit[5] q; bit[2] b; init q[3]; init q[2]; barrier q[3]; barrier q[2]; Ry(2.5707963) q[3]; + Ry(-1.5707963) q[3]; Ry(-1.5707963) q[2]; CZ q[3], q[2]; Ry(1.5707963) q[2]; barrier q[3]; barrier q[2]; + b[0] = measure q[3]; b[1] = measure q[2]""", + [2, 2, 3, 5, 5, 6, 8, None, None], + ), + ( + """version 3; qubit[6] q; bit[6] b; init q; barrier q; X q[1]; CNOT q[4], q[5]; CNOT q[1], q[0]; + CNOT q[3], q[4]; CNOT q[2], q[1]; CNOT q[3], q[2]; barrier q; X q[4]; b = measure q""", + [6, 6, 6, 6, 6, 6, 8, 9, 10, 11, 11, 12, 17, None, None, None, None, None, None], + ), + ( + """version 3; qubit[5] q; bit[5] b; init q; barrier q[0:2]; X q[0]; X q[1]; barrier q; X q[2]; X q[3]; + X q[4]; barrier q[1,3]; CNOT q[1], q[3]; barrier q; b = measure q""", + [6, 6, 6, 8, 8, 8, 8, 15, 10, 15, 15, None, None, None, None, None], + ), + ], + ids=["alap_1", "alap_2", "alap_3", "alap_4", "alap_5", "alap_6"], +) +def test_alap(qs_is_installed: bool, cqasm_string: str, expected_ref_schedulable_indices: list[int | None]) -> None: + if qs_is_installed: + circuit = Circuit.from_string(cqasm_string) + exported_schedule, _ = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + _check_ref_schedulables(exported_schedule, expected_ref_schedulable_indices) + + +@pytest.mark.parametrize( + ("cqasm_string", "expected_ref_schedulable_indices", "expected_waiting_cycles"), + [ + ( + """version 3; qubit[2] q; X q[0]; barrier q; X q[1]; wait(2) q[1]; X q[0]; X q[0]; barrier q; X q[1]""", + [1, 4, 3, 4, None], + [0, 2, 0, 0, 0], + ), + ( + """version 3; qubit[2] q; CNOT q[0], q[1]; X q[0]; wait(3) q[0]; X q[1]; X q[1]""", + [1, None, 3, None], + [0, 3, 0, 0], + ), + ( + """version 3; qubit[2] q; CZ q[0], q[1] ;wait(2) q[0]; wait(1) q[1]; X q""", + [1, None, None], + [2, 0, 0], + ), + ( + """version 3; qubit[2] q; X q; barrier q; wait(1) q[0]; wait(2) q[1]; barrier q; X q[0]; + barrier q; wait(2) q[0]; wait(1) q[1]; barrier q; X q""", + [2, 2, 4, None, None], + [2, 2, 2, 0, 0], + ), + ( + """version 3; qubit[2] q; X q[0]; barrier q; X q[1]; wait(2) q[1]; X q[0]; wait(4) q[0]; X q[1]""", + [2, 3, None, None], + [0, 2, 4, 0], + ), + ( + """version 3; qubit[3] q; X q; wait(4) q[0]; barrier q[0]; X q[0]; wait(2) q[1]; barrier q[1]; + CNOT q[1], q[2]; barrier q; X q""", + [3, 4, 4, 7, 7, None, None, None], + [4, 2, 0, 0, 0, 0, 0, 0, 0], + ), + ( + """version 3; qubit[2] q; X q; barrier q; wait(1) q[0]; wait(2) q[1]; barrier q; X q[0]; + wait(2) q[0]; wait(1) q[1]; barrier q; X q""", + [2, 2, 4, None, None], + [2, 2, 2, 0, 0], + ), + ( + """version 3; qubit[2] q; X q; barrier q; wait(1) q[0]; wait(2) q[1]; barrier q; X q[0]; + wait(2) q[0]; wait(4) q[1]; barrier q; X q""", + [4, 4, 4, None, None, None], + [6, 6, 2, 0, 0], + ), + ( + """version 3; qubit[2] q; X q[0]; wait(2) q[0]; wait(3) q[0]; X q[1]; wait(1) q[1]; X q""", + [2, 3, None, None], + [5, 1, 0, 0], + ), + ( + """version 3; qubit q; X q; wait(-1) q; X q""", + [1, None], + [-1, 0], + ), + ( + """version 3; qubit q; wait(1) q; X q""", + [None], + [0], + ), + ( + """version 3; qubit q; X q; wait(1) q""", + [None], + [1], + ), + ], + ids=[ + "wait_simple", + "wait_two_qubit_gate_1", + "wait_two_qubit_gate_2", + "wait_two_qubit_gate_3", + "wait_with_barriers_1", + "wait_with_barriers_2", + "wait_with_barriers_3", + "wait_with_barriers_4", + "wait_multiple", + "wait_negative", + "wait_begin", + "wait_end", + ], +) +def test_wait( + qs_is_installed: bool, + cqasm_string: str, + expected_ref_schedulable_indices: list[int | None], + expected_waiting_cycles: list[int], +) -> None: + if qs_is_installed: + circuit = Circuit.from_string(cqasm_string) + exported_schedule, _ = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + _check_ref_schedulables(exported_schedule, expected_ref_schedulable_indices) + _check_waiting_cycles(exported_schedule, expected_waiting_cycles) + + +def test_control_instruction_stress_test( + qs_is_installed: bool, +) -> None: + if qs_is_installed: + circuit = Circuit.from_string( + """ + version 3 + + qubit[15] q; bit[15] b + + init q + + barrier q + wait(1) q[0]; wait(2) q[1]; wait(3) q[2]; wait(4) q[3]; wait(5) q[4]; wait(1) q[5]; wait(2) q[6] + wait(3) q[7]; wait(4) q[8]; wait(5) q[9]; wait(1) q[10]; wait(2) q[11]; wait(3) q[12]; wait(4) q[13] + wait(5) q[14] + + barrier q[0:7] + X q[0]; X q[1]; X q[2]; X q[3]; X q[4]; X q[5]; X q[6]; X q[7] + + barrier q[8:14] + CNOT q[8], q[9]; CNOT q[10], q[11]; CNOT q[12], q[13] + + wait(2) q[0]; wait(3) q[1]; wait(4) q[2]; wait(5) q[3]; wait(1) q[4]; wait(2) q[5]; wait(3) q[6] + wait(4) q[7]; wait(5) q[8]; wait(1) q[9]; wait(2) q[10]; wait(3) q[11]; wait(4) q[12]; wait(5) q[13] + wait(1) q[14] + + barrier q + CZ q[0], q[14]; CZ q[1], q[13]; CZ q[2], q[12]; CZ q[3], q[11]; CZ q[4], q[10] + + barrier q[5:9] + X q[5]; X q[6]; X q[7]; X q[8]; X q[9] + + barrier q + b = measure q + """ + ) + expected_ref_schedulable_indices = [ + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 26, + 26, + 26, + 26, + 26, + 26, + 26, + 26, + 26, + 26, + 26, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ] + expected_waiting_cycles = [ + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 2, + 3, + 4, + 5, + 1, + 2, + 3, + 4, + 5, + 3, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + ] + exported_schedule, _ = circuit.export(fmt=ExportFormat.QUANTIFY_SCHEDULER) + _check_ref_schedulables(exported_schedule, expected_ref_schedulable_indices) + _check_waiting_cycles(exported_schedule, expected_waiting_cycles) + + @pytest.fixture def mock_qs() -> Generator[MagicMock, None, None]: mock_qs = MagicMock() @@ -73,8 +403,8 @@ def test_export(mock_qs: MagicMock) -> None: @pytest.mark.parametrize( "gate", - [H(0), BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34)], - ids=["H", "BSR"], + [BlochSphereRotation(qubit=0, axis=(1, 2, 3), angle=0.9876, phase=2.34)], + ids=["BSR"], ) def test_gates_not_supported(mock_qs: MagicMock, gate: Gate) -> None: quantify_scheduler_exporter = importlib.import_module("opensquirrel.passes.exporter.quantify_scheduler_exporter") diff --git a/tests/writer/test_writer.py b/tests/writer/test_writer.py index 28b63227..4970257c 100644 --- a/tests/writer/test_writer.py +++ b/tests/writer/test_writer.py @@ -103,6 +103,53 @@ def test_swap() -> None: ) +def test_all_instructions() -> None: + builder = CircuitBuilder(2, 2) + builder.init(0).reset(1).barrier(0).wait(1, 3) + builder.I(0).X(0).Y(0).Z(0) + builder.Rx(0, 1.234).Ry(0, -1.234).Rz(0, 1.234) + builder.X90(0).Y90(0) + builder.mX90(0).mY90(0) + builder.S(0).Sdag(0).T(0).Tdag(0) + builder.CZ(0, 1).CNOT(1, 0).SWAP(0, 1) + builder.measure(0, 0).measure(1, 1) + circuit = builder.to_circuit() + + assert ( + str(circuit) + == """version 3.0 + +qubit[2] q +bit[2] b + +init q[0] +reset q[1] +barrier q[0] +wait(3) q[1] +I q[0] +X q[0] +Y q[0] +Z q[0] +Rx(1.234) q[0] +Ry(-1.234) q[0] +Rz(1.234) q[0] +X90 q[0] +Y90 q[0] +mX90 q[0] +mY90 q[0] +S q[0] +Sdag q[0] +T q[0] +Tdag q[0] +CZ q[0], q[1] +CNOT q[1], q[0] +SWAP q[0], q[1] +b[0] = measure q[0] +b[1] = measure q[1] +""" + ) + + def test_anonymous_gate() -> None: builder = CircuitBuilder(2, 2) builder.H(0) diff --git a/uv.lock b/uv.lock index a72a9dd1..4649745d 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,4 @@ version = 1 -revision = 3 requires-python = ">=3.10.0" resolution-markers = [ "python_full_version >= '3.14'", @@ -24,9 +23,9 @@ dependencies = [ { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, { name = "versioningit", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/6b/42c5e5e5e4698665409ff2fc99ed0e74f52f91039faf33f79af89bf6319c/adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294", size = 112954, upload-time = "2025-03-03T22:38:51.58Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/6b/42c5e5e5e4698665409ff2fc99ed0e74f52f91039faf33f79af89bf6319c/adaptive-1.3.2.tar.gz", hash = "sha256:fc1da150b0cb8e3bc92a3ae7f7a7f91cb82fb99d1c2bb9c8ddd867fce56b7294", size = 112954 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/7a5458e66104b3526ed8ae99bbdf4d2da860d4c8023bab42e514779ea54a/adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637", size = 125750, upload-time = "2025-03-03T22:38:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/7a5458e66104b3526ed8ae99bbdf4d2da860d4c8023bab42e514779ea54a/adaptive-1.3.2-py3-none-any.whl", hash = "sha256:7328868960887f144d2e972f0fa21f5959946ddd51d45b83cf73c77cd52fa637", size = 125750 }, ] [[package]] @@ -47,18 +46,18 @@ dependencies = [ { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, { name = "versioningit", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/ab/96e11cd50453e9fbd3da4787d8fbb1eddb4658bd968b371e772b5b48ff2e/adaptive-1.4.1.tar.gz", hash = "sha256:7ba981e7793fbeb0f52cb961ee235979989fd8c72e3d3b77b69f747b75fa69eb", size = 112611, upload-time = "2025-05-13T12:23:48.29Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/ab/96e11cd50453e9fbd3da4787d8fbb1eddb4658bd968b371e772b5b48ff2e/adaptive-1.4.1.tar.gz", hash = "sha256:7ba981e7793fbeb0f52cb961ee235979989fd8c72e3d3b77b69f747b75fa69eb", size = 112611 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/f6/3e6f3d70dd401c0ae6af6fbe44ce5e84c414f0cacdd786e3f55f828c6f0b/adaptive-1.4.1-py3-none-any.whl", hash = "sha256:882e2adbd87157de5caeabf1d573ea0eac585dd5e1da19a77e1899a0aab4c702", size = 125634, upload-time = "2025-05-13T12:23:47.134Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f6/3e6f3d70dd401c0ae6af6fbe44ce5e84c414f0cacdd786e3f55f828c6f0b/adaptive-1.4.1-py3-none-any.whl", hash = "sha256:882e2adbd87157de5caeabf1d573ea0eac585dd5e1da19a77e1899a0aab4c702", size = 125634 }, ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] [[package]] @@ -71,18 +70,18 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094 } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, + { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } 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" }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, ] [[package]] @@ -92,9 +91,9 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } 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" }, + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, ] [[package]] @@ -104,33 +103,33 @@ 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" }, +sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441 } +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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, ] [[package]] @@ -141,33 +140,33 @@ dependencies = [ { name = "python-dateutil" }, { name = "types-python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960, upload-time = "2023-09-30T22:11:18.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419, upload-time = "2023-09-30T22:11:16.072Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419 }, ] [[package]] name = "asciitree" version = "0.3.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e", size = 3951, upload-time = "2016-09-05T19:10:42.681Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz", hash = "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e", size = 3951 } [[package]] name = "asteval" version = "1.0.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f0/ad92c4bc565918713f9a4b54f06d06ec370e48079fdb50cf432befabee8b/asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f", size = 52079, upload-time = "2025-01-19T21:44:03.291Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f0/ad92c4bc565918713f9a4b54f06d06ec370e48079fdb50cf432befabee8b/asteval-1.0.6.tar.gz", hash = "sha256:1aa8e7304b2e171a90d64dd269b648cacac4e46fe5de54ac0db24776c0c4a19f", size = 52079 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/ac/19dbba27e891f39feb4170b884da449ee2699ef4ebb88eefeda364bbbbcf/asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc", size = 22406, upload-time = "2025-01-19T21:44:01.323Z" }, + { url = "https://files.pythonhosted.org/packages/13/ac/19dbba27e891f39feb4170b884da449ee2699ef4ebb88eefeda364bbbbcf/asteval-1.0.6-py3-none-any.whl", hash = "sha256:5e119ed306e39199fd99c881cea0e306b3f3807f050c9be79829fe274c6378dc", size = 22406 }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, ] [[package]] @@ -177,41 +176,41 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069, upload-time = "2025-03-16T17:25:35.422Z" }, + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, ] [[package]] name = "attrs" -version = "25.3.0" +version = "25.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, ] [[package]] name = "babel" version = "2.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, ] [[package]] name = "backrefs" version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857 } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267 }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072 }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947 }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843 }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762 }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265 }, ] [[package]] @@ -222,9 +221,9 @@ dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/77/e9/df2358efd7659577435e2177bfa69cba6c33216681af51a707193dec162a/beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e", size = 625822, upload-time = "2025-09-29T10:05:42.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/e9/df2358efd7659577435e2177bfa69cba6c33216681af51a707193dec162a/beautifulsoup4-4.14.2.tar.gz", hash = "sha256:2a98ab9f944a11acee9cc848508ec28d9228abfd522ef0fad6a02a72e0ded69e", size = 625822 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515", size = 106392, upload-time = "2025-09-29T10:05:43.771Z" }, + { url = "https://files.pythonhosted.org/packages/94/fe/3aed5d0be4d404d12d36ab97e2f1791424d9ca39c2f754a6285d59a3b01d/beautifulsoup4-4.14.2-py3-none-any.whl", hash = "sha256:5ef6fa3a8cbece8488d66985560f97ed091e22bbc4e9c2338508a9d5de6d4515", size = 106392 }, ] [[package]] @@ -234,9 +233,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, ] [package.optional-dependencies] @@ -255,40 +254,40 @@ dependencies = [ { name = "schema" }, { name = "versioningit" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/c9/c64ec69941544561f503fe092f2f32b9117252b2dd22b90368787d2316a2/broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c", size = 44803, upload-time = "2024-03-06T22:15:44.076Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/c9/c64ec69941544561f503fe092f2f32b9117252b2dd22b90368787d2316a2/broadbean-0.14.0.tar.gz", hash = "sha256:bfe3afea69529da246f7ca2803d0213c625f96b15a7ca4283b9c22f8fc5c655c", size = 44803 } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/4d/2b3b4b35456176182d45cdf977fdea80bf71be563f4074536ec3436eed9c/broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7", size = 36755, upload-time = "2024-03-06T22:15:42.41Z" }, + { url = "https://files.pythonhosted.org/packages/48/4d/2b3b4b35456176182d45cdf977fdea80bf71be563f4074536ec3436eed9c/broadbean-0.14.0-py3-none-any.whl", hash = "sha256:7a9195ef16241853e2ea20aedc6f67ee72f5464a463b3584fcbedcb63daf88e7", size = 36755 }, ] [[package]] name = "cachetools" version = "6.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/61/e4fad8155db4a04bfb4734c7c8ff0882f078f24294d42798b3568eb63bff/cachetools-6.2.0.tar.gz", hash = "sha256:38b328c0889450f05f5e120f56ab68c8abaf424e1275522b138ffc93253f7e32", size = 30988, upload-time = "2025-08-25T18:57:30.924Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/61/e4fad8155db4a04bfb4734c7c8ff0882f078f24294d42798b3568eb63bff/cachetools-6.2.0.tar.gz", hash = "sha256:38b328c0889450f05f5e120f56ab68c8abaf424e1275522b138ffc93253f7e32", size = 30988 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/56/3124f61d37a7a4e7cc96afc5492c78ba0cb551151e530b54669ddd1436ef/cachetools-6.2.0-py3-none-any.whl", hash = "sha256:1c76a8960c0041fcc21097e357f882197c79da0dbff766e7317890a65d7d8ba6", size = 11276, upload-time = "2025-08-25T18:57:29.684Z" }, + { url = "https://files.pythonhosted.org/packages/6c/56/3124f61d37a7a4e7cc96afc5492c78ba0cb551151e530b54669ddd1436ef/cachetools-6.2.0-py3-none-any.whl", hash = "sha256:1c76a8960c0041fcc21097e357f882197c79da0dbff766e7317890a65d7d8ba6", size = 11276 }, ] [[package]] name = "cattrs" -version = "25.2.0" +version = "25.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs", marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e3/42/988b3a667967e9d2d32346e7ed7edee540ef1cee829b53ef80aa8d4a0222/cattrs-25.2.0.tar.gz", hash = "sha256:f46c918e955db0177be6aa559068390f71988e877c603ae2e56c71827165cc06", size = 506531, upload-time = "2025-08-31T20:41:59.301Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/00/2432bb2d445b39b5407f0a90e01b9a271475eea7caf913d7a86bcb956385/cattrs-25.3.0.tar.gz", hash = "sha256:1ac88d9e5eda10436c4517e390a4142d88638fe682c436c93db7ce4a277b884a", size = 509321, upload-time = "2025-10-07T12:26:08.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/a5/b3771ac30b590026b9d721187110194ade05bfbea3d98b423a9cafd80959/cattrs-25.2.0-py3-none-any.whl", hash = "sha256:539d7eedee7d2f0706e4e109182ad096d608ba84633c32c75ef3458f1d11e8f1", size = 70040, upload-time = "2025-08-31T20:41:57.543Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/a40e1488fdfa02d3f9a653a61a5935ea08b3c2225ee818db6a76c7ba9695/cattrs-25.3.0-py3-none-any.whl", hash = "sha256:9896e84e0a5bf723bc7b4b68f4481785367ce07a8a02e7e9ee6eb2819bc306ff", size = 70738, upload-time = "2025-10-07T12:26:06.603Z" }, ] [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.10.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/5b/b6ce21586237c77ce67d01dc5507039d444b630dd76611bbca2d8e5dcd91/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43", size = 164519, upload-time = "2025-10-05T04:12:15.808Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, + { url = "https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de", size = 163286, upload-time = "2025-10-05T04:12:14.03Z" }, ] [[package]] @@ -301,9 +300,9 @@ resolution-markers = [ dependencies = [ { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/15/8c916b4118ece2011c0c1365b64823ce361d352c460785402c78b8520ba8/cf_xarray-0.10.6.tar.gz", hash = "sha256:159236eca465453784ee7efa2a430d5e2092978db8a5d4d8b591f61d0639cb89", size = 513498, upload-time = "2025-06-20T18:19:18.526Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/15/8c916b4118ece2011c0c1365b64823ce361d352c460785402c78b8520ba8/cf_xarray-0.10.6.tar.gz", hash = "sha256:159236eca465453784ee7efa2a430d5e2092978db8a5d4d8b591f61d0639cb89", size = 513498 } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/55/2cce57427624814f4c6db8b14147fb73b86ed82e808d3dfd36426195071c/cf_xarray-0.10.6-py3-none-any.whl", hash = "sha256:39b457e47bb1557749ede115d1126ad9340eafb26ddeea0fef3a81149fc4d019", size = 70998, upload-time = "2025-06-20T18:19:17.054Z" }, + { url = "https://files.pythonhosted.org/packages/69/55/2cce57427624814f4c6db8b14147fb73b86ed82e808d3dfd36426195071c/cf_xarray-0.10.6-py3-none-any.whl", hash = "sha256:39b457e47bb1557749ede115d1126ad9340eafb26ddeea0fef3a81149fc4d019", size = 70998 }, ] [[package]] @@ -317,11 +316,11 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/2a/bdd43fe8dcb6000342173723e60d7f573280fd9886adc199d1a9b199a5ea/cf_xarray-0.10.9.tar.gz", hash = "sha256:36e829c63e42496e892b52faf1c5d6a9936857df3b3ad2f4fd86e06a17e6ec33", size = 683246, upload-time = "2025-09-09T15:12:01.406Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/2a/bdd43fe8dcb6000342173723e60d7f573280fd9886adc199d1a9b199a5ea/cf_xarray-0.10.9.tar.gz", hash = "sha256:36e829c63e42496e892b52faf1c5d6a9936857df3b3ad2f4fd86e06a17e6ec33", size = 683246 } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/01/2e486a570e095869a153c12381cb2c143eb0ed187067c3199306b33e5c36/cf_xarray-0.10.9-py3-none-any.whl", hash = "sha256:a41fa218e8f31b6c82c4687d92951f536186e288e5da6d56efd92a57b628eb18", size = 76487, upload-time = "2025-09-09T15:11:59.715Z" }, + { url = "https://files.pythonhosted.org/packages/41/01/2e486a570e095869a153c12381cb2c143eb0ed187067c3199306b33e5c36/cf_xarray-0.10.9-py3-none-any.whl", hash = "sha256:a41fa218e8f31b6c82c4687d92951f536186e288e5da6d56efd92a57b628eb18", size = 76487 }, ] [[package]] @@ -331,79 +330,79 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344 }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560 }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613 }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476 }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374 }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597 }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574 }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971 }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972 }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078 }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076 }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820 }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635 }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, ] [[package]] @@ -414,97 +413,97 @@ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/c8/1155d1d58003105307c7e5985f422ae5bcb2ca0cbc553cc828f3c5a934a7/cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f", size = 54631, upload-time = "2024-10-22T18:48:34.194Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/c8/1155d1d58003105307c7e5985f422ae5bcb2ca0cbc553cc828f3c5a934a7/cftime-1.6.4.post1.tar.gz", hash = "sha256:50ac76cc9f10ab7bd46e44a71c51a6927051b499b4407df4f29ab13d741b942f", size = 54631 } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/e3/1a56832b13ce0c5f3b798bf7bc60d4550fa1c514e04b613f9b0e48edc535/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d9bdeb9174962c9ca00015190bfd693de6b0ec3ec0b3dbc35c693a4f48efdcc", size = 1252052, upload-time = "2024-10-22T18:47:44.25Z" }, - { url = "https://files.pythonhosted.org/packages/5c/aa/f62ce24417ecb19f5ba1aa1dbe72394d11f11f5e53fc53497ccfaab83d3c/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e735cfd544878eb94d0108ff5a093bd1a332dba90f979a31a357756d609a90d5", size = 1289731, upload-time = "2024-10-22T18:47:46.52Z" }, - { url = "https://files.pythonhosted.org/packages/e4/21/0cf99e16e9953d17cc37286201922d07f17ffc1743dbc50d0c9e6f98ddda/cftime-1.6.4.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dcd1b140bf50da6775c56bd7ca179e84bd258b2f159b53eefd5c514b341f2bf", size = 1317229, upload-time = "2024-10-22T18:47:47.754Z" }, - { url = "https://files.pythonhosted.org/packages/68/0f/95ce359a3bd91a8ec9b79d4961753053c72a5115e820a072d451568684c3/cftime-1.6.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:e60b8f24b20753f7548f410f7510e28b941f336f84bd34e3cfd7874af6e70281", size = 189078, upload-time = "2024-10-22T18:47:48.867Z" }, - { url = "https://files.pythonhosted.org/packages/55/c6/72f8fb5ee057f33ab747ba361f1396d2839a4689669aabd6217bc38430f7/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ebdfd81726b0cfb8b524309224fa952898dfa177c13d5f6af5b18cefbf497d", size = 1379075, upload-time = "2024-10-22T18:47:53.338Z" }, - { url = "https://files.pythonhosted.org/packages/77/81/6b30815698ede50f89013f25e46d66ed3a290b8a2d6b97f95bacbbe1eb5c/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ea0965a4c87739aebd84fe8eed966e5809d10065eeffd35c99c274b6f8da15", size = 1415218, upload-time = "2024-10-22T18:47:54.763Z" }, - { url = "https://files.pythonhosted.org/packages/24/0d/73ab09a32da1478d3ef5f4ab6c59d42f2db2a2383b427c87e05ad81b71ad/cftime-1.6.4.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:800a18aea4e8cb2b206450397cb8a53b154798738af3cdd3c922ce1ca198b0e6", size = 1450704, upload-time = "2024-10-22T18:47:56.035Z" }, - { url = "https://files.pythonhosted.org/packages/79/b1/6551603f8ea31de55913c84e4def3c36670563bdea6e195fcc4b6225ddf7/cftime-1.6.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:5dcfc872f455db1f12eabe3c3ba98e93757cd60ed3526a53246e966ccde46c8a", size = 190200, upload-time = "2024-10-22T18:47:58.036Z" }, - { url = "https://files.pythonhosted.org/packages/9b/60/0db884c76311ecaaf31f628aa9358beae5fcb0fbbdc2eb0b790a93aa258f/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf17a1b36f62e9e73c4c9363dd811e1bbf1170f5ac26d343fb26012ccf482908", size = 1320215, upload-time = "2024-10-22T18:48:02.275Z" }, - { url = "https://files.pythonhosted.org/packages/8d/7d/2d5fc7af06da4f3bdea59a204f741bf7a30bc5019355991b2f083e557e4e/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e18021f421aa26527bad8688c1acf0c85fa72730beb6efce969c316743294f2", size = 1367426, upload-time = "2024-10-22T18:48:03.57Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ab/e8b26d05323fc5629356c82a7f64026248f121ea1361b49df441bbc8f2d7/cftime-1.6.4.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5835b9d622f9304d1c23a35603a0f068739f428d902860f25e6e7e5a1b7cd8ea", size = 1385593, upload-time = "2024-10-22T18:48:04.918Z" }, - { url = "https://files.pythonhosted.org/packages/af/7b/ca72a075a3f660315b031d62d39a3e9cfef71f7929da2621d5120077a75f/cftime-1.6.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:7f50bf0d1b664924aaee636eb2933746b942417d1f8b82ab6c1f6e8ba0da6885", size = 178918, upload-time = "2024-10-22T18:48:06.195Z" }, - { url = "https://files.pythonhosted.org/packages/ca/90/f5b26949899decce262fc76a1e64915b92050473114e0160cd6f7297f854/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da367b23eea7cf4df071c88e014a1600d6c5bbf22e3393a4af409903fa397e28", size = 1318113, upload-time = "2024-10-22T18:48:11.465Z" }, - { url = "https://files.pythonhosted.org/packages/c3/f8/6f13d37abb7ade46e65a08acc31af776a96dde0eb569e05d4c4b01422ba6/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0", size = 1366034, upload-time = "2024-10-22T18:48:13.154Z" }, - { url = "https://files.pythonhosted.org/packages/fa/08/335cb17f3b708f9a24f96ca4abb00889c7aa20b0ae273313e7c11faf1f97/cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4", size = 1390156, upload-time = "2024-10-22T18:48:15.22Z" }, - { url = "https://files.pythonhosted.org/packages/f3/2d/980323fb5ec1ef369604b61ba259a41d0336cc1a85b639ed7bd210bd1290/cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259", size = 178496, upload-time = "2024-10-22T18:48:16.8Z" }, + { url = "https://files.pythonhosted.org/packages/70/e3/1a56832b13ce0c5f3b798bf7bc60d4550fa1c514e04b613f9b0e48edc535/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d9bdeb9174962c9ca00015190bfd693de6b0ec3ec0b3dbc35c693a4f48efdcc", size = 1252052 }, + { url = "https://files.pythonhosted.org/packages/5c/aa/f62ce24417ecb19f5ba1aa1dbe72394d11f11f5e53fc53497ccfaab83d3c/cftime-1.6.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e735cfd544878eb94d0108ff5a093bd1a332dba90f979a31a357756d609a90d5", size = 1289731 }, + { url = "https://files.pythonhosted.org/packages/e4/21/0cf99e16e9953d17cc37286201922d07f17ffc1743dbc50d0c9e6f98ddda/cftime-1.6.4.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dcd1b140bf50da6775c56bd7ca179e84bd258b2f159b53eefd5c514b341f2bf", size = 1317229 }, + { url = "https://files.pythonhosted.org/packages/68/0f/95ce359a3bd91a8ec9b79d4961753053c72a5115e820a072d451568684c3/cftime-1.6.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:e60b8f24b20753f7548f410f7510e28b941f336f84bd34e3cfd7874af6e70281", size = 189078 }, + { url = "https://files.pythonhosted.org/packages/55/c6/72f8fb5ee057f33ab747ba361f1396d2839a4689669aabd6217bc38430f7/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ebdfd81726b0cfb8b524309224fa952898dfa177c13d5f6af5b18cefbf497d", size = 1379075 }, + { url = "https://files.pythonhosted.org/packages/77/81/6b30815698ede50f89013f25e46d66ed3a290b8a2d6b97f95bacbbe1eb5c/cftime-1.6.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ea0965a4c87739aebd84fe8eed966e5809d10065eeffd35c99c274b6f8da15", size = 1415218 }, + { url = "https://files.pythonhosted.org/packages/24/0d/73ab09a32da1478d3ef5f4ab6c59d42f2db2a2383b427c87e05ad81b71ad/cftime-1.6.4.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:800a18aea4e8cb2b206450397cb8a53b154798738af3cdd3c922ce1ca198b0e6", size = 1450704 }, + { url = "https://files.pythonhosted.org/packages/79/b1/6551603f8ea31de55913c84e4def3c36670563bdea6e195fcc4b6225ddf7/cftime-1.6.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:5dcfc872f455db1f12eabe3c3ba98e93757cd60ed3526a53246e966ccde46c8a", size = 190200 }, + { url = "https://files.pythonhosted.org/packages/9b/60/0db884c76311ecaaf31f628aa9358beae5fcb0fbbdc2eb0b790a93aa258f/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf17a1b36f62e9e73c4c9363dd811e1bbf1170f5ac26d343fb26012ccf482908", size = 1320215 }, + { url = "https://files.pythonhosted.org/packages/8d/7d/2d5fc7af06da4f3bdea59a204f741bf7a30bc5019355991b2f083e557e4e/cftime-1.6.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e18021f421aa26527bad8688c1acf0c85fa72730beb6efce969c316743294f2", size = 1367426 }, + { url = "https://files.pythonhosted.org/packages/5d/ab/e8b26d05323fc5629356c82a7f64026248f121ea1361b49df441bbc8f2d7/cftime-1.6.4.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5835b9d622f9304d1c23a35603a0f068739f428d902860f25e6e7e5a1b7cd8ea", size = 1385593 }, + { url = "https://files.pythonhosted.org/packages/af/7b/ca72a075a3f660315b031d62d39a3e9cfef71f7929da2621d5120077a75f/cftime-1.6.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:7f50bf0d1b664924aaee636eb2933746b942417d1f8b82ab6c1f6e8ba0da6885", size = 178918 }, + { url = "https://files.pythonhosted.org/packages/ca/90/f5b26949899decce262fc76a1e64915b92050473114e0160cd6f7297f854/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da367b23eea7cf4df071c88e014a1600d6c5bbf22e3393a4af409903fa397e28", size = 1318113 }, + { url = "https://files.pythonhosted.org/packages/c3/f8/6f13d37abb7ade46e65a08acc31af776a96dde0eb569e05d4c4b01422ba6/cftime-1.6.4.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6579c5c83cdf09d73aa94c7bc34925edd93c5f2c7dd28e074f568f7e376271a0", size = 1366034 }, + { url = "https://files.pythonhosted.org/packages/fa/08/335cb17f3b708f9a24f96ca4abb00889c7aa20b0ae273313e7c11faf1f97/cftime-1.6.4.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b731c7133d17b479ca0c3c46a7a04f96197f0a4d753f4c2284c3ff0447279b4", size = 1390156 }, + { url = "https://files.pythonhosted.org/packages/f3/2d/980323fb5ec1ef369604b61ba259a41d0336cc1a85b639ed7bd210bd1290/cftime-1.6.4.post1-cp313-cp313-win_amd64.whl", hash = "sha256:d2a8c223faea7f1248ab469cc0d7795dd46f2a423789038f439fee7190bae259", size = 178496 }, ] [[package]] name = "chardet" version = "5.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 }, ] [[package]] name = "charset-normalizer" version = "3.4.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/98/f3b8013223728a99b908c9344da3aa04ee6e3fa235f19409033eda92fb78/charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72", size = 207695, upload-time = "2025-08-09T07:55:36.452Z" }, - { url = "https://files.pythonhosted.org/packages/21/40/5188be1e3118c82dcb7c2a5ba101b783822cfb413a0268ed3be0468532de/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe", size = 147153, upload-time = "2025-08-09T07:55:38.467Z" }, - { url = "https://files.pythonhosted.org/packages/37/60/5d0d74bc1e1380f0b72c327948d9c2aca14b46a9efd87604e724260f384c/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601", size = 160428, upload-time = "2025-08-09T07:55:40.072Z" }, - { url = "https://files.pythonhosted.org/packages/85/9a/d891f63722d9158688de58d050c59dc3da560ea7f04f4c53e769de5140f5/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c", size = 157627, upload-time = "2025-08-09T07:55:41.706Z" }, - { url = "https://files.pythonhosted.org/packages/65/1a/7425c952944a6521a9cfa7e675343f83fd82085b8af2b1373a2409c683dc/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2", size = 152388, upload-time = "2025-08-09T07:55:43.262Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c9/a2c9c2a355a8594ce2446085e2ec97fd44d323c684ff32042e2a6b718e1d/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0", size = 150077, upload-time = "2025-08-09T07:55:44.903Z" }, - { url = "https://files.pythonhosted.org/packages/3b/38/20a1f44e4851aa1c9105d6e7110c9d020e093dfa5836d712a5f074a12bf7/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0", size = 161631, upload-time = "2025-08-09T07:55:46.346Z" }, - { url = "https://files.pythonhosted.org/packages/a4/fa/384d2c0f57edad03d7bec3ebefb462090d8905b4ff5a2d2525f3bb711fac/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0", size = 159210, upload-time = "2025-08-09T07:55:47.539Z" }, - { url = "https://files.pythonhosted.org/packages/33/9e/eca49d35867ca2db336b6ca27617deed4653b97ebf45dfc21311ce473c37/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a", size = 153739, upload-time = "2025-08-09T07:55:48.744Z" }, - { url = "https://files.pythonhosted.org/packages/2a/91/26c3036e62dfe8de8061182d33be5025e2424002125c9500faff74a6735e/charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f", size = 99825, upload-time = "2025-08-09T07:55:50.305Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c6/f05db471f81af1fa01839d44ae2a8bfeec8d2a8b4590f16c4e7393afd323/charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669", size = 107452, upload-time = "2025-08-09T07:55:51.461Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, - { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, - { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, - { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, - { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, - { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, - { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, - { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, - { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, - { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, - { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, - { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, - { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, - { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, - { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, - { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, - { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, - { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, - { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, - { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, - { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, - { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, - { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, - { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, - { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, - { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, - { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, - { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/98/f3b8013223728a99b908c9344da3aa04ee6e3fa235f19409033eda92fb78/charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72", size = 207695 }, + { url = "https://files.pythonhosted.org/packages/21/40/5188be1e3118c82dcb7c2a5ba101b783822cfb413a0268ed3be0468532de/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe", size = 147153 }, + { url = "https://files.pythonhosted.org/packages/37/60/5d0d74bc1e1380f0b72c327948d9c2aca14b46a9efd87604e724260f384c/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601", size = 160428 }, + { url = "https://files.pythonhosted.org/packages/85/9a/d891f63722d9158688de58d050c59dc3da560ea7f04f4c53e769de5140f5/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c", size = 157627 }, + { url = "https://files.pythonhosted.org/packages/65/1a/7425c952944a6521a9cfa7e675343f83fd82085b8af2b1373a2409c683dc/charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2", size = 152388 }, + { url = "https://files.pythonhosted.org/packages/f0/c9/a2c9c2a355a8594ce2446085e2ec97fd44d323c684ff32042e2a6b718e1d/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0", size = 150077 }, + { url = "https://files.pythonhosted.org/packages/3b/38/20a1f44e4851aa1c9105d6e7110c9d020e093dfa5836d712a5f074a12bf7/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0", size = 161631 }, + { url = "https://files.pythonhosted.org/packages/a4/fa/384d2c0f57edad03d7bec3ebefb462090d8905b4ff5a2d2525f3bb711fac/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0", size = 159210 }, + { url = "https://files.pythonhosted.org/packages/33/9e/eca49d35867ca2db336b6ca27617deed4653b97ebf45dfc21311ce473c37/charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a", size = 153739 }, + { url = "https://files.pythonhosted.org/packages/2a/91/26c3036e62dfe8de8061182d33be5025e2424002125c9500faff74a6735e/charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f", size = 99825 }, + { url = "https://files.pythonhosted.org/packages/e2/c6/f05db471f81af1fa01839d44ae2a8bfeec8d2a8b4590f16c4e7393afd323/charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669", size = 107452 }, + { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483 }, + { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520 }, + { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876 }, + { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083 }, + { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295 }, + { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379 }, + { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018 }, + { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430 }, + { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600 }, + { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616 }, + { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108 }, + { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655 }, + { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223 }, + { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366 }, + { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104 }, + { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830 }, + { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854 }, + { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670 }, + { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501 }, + { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173 }, + { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822 }, + { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543 }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326 }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008 }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196 }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819 }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350 }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644 }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468 }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187 }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580 }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366 }, + { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342 }, + { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995 }, + { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640 }, + { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636 }, + { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939 }, + { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580 }, + { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870 }, + { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797 }, + { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224 }, + { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086 }, + { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400 }, + { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175 }, ] [[package]] @@ -514,27 +513,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295, upload-time = "2025-09-18T17:32:22.42Z" }, + { url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295 }, ] [[package]] name = "cloudpickle" version = "3.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/39/069100b84d7418bc358d81669d5748efb14b9cceacd2f9c75f550424132f/cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64", size = 22113, upload-time = "2025-01-14T17:02:05.085Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/39/069100b84d7418bc358d81669d5748efb14b9cceacd2f9c75f550424132f/cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64", size = 22113 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e", size = 20992, upload-time = "2025-01-14T17:02:02.417Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e", size = 20992 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } 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" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] @@ -545,18 +544,18 @@ dependencies = [ { name = "toolz" }, { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/0d/a0b2fd781050d29c9df64ac6df30b5f18b775724b79779f56fc5a8298fe9/Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72", size = 11386, upload-time = "2021-12-27T21:58:56.123Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/0d/a0b2fd781050d29c9df64ac6df30b5f18b775724b79779f56fc5a8298fe9/Columnar-1.4.1.tar.gz", hash = "sha256:c3cb57273333b2ff9cfaafc86f09307419330c97faa88dcfe23df05e6fbb9c72", size = 11386 } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/00/a17a5657bf090b9dffdb310ac273c553a38f9252f60224da9fe62d9b60e9/Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798", size = 11845, upload-time = "2021-12-27T21:58:54.388Z" }, + { url = "https://files.pythonhosted.org/packages/06/00/a17a5657bf090b9dffdb310ac273c553a38f9252f60224da9fe62d9b60e9/Columnar-1.4.1-py3-none-any.whl", hash = "sha256:8efb692a7e6ca07dcc8f4ea889960421331a5dffa8e5af81f0a67ad8ea1fc798", size = 11845 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319 } 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" }, + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294 }, ] [[package]] @@ -569,52 +568,52 @@ resolution-markers = [ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061, upload-time = "2025-04-15T17:34:55.961Z" }, - { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956, upload-time = "2025-04-15T17:35:00.992Z" }, - { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872, upload-time = "2025-04-15T17:35:06.177Z" }, - { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027, upload-time = "2025-04-15T17:35:11.244Z" }, - { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641, upload-time = "2025-04-15T17:35:26.701Z" }, - { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075, upload-time = "2025-04-15T17:35:43.204Z" }, - { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534, upload-time = "2025-04-15T17:35:46.554Z" }, - { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188, upload-time = "2025-04-15T17:35:50.064Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053, upload-time = "2025-04-15T17:36:03.235Z" }, - { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985, upload-time = "2025-04-15T17:36:08.275Z" }, - { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750, upload-time = "2025-04-15T17:36:13.29Z" }, - { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246, upload-time = "2025-04-15T17:36:18.329Z" }, - { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728, upload-time = "2025-04-15T17:36:33.878Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762, upload-time = "2025-04-15T17:36:51.295Z" }, - { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196, upload-time = "2025-04-15T17:36:55.002Z" }, - { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017, upload-time = "2025-04-15T17:36:58.576Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688, upload-time = "2025-04-15T17:37:11.481Z" }, - { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331, upload-time = "2025-04-15T17:37:18.212Z" }, - { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963, upload-time = "2025-04-15T17:37:22.76Z" }, - { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681, upload-time = "2025-04-15T17:37:33.001Z" }, - { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674, upload-time = "2025-04-15T17:37:48.64Z" }, - { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480, upload-time = "2025-04-15T17:38:06.7Z" }, - { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489, upload-time = "2025-04-15T17:38:10.338Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042, upload-time = "2025-04-15T17:38:14.239Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694, upload-time = "2025-04-15T17:38:28.238Z" }, - { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986, upload-time = "2025-04-15T17:38:33.502Z" }, - { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060, upload-time = "2025-04-15T17:38:38.672Z" }, - { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747, upload-time = "2025-04-15T17:38:43.712Z" }, - { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895, upload-time = "2025-04-15T17:39:00.224Z" }, - { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098, upload-time = "2025-04-15T17:43:29.649Z" }, - { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535, upload-time = "2025-04-15T17:44:44.532Z" }, - { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096, upload-time = "2025-04-15T17:44:48.194Z" }, - { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443, upload-time = "2025-04-15T17:43:44.522Z" }, - { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865, upload-time = "2025-04-15T17:43:49.545Z" }, - { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162, upload-time = "2025-04-15T17:43:54.203Z" }, - { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355, upload-time = "2025-04-15T17:44:01.025Z" }, - { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935, upload-time = "2025-04-15T17:44:17.322Z" }, - { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168, upload-time = "2025-04-15T17:44:33.43Z" }, - { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550, upload-time = "2025-04-15T17:44:37.092Z" }, - { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214, upload-time = "2025-04-15T17:44:40.827Z" }, - { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101, upload-time = "2025-04-15T17:45:04.165Z" }, - { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599, upload-time = "2025-04-15T17:45:08.456Z" }, - { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729, upload-time = "2025-04-15T17:45:20.166Z" }, - { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791, upload-time = "2025-04-15T17:45:24.794Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061 }, + { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956 }, + { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872 }, + { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027 }, + { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641 }, + { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075 }, + { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534 }, + { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188 }, + { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053 }, + { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985 }, + { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750 }, + { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246 }, + { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728 }, + { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762 }, + { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196 }, + { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688 }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331 }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963 }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681 }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674 }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480 }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489 }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042 }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, + { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101 }, + { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599 }, + { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729 }, + { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791 }, ] [[package]] @@ -630,164 +629,164 @@ resolution-markers = [ dependencies = [ { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222, upload-time = "2025-07-26T12:01:05.688Z" }, - { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234, upload-time = "2025-07-26T12:01:07.054Z" }, - { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555, upload-time = "2025-07-26T12:01:08.801Z" }, - { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238, upload-time = "2025-07-26T12:01:10.319Z" }, - { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218, upload-time = "2025-07-26T12:01:12.659Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867, upload-time = "2025-07-26T12:01:15.533Z" }, - { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677, upload-time = "2025-07-26T12:01:17.088Z" }, - { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234, upload-time = "2025-07-26T12:01:18.256Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123, upload-time = "2025-07-26T12:01:19.848Z" }, - { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, - { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, - { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, - { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, - { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, - { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, - { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, - { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, - { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, - { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, - { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, - { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, - { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, - { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, - { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, - { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, - { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, - { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, - { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, - { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, - { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, - { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, - { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, - { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, - { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, - { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, - { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, - { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, - { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, - { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, - { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, - { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, - { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, - { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, - { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207, upload-time = "2025-07-26T12:02:57.468Z" }, - { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/2e/dd4ced42fefac8470661d7cb7e264808425e6c5d56d175291e93890cce09/contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7", size = 329222 }, + { url = "https://files.pythonhosted.org/packages/f2/74/cc6ec2548e3d276c71389ea4802a774b7aa3558223b7bade3f25787fafc2/contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1", size = 377234 }, + { url = "https://files.pythonhosted.org/packages/03/b3/64ef723029f917410f75c09da54254c5f9ea90ef89b143ccadb09df14c15/contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a", size = 380555 }, + { url = "https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db", size = 355238 }, + { url = "https://files.pythonhosted.org/packages/98/56/f914f0dd678480708a04cfd2206e7c382533249bc5001eb9f58aa693e200/contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620", size = 1326218 }, + { url = "https://files.pythonhosted.org/packages/fb/d7/4a972334a0c971acd5172389671113ae82aa7527073980c38d5868ff1161/contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f", size = 1392867 }, + { url = "https://files.pythonhosted.org/packages/75/3e/f2cc6cd56dc8cff46b1a56232eabc6feea52720083ea71ab15523daab796/contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff", size = 183677 }, + { url = "https://files.pythonhosted.org/packages/98/4b/9bd370b004b5c9d8045c6c33cf65bae018b27aca550a3f657cdc99acdbd8/contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42", size = 225234 }, + { url = "https://files.pythonhosted.org/packages/d9/b6/71771e02c2e004450c12b1120a5f488cad2e4d5b590b1af8bad060360fe4/contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470", size = 193123 }, + { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653 }, + { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536 }, + { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397 }, + { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601 }, + { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288 }, + { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386 }, + { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018 }, + { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567 }, + { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655 }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672 }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234 }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169 }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859 }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062 }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932 }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024 }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578 }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524 }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751 }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486 }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106 }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548 }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297 }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023 }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157 }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570 }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713 }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810 }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871 }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264 }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819 }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650 }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833 }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692 }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424 }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300 }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748 }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554 }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118 }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555 }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295 }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027 }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428 }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331 }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831 }, + { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202 }, + { url = "https://files.pythonhosted.org/packages/3c/37/21972a15834d90bfbfb009b9d004779bd5a07a0ec0234e5ba8f64d5736f4/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989", size = 329207 }, + { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315 }, ] [[package]] name = "coverage" version = "7.10.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987 }, + { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388 }, + { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148 }, + { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958 }, + { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819 }, + { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754 }, + { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860 }, + { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877 }, + { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108 }, + { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752 }, + { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497 }, + { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392 }, + { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102 }, + { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505 }, + { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898 }, + { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831 }, + { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937 }, + { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021 }, + { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626 }, + { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682 }, + { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402 }, + { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320 }, + { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536 }, + { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425 }, + { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103 }, + { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290 }, + { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515 }, + { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020 }, + { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769 }, + { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901 }, + { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413 }, + { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820 }, + { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941 }, + { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519 }, + { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375 }, + { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699 }, + { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512 }, + { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147 }, + { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320 }, + { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575 }, + { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568 }, + { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174 }, + { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447 }, + { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779 }, + { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604 }, + { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497 }, + { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111 }, + { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746 }, + { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541 }, + { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170 }, + { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029 }, + { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259 }, + { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592 }, + { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768 }, + { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995 }, + { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546 }, + { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544 }, + { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308 }, + { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920 }, + { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434 }, + { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403 }, + { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469 }, + { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731 }, + { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302 }, + { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578 }, + { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629 }, + { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162 }, + { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517 }, + { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632 }, + { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520 }, + { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455 }, + { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287 }, + { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946 }, + { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009 }, + { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804 }, + { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384 }, + { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266 }, + { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767 }, + { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931 }, + { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186 }, + { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470 }, + { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626 }, + { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386 }, + { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852 }, + { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534 }, + { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784 }, + { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905 }, + { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922 }, + { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952 }, ] [package.optional-dependencies] @@ -799,61 +798,61 @@ toml = [ name = "crc32c" version = "2.7.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7f/4c/4e40cc26347ac8254d3f25b9f94710b8e8df24ee4dddc1ba41907a88a94d/crc32c-2.7.1.tar.gz", hash = "sha256:f91b144a21eef834d64178e01982bb9179c354b3e9e5f4c803b0e5096384968c", size = 45712, upload-time = "2024-09-24T06:20:17.553Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/fd/8972a70d7c39f37240f554c348fd9e15a4d8d0a548b1bc3139cd4e1cfb66/crc32c-2.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f0fadc741e79dc705e2d9ee967473e8a061d26b04310ed739f1ee292f33674f", size = 54110, upload-time = "2024-09-24T06:18:06.758Z" }, - { url = "https://files.pythonhosted.org/packages/35/be/0b045f84c7acc36312a91211190bf84e73a0bbd30f21cbaf3670c4dba9b2/crc32c-2.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91ced31055d26d59385d708bbd36689e1a1d604d4b0ceb26767eb5a83156f85d", size = 51792, upload-time = "2024-09-24T06:18:07.767Z" }, - { url = "https://files.pythonhosted.org/packages/8c/e2/acaabbc172b7c45ec62f273cd2e214f626e2b4324eca9152dea6095a26f4/crc32c-2.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ffa999b72e3c17f6a066ae9e970b40f8c65f38716e436c39a33b809bc6ed9f", size = 52884, upload-time = "2024-09-24T06:18:09.449Z" }, - { url = "https://files.pythonhosted.org/packages/60/40/963ba3d2ec0d8e4a2ceaf90e8f9cb10911a926fe75d4329e013a51343122/crc32c-2.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e80114dd7f462297e54d5da1b9ff472e5249c5a2b406aa51c371bb0edcbf76bd", size = 53888, upload-time = "2024-09-24T06:18:11.039Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b8/8a093b9dc1792b2cec9805e1428e97be0338a45ac9fae2fd5911613eacb1/crc32c-2.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:676f5b46da268b5190f9fb91b3f037a00d114b411313664438525db876adc71f", size = 52098, upload-time = "2024-09-24T06:18:12.522Z" }, - { url = "https://files.pythonhosted.org/packages/26/76/a254ddb4ae83b545f6e08af384d62268a99d00f5c58a468754f8416468ce/crc32c-2.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8d0e660c9ed269e90692993a4457a932fc22c9cc96caf79dd1f1a84da85bb312", size = 52716, upload-time = "2024-09-24T06:18:14.118Z" }, - { url = "https://files.pythonhosted.org/packages/b6/cb/6062806e5b6cb8d9af3c62945a5a07fa22c3b4dc59084d2fa2e533f9aaa1/crc32c-2.7.1-cp310-cp310-win32.whl", hash = "sha256:17a2c3f8c6d85b04b5511af827b5dbbda4e672d188c0b9f20a8156e93a1aa7b6", size = 38363, upload-time = "2024-09-24T06:18:15.603Z" }, - { url = "https://files.pythonhosted.org/packages/7f/a9/dc935e26c8d7bd4722bc1312ed88f443e6e36816b46835b4464baa3f7c6d/crc32c-2.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3208764c29688f91a35392073229975dd7687b6cb9f76b919dae442cabcd5126", size = 39795, upload-time = "2024-09-24T06:18:17.182Z" }, - { url = "https://files.pythonhosted.org/packages/aa/92/c878aaba81c431fcd93a059e9f6c90db397c585742793f0bf6e0c531cc67/crc32c-2.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96b794fd11945298fdd5eb1290a812efb497c14bc42592c5c992ca077458eeba", size = 54879, upload-time = "2024-09-24T06:18:23.085Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f5/ab828ab3907095e06b18918408748950a9f726ee2b37be1b0839fb925ee1/crc32c-2.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df7194dd3c0efb5a21f5d70595b7a8b4fd9921fbbd597d6d8e7a11eca3e2d27", size = 52588, upload-time = "2024-09-24T06:18:24.463Z" }, - { url = "https://files.pythonhosted.org/packages/6a/2b/9e29e9ac4c4213d60491db09487125db358cd9263490fbadbd55e48fbe03/crc32c-2.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d698eec444b18e296a104d0b9bb6c596c38bdcb79d24eba49604636e9d747305", size = 53674, upload-time = "2024-09-24T06:18:25.624Z" }, - { url = "https://files.pythonhosted.org/packages/79/ed/df3c4c14bf1b29f5c9b52d51fb6793e39efcffd80b2941d994e8f7f5f688/crc32c-2.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e07cf10ef852d219d179333fd706d1c415626f1f05e60bd75acf0143a4d8b225", size = 54691, upload-time = "2024-09-24T06:18:26.578Z" }, - { url = "https://files.pythonhosted.org/packages/0c/47/4917af3c9c1df2fff28bbfa6492673c9adeae5599dcc207bbe209847489c/crc32c-2.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d2a051f296e6e92e13efee3b41db388931cdb4a2800656cd1ed1d9fe4f13a086", size = 52896, upload-time = "2024-09-24T06:18:28.174Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6f/26fc3dda5835cda8f6cd9d856afe62bdeae428de4c34fea200b0888e8835/crc32c-2.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1738259802978cdf428f74156175da6a5fdfb7256f647fdc0c9de1bc6cd7173", size = 53554, upload-time = "2024-09-24T06:18:29.104Z" }, - { url = "https://files.pythonhosted.org/packages/56/3e/6f39127f7027c75d130c0ba348d86a6150dff23761fbc6a5f71659f4521e/crc32c-2.7.1-cp311-cp311-win32.whl", hash = "sha256:f7786d219a1a1bf27d0aa1869821d11a6f8e90415cfffc1e37791690d4a848a1", size = 38370, upload-time = "2024-09-24T06:18:30.013Z" }, - { url = "https://files.pythonhosted.org/packages/c9/fb/1587c2705a3a47a3d0067eecf9a6fec510761c96dec45c7b038fb5c8ff46/crc32c-2.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:887f6844bb3ad35f0778cd10793ad217f7123a5422e40041231b8c4c7329649d", size = 39795, upload-time = "2024-09-24T06:18:31.324Z" }, - { url = "https://files.pythonhosted.org/packages/4d/41/4aedc961893f26858ab89fc772d0eaba91f9870f19eaa933999dcacb94ec/crc32c-2.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ef661b34e9f25991fface7f9ad85e81bbc1b3fe3b916fd58c893eabe2fa0b8", size = 54675, upload-time = "2024-09-24T06:18:35.954Z" }, - { url = "https://files.pythonhosted.org/packages/d6/63/8cabf09b7e39b9fec8f7010646c8b33057fc8d67e6093b3cc15563d23533/crc32c-2.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571aa4429444b5d7f588e4377663592145d2d25eb1635abb530f1281794fc7c9", size = 52386, upload-time = "2024-09-24T06:18:36.896Z" }, - { url = "https://files.pythonhosted.org/packages/79/13/13576941bf7cf95026abae43d8427c812c0054408212bf8ed490eda846b0/crc32c-2.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02a3bd67dea95cdb25844aaf44ca2e1b0c1fd70b287ad08c874a95ef4bb38db", size = 53495, upload-time = "2024-09-24T06:18:38.099Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b6/55ffb26d0517d2d6c6f430ce2ad36ae7647c995c5bfd7abce7f32bb2bad1/crc32c-2.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d17637c4867672cb8adeea007294e3c3df9d43964369516cfe2c1f47ce500a", size = 54456, upload-time = "2024-09-24T06:18:39.051Z" }, - { url = "https://files.pythonhosted.org/packages/c2/1a/5562e54cb629ecc5543d3604dba86ddfc7c7b7bf31d64005b38a00d31d31/crc32c-2.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4a400ac3c69a32e180d8753fd7ec7bccb80ade7ab0812855dce8a208e72495f", size = 52647, upload-time = "2024-09-24T06:18:40.021Z" }, - { url = "https://files.pythonhosted.org/packages/48/ec/ce4138eaf356cd9aae60bbe931755e5e0151b3eca5f491fce6c01b97fd59/crc32c-2.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:588587772e55624dd9c7a906ec9e8773ae0b6ac5e270fc0bc84ee2758eba90d5", size = 53332, upload-time = "2024-09-24T06:18:40.925Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b5/144b42cd838a901175a916078781cb2c3c9f977151c9ba085aebd6d15b22/crc32c-2.7.1-cp312-cp312-win32.whl", hash = "sha256:9f14b60e5a14206e8173dd617fa0c4df35e098a305594082f930dae5488da428", size = 38371, upload-time = "2024-09-24T06:18:42.711Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c4/7929dcd5d9b57db0cce4fe6f6c191049380fc6d8c9b9f5581967f4ec018e/crc32c-2.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:7c810a246660a24dc818047dc5f89c7ce7b2814e1e08a8e99993f4103f7219e8", size = 39805, upload-time = "2024-09-24T06:18:43.6Z" }, - { url = "https://files.pythonhosted.org/packages/a9/0d/3e797d1ed92d357a6a4c5b41cea15a538b27a8fdf18c7863747eb50b73ad/crc32c-2.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c277f9d16a3283e064d54854af0976b72abaa89824955579b2b3f37444f89aae", size = 54641, upload-time = "2024-09-24T06:18:47.207Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d3/4ddeef755caaa75680c559562b6c71f5910fee4c4f3a2eb5ea8b57f0e48c/crc32c-2.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881af0478a01331244e27197356929edbdeaef6a9f81b5c6bacfea18d2139289", size = 52338, upload-time = "2024-09-24T06:18:49.31Z" }, - { url = "https://files.pythonhosted.org/packages/01/cf/32f019be5de9f6e180926a50ee5f08648e686c7d9a59f2c5d0806a77b1c7/crc32c-2.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724d5ff4d29ff093a983ae656be3307093706d850ea2a233bf29fcacc335d945", size = 53447, upload-time = "2024-09-24T06:18:50.296Z" }, - { url = "https://files.pythonhosted.org/packages/b2/8b/92f3f62f3bafe8f7ab4af7bfb7246dc683fd11ec0d6dfb73f91e09079f69/crc32c-2.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2416c4d88696ac322632555c0f81ab35e15f154bc96055da6cf110d642dbc10", size = 54484, upload-time = "2024-09-24T06:18:51.311Z" }, - { url = "https://files.pythonhosted.org/packages/98/b2/113a50f8781f76af5ac65ffdb907e72bddbe974de8e02247f0d58bc48040/crc32c-2.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:60254251b88ec9b9795215f0f9ec015a6b5eef8b2c5fba1267c672d83c78fc02", size = 52703, upload-time = "2024-09-24T06:18:52.488Z" }, - { url = "https://files.pythonhosted.org/packages/b4/6c/309229e9acda8cf36a8ff4061d70b54d905f79b7037e16883ce6590a24ab/crc32c-2.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:edefc0e46f3c37372183f70338e5bdee42f6789b62fcd36ec53aa933e9dfbeaf", size = 53367, upload-time = "2024-09-24T06:18:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2a/6c6324d920396e1bd9f3efbe8753da071be0ca52bd22d6c82d446b8d6975/crc32c-2.7.1-cp313-cp313-win32.whl", hash = "sha256:813af8111218970fe2adb833c5e5239f091b9c9e76f03b4dd91aaba86e99b499", size = 38377, upload-time = "2024-09-24T06:18:54.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/a0/f01ccfab538db07ef3f6b4ede46357ff147a81dd4f3c59ca6a34c791a549/crc32c-2.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:7d9ede7be8e4ec1c9e90aaf6884decbeef10e3473e6ddac032706d710cab5888", size = 39803, upload-time = "2024-09-24T06:18:55.419Z" }, - { url = "https://files.pythonhosted.org/packages/03/de/fef962e898a953558fe1c55141644553e84ef4190693a31244c59a0856c7/crc32c-2.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03a92551a343702629af91f78d205801219692b6909f8fa126b830e332bfb0e0", size = 54223, upload-time = "2024-09-24T06:18:59.675Z" }, - { url = "https://files.pythonhosted.org/packages/21/14/fceca1a6f45c0a1814fe8602a65657b75c27425162445925ba87438cad6b/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb9424ec1a8ca54763155a703e763bcede82e6569fe94762614bb2de1412d4e1", size = 51588, upload-time = "2024-09-24T06:19:00.938Z" }, - { url = "https://files.pythonhosted.org/packages/13/3b/13d40a7dfbf9ef05c84a0da45544ee72080dca4ce090679e5105689984bd/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88732070f6175530db04e0bb36880ac45c33d49f8ac43fa0e50cfb1830049d23", size = 52678, upload-time = "2024-09-24T06:19:02.661Z" }, - { url = "https://files.pythonhosted.org/packages/36/09/65ffc4fb9fa60ff6714eeb50a92284a4525e5943f0b040b572c0c76368c1/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a20dfc27995f568f64775eea2bbb58ae269f1a1144561df5e4a4955f79db32", size = 53847, upload-time = "2024-09-24T06:19:03.705Z" }, - { url = "https://files.pythonhosted.org/packages/24/71/938e926085b7288da052db7c84416f3ce25e71baf7ab5b63824c7bcb6f22/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f7186d098bfd2cff25eac6880b7c7ad80431b90610036131c1c7dd0eab42a332", size = 51860, upload-time = "2024-09-24T06:19:04.726Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d8/4526d5380189d6f2fa27256c204100f30214fe402f47cf6e9fb9a91ab890/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:55a77e29a265418fa34bef15bd0f2c60afae5348988aaf35ed163b4bbf93cf37", size = 52508, upload-time = "2024-09-24T06:19:05.731Z" }, - { url = "https://files.pythonhosted.org/packages/19/30/15f7e35176488b77e5b88751947d321d603fccac273099ace27c7b2d50a6/crc32c-2.7.1-cp313-cp313t-win32.whl", hash = "sha256:ae38a4b6aa361595d81cab441405fbee905c72273e80a1c010fb878ae77ac769", size = 38319, upload-time = "2024-09-24T06:19:07.233Z" }, - { url = "https://files.pythonhosted.org/packages/19/c4/0b3eee04dac195f4730d102d7a9fbea894ae7a32ce075f84336df96a385d/crc32c-2.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:eee2a43b663feb6c79a6c1c6e5eae339c2b72cfac31ee54ec0209fa736cf7ee5", size = 39781, upload-time = "2024-09-24T06:19:08.182Z" }, - { url = "https://files.pythonhosted.org/packages/03/27/f1dab3066c90e9424d22bc942eecdc2e77267f7e805ddb5a2419bbcbace6/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30004a7383538ef93bda9b22f7b3805bc0aa5625ab2675690e1b676b19417d4b", size = 38184, upload-time = "2024-09-24T06:19:51.466Z" }, - { url = "https://files.pythonhosted.org/packages/2c/f3/479acfa99803c261cdd6b44f37b55bd77bdbce6163ec1f51b2014b095495/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01b0983aa87f517c12418f9898ecf2083bf86f4ea04122e053357c3edb0d73f", size = 38256, upload-time = "2024-09-24T06:19:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/7b/31/4edb9c45457c54d51ca539f850761f31b7ab764177902b6f3247ff8c1b75/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb2b963c42128b38872e9ed63f04a73ce1ff89a1dfad7ea38add6fe6296497b8", size = 37868, upload-time = "2024-09-24T06:19:54.159Z" }, - { url = "https://files.pythonhosted.org/packages/a6/b0/5680db08eff8f2116a4f9bd949f8bbe9cf260e1c3451228f54c60b110d79/crc32c-2.7.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cdd5e576fee5d255c1e68a4dae4420f21e57e6f05900b38d5ae47c713fc3330d", size = 39826, upload-time = "2024-09-24T06:19:55.4Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/7f/4c/4e40cc26347ac8254d3f25b9f94710b8e8df24ee4dddc1ba41907a88a94d/crc32c-2.7.1.tar.gz", hash = "sha256:f91b144a21eef834d64178e01982bb9179c354b3e9e5f4c803b0e5096384968c", size = 45712 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/fd/8972a70d7c39f37240f554c348fd9e15a4d8d0a548b1bc3139cd4e1cfb66/crc32c-2.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f0fadc741e79dc705e2d9ee967473e8a061d26b04310ed739f1ee292f33674f", size = 54110 }, + { url = "https://files.pythonhosted.org/packages/35/be/0b045f84c7acc36312a91211190bf84e73a0bbd30f21cbaf3670c4dba9b2/crc32c-2.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91ced31055d26d59385d708bbd36689e1a1d604d4b0ceb26767eb5a83156f85d", size = 51792 }, + { url = "https://files.pythonhosted.org/packages/8c/e2/acaabbc172b7c45ec62f273cd2e214f626e2b4324eca9152dea6095a26f4/crc32c-2.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ffa999b72e3c17f6a066ae9e970b40f8c65f38716e436c39a33b809bc6ed9f", size = 52884 }, + { url = "https://files.pythonhosted.org/packages/60/40/963ba3d2ec0d8e4a2ceaf90e8f9cb10911a926fe75d4329e013a51343122/crc32c-2.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e80114dd7f462297e54d5da1b9ff472e5249c5a2b406aa51c371bb0edcbf76bd", size = 53888 }, + { url = "https://files.pythonhosted.org/packages/f2/b8/8a093b9dc1792b2cec9805e1428e97be0338a45ac9fae2fd5911613eacb1/crc32c-2.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:676f5b46da268b5190f9fb91b3f037a00d114b411313664438525db876adc71f", size = 52098 }, + { url = "https://files.pythonhosted.org/packages/26/76/a254ddb4ae83b545f6e08af384d62268a99d00f5c58a468754f8416468ce/crc32c-2.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8d0e660c9ed269e90692993a4457a932fc22c9cc96caf79dd1f1a84da85bb312", size = 52716 }, + { url = "https://files.pythonhosted.org/packages/b6/cb/6062806e5b6cb8d9af3c62945a5a07fa22c3b4dc59084d2fa2e533f9aaa1/crc32c-2.7.1-cp310-cp310-win32.whl", hash = "sha256:17a2c3f8c6d85b04b5511af827b5dbbda4e672d188c0b9f20a8156e93a1aa7b6", size = 38363 }, + { url = "https://files.pythonhosted.org/packages/7f/a9/dc935e26c8d7bd4722bc1312ed88f443e6e36816b46835b4464baa3f7c6d/crc32c-2.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3208764c29688f91a35392073229975dd7687b6cb9f76b919dae442cabcd5126", size = 39795 }, + { url = "https://files.pythonhosted.org/packages/aa/92/c878aaba81c431fcd93a059e9f6c90db397c585742793f0bf6e0c531cc67/crc32c-2.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96b794fd11945298fdd5eb1290a812efb497c14bc42592c5c992ca077458eeba", size = 54879 }, + { url = "https://files.pythonhosted.org/packages/5b/f5/ab828ab3907095e06b18918408748950a9f726ee2b37be1b0839fb925ee1/crc32c-2.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df7194dd3c0efb5a21f5d70595b7a8b4fd9921fbbd597d6d8e7a11eca3e2d27", size = 52588 }, + { url = "https://files.pythonhosted.org/packages/6a/2b/9e29e9ac4c4213d60491db09487125db358cd9263490fbadbd55e48fbe03/crc32c-2.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d698eec444b18e296a104d0b9bb6c596c38bdcb79d24eba49604636e9d747305", size = 53674 }, + { url = "https://files.pythonhosted.org/packages/79/ed/df3c4c14bf1b29f5c9b52d51fb6793e39efcffd80b2941d994e8f7f5f688/crc32c-2.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e07cf10ef852d219d179333fd706d1c415626f1f05e60bd75acf0143a4d8b225", size = 54691 }, + { url = "https://files.pythonhosted.org/packages/0c/47/4917af3c9c1df2fff28bbfa6492673c9adeae5599dcc207bbe209847489c/crc32c-2.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d2a051f296e6e92e13efee3b41db388931cdb4a2800656cd1ed1d9fe4f13a086", size = 52896 }, + { url = "https://files.pythonhosted.org/packages/1b/6f/26fc3dda5835cda8f6cd9d856afe62bdeae428de4c34fea200b0888e8835/crc32c-2.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1738259802978cdf428f74156175da6a5fdfb7256f647fdc0c9de1bc6cd7173", size = 53554 }, + { url = "https://files.pythonhosted.org/packages/56/3e/6f39127f7027c75d130c0ba348d86a6150dff23761fbc6a5f71659f4521e/crc32c-2.7.1-cp311-cp311-win32.whl", hash = "sha256:f7786d219a1a1bf27d0aa1869821d11a6f8e90415cfffc1e37791690d4a848a1", size = 38370 }, + { url = "https://files.pythonhosted.org/packages/c9/fb/1587c2705a3a47a3d0067eecf9a6fec510761c96dec45c7b038fb5c8ff46/crc32c-2.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:887f6844bb3ad35f0778cd10793ad217f7123a5422e40041231b8c4c7329649d", size = 39795 }, + { url = "https://files.pythonhosted.org/packages/4d/41/4aedc961893f26858ab89fc772d0eaba91f9870f19eaa933999dcacb94ec/crc32c-2.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ef661b34e9f25991fface7f9ad85e81bbc1b3fe3b916fd58c893eabe2fa0b8", size = 54675 }, + { url = "https://files.pythonhosted.org/packages/d6/63/8cabf09b7e39b9fec8f7010646c8b33057fc8d67e6093b3cc15563d23533/crc32c-2.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571aa4429444b5d7f588e4377663592145d2d25eb1635abb530f1281794fc7c9", size = 52386 }, + { url = "https://files.pythonhosted.org/packages/79/13/13576941bf7cf95026abae43d8427c812c0054408212bf8ed490eda846b0/crc32c-2.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02a3bd67dea95cdb25844aaf44ca2e1b0c1fd70b287ad08c874a95ef4bb38db", size = 53495 }, + { url = "https://files.pythonhosted.org/packages/3d/b6/55ffb26d0517d2d6c6f430ce2ad36ae7647c995c5bfd7abce7f32bb2bad1/crc32c-2.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d17637c4867672cb8adeea007294e3c3df9d43964369516cfe2c1f47ce500a", size = 54456 }, + { url = "https://files.pythonhosted.org/packages/c2/1a/5562e54cb629ecc5543d3604dba86ddfc7c7b7bf31d64005b38a00d31d31/crc32c-2.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4a400ac3c69a32e180d8753fd7ec7bccb80ade7ab0812855dce8a208e72495f", size = 52647 }, + { url = "https://files.pythonhosted.org/packages/48/ec/ce4138eaf356cd9aae60bbe931755e5e0151b3eca5f491fce6c01b97fd59/crc32c-2.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:588587772e55624dd9c7a906ec9e8773ae0b6ac5e270fc0bc84ee2758eba90d5", size = 53332 }, + { url = "https://files.pythonhosted.org/packages/5e/b5/144b42cd838a901175a916078781cb2c3c9f977151c9ba085aebd6d15b22/crc32c-2.7.1-cp312-cp312-win32.whl", hash = "sha256:9f14b60e5a14206e8173dd617fa0c4df35e098a305594082f930dae5488da428", size = 38371 }, + { url = "https://files.pythonhosted.org/packages/ae/c4/7929dcd5d9b57db0cce4fe6f6c191049380fc6d8c9b9f5581967f4ec018e/crc32c-2.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:7c810a246660a24dc818047dc5f89c7ce7b2814e1e08a8e99993f4103f7219e8", size = 39805 }, + { url = "https://files.pythonhosted.org/packages/a9/0d/3e797d1ed92d357a6a4c5b41cea15a538b27a8fdf18c7863747eb50b73ad/crc32c-2.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c277f9d16a3283e064d54854af0976b72abaa89824955579b2b3f37444f89aae", size = 54641 }, + { url = "https://files.pythonhosted.org/packages/a7/d3/4ddeef755caaa75680c559562b6c71f5910fee4c4f3a2eb5ea8b57f0e48c/crc32c-2.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881af0478a01331244e27197356929edbdeaef6a9f81b5c6bacfea18d2139289", size = 52338 }, + { url = "https://files.pythonhosted.org/packages/01/cf/32f019be5de9f6e180926a50ee5f08648e686c7d9a59f2c5d0806a77b1c7/crc32c-2.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724d5ff4d29ff093a983ae656be3307093706d850ea2a233bf29fcacc335d945", size = 53447 }, + { url = "https://files.pythonhosted.org/packages/b2/8b/92f3f62f3bafe8f7ab4af7bfb7246dc683fd11ec0d6dfb73f91e09079f69/crc32c-2.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2416c4d88696ac322632555c0f81ab35e15f154bc96055da6cf110d642dbc10", size = 54484 }, + { url = "https://files.pythonhosted.org/packages/98/b2/113a50f8781f76af5ac65ffdb907e72bddbe974de8e02247f0d58bc48040/crc32c-2.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:60254251b88ec9b9795215f0f9ec015a6b5eef8b2c5fba1267c672d83c78fc02", size = 52703 }, + { url = "https://files.pythonhosted.org/packages/b4/6c/309229e9acda8cf36a8ff4061d70b54d905f79b7037e16883ce6590a24ab/crc32c-2.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:edefc0e46f3c37372183f70338e5bdee42f6789b62fcd36ec53aa933e9dfbeaf", size = 53367 }, + { url = "https://files.pythonhosted.org/packages/b5/2a/6c6324d920396e1bd9f3efbe8753da071be0ca52bd22d6c82d446b8d6975/crc32c-2.7.1-cp313-cp313-win32.whl", hash = "sha256:813af8111218970fe2adb833c5e5239f091b9c9e76f03b4dd91aaba86e99b499", size = 38377 }, + { url = "https://files.pythonhosted.org/packages/db/a0/f01ccfab538db07ef3f6b4ede46357ff147a81dd4f3c59ca6a34c791a549/crc32c-2.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:7d9ede7be8e4ec1c9e90aaf6884decbeef10e3473e6ddac032706d710cab5888", size = 39803 }, + { url = "https://files.pythonhosted.org/packages/03/de/fef962e898a953558fe1c55141644553e84ef4190693a31244c59a0856c7/crc32c-2.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03a92551a343702629af91f78d205801219692b6909f8fa126b830e332bfb0e0", size = 54223 }, + { url = "https://files.pythonhosted.org/packages/21/14/fceca1a6f45c0a1814fe8602a65657b75c27425162445925ba87438cad6b/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb9424ec1a8ca54763155a703e763bcede82e6569fe94762614bb2de1412d4e1", size = 51588 }, + { url = "https://files.pythonhosted.org/packages/13/3b/13d40a7dfbf9ef05c84a0da45544ee72080dca4ce090679e5105689984bd/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88732070f6175530db04e0bb36880ac45c33d49f8ac43fa0e50cfb1830049d23", size = 52678 }, + { url = "https://files.pythonhosted.org/packages/36/09/65ffc4fb9fa60ff6714eeb50a92284a4525e5943f0b040b572c0c76368c1/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a20dfc27995f568f64775eea2bbb58ae269f1a1144561df5e4a4955f79db32", size = 53847 }, + { url = "https://files.pythonhosted.org/packages/24/71/938e926085b7288da052db7c84416f3ce25e71baf7ab5b63824c7bcb6f22/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f7186d098bfd2cff25eac6880b7c7ad80431b90610036131c1c7dd0eab42a332", size = 51860 }, + { url = "https://files.pythonhosted.org/packages/3c/d8/4526d5380189d6f2fa27256c204100f30214fe402f47cf6e9fb9a91ab890/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:55a77e29a265418fa34bef15bd0f2c60afae5348988aaf35ed163b4bbf93cf37", size = 52508 }, + { url = "https://files.pythonhosted.org/packages/19/30/15f7e35176488b77e5b88751947d321d603fccac273099ace27c7b2d50a6/crc32c-2.7.1-cp313-cp313t-win32.whl", hash = "sha256:ae38a4b6aa361595d81cab441405fbee905c72273e80a1c010fb878ae77ac769", size = 38319 }, + { url = "https://files.pythonhosted.org/packages/19/c4/0b3eee04dac195f4730d102d7a9fbea894ae7a32ce075f84336df96a385d/crc32c-2.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:eee2a43b663feb6c79a6c1c6e5eae339c2b72cfac31ee54ec0209fa736cf7ee5", size = 39781 }, + { url = "https://files.pythonhosted.org/packages/03/27/f1dab3066c90e9424d22bc942eecdc2e77267f7e805ddb5a2419bbcbace6/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30004a7383538ef93bda9b22f7b3805bc0aa5625ab2675690e1b676b19417d4b", size = 38184 }, + { url = "https://files.pythonhosted.org/packages/2c/f3/479acfa99803c261cdd6b44f37b55bd77bdbce6163ec1f51b2014b095495/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01b0983aa87f517c12418f9898ecf2083bf86f4ea04122e053357c3edb0d73f", size = 38256 }, + { url = "https://files.pythonhosted.org/packages/7b/31/4edb9c45457c54d51ca539f850761f31b7ab764177902b6f3247ff8c1b75/crc32c-2.7.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb2b963c42128b38872e9ed63f04a73ce1ff89a1dfad7ea38add6fe6296497b8", size = 37868 }, + { url = "https://files.pythonhosted.org/packages/a6/b0/5680db08eff8f2116a4f9bd949f8bbe9cf260e1c3451228f54c60b110d79/crc32c-2.7.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cdd5e576fee5d255c1e68a4dae4420f21e57e6f05900b38d5ae47c713fc3330d", size = 39826 }, ] [[package]] name = "cycler" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, ] [[package]] @@ -870,9 +869,9 @@ dependencies = [ { name = "pyyaml" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/87/87af914aaf5bfaa0ee8b9da060a836477d8cc49fe4978637da8b6a47d8a3/dask-2025.9.1.tar.gz", hash = "sha256:718df73e1fd3d7e2b8546e0f04ce08e1ed7f9aa3da1eecd0c1f44c8b6d52f7e0", size = 10973663, upload-time = "2025-09-16T10:54:59.452Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/87/87af914aaf5bfaa0ee8b9da060a836477d8cc49fe4978637da8b6a47d8a3/dask-2025.9.1.tar.gz", hash = "sha256:718df73e1fd3d7e2b8546e0f04ce08e1ed7f9aa3da1eecd0c1f44c8b6d52f7e0", size = 10973663 } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/60/3fcd548bed6d25016933e4b2984c9b82e4c1e760380e03d4100b1b4726e0/dask-2025.9.1-py3-none-any.whl", hash = "sha256:2a8a7dc933caaea2f47745a65a6ec93d9e616e12aab53b4f03ee161d31939110", size = 1479274, upload-time = "2025-09-16T10:54:46.159Z" }, + { url = "https://files.pythonhosted.org/packages/25/60/3fcd548bed6d25016933e4b2984c9b82e4c1e760380e03d4100b1b4726e0/dask-2025.9.1-py3-none-any.whl", hash = "sha256:2a8a7dc933caaea2f47745a65a6ec93d9e616e12aab53b4f03ee161d31939110", size = 1479274 }, ] [[package]] @@ -883,47 +882,47 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/64/a4/f71d9cf3a5ac257c993b5ca3f93df5f7fb395c725e7f1e6479d2514173c3/dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0", size = 32227 } 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" }, + { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686 }, ] [[package]] name = "debugpy" version = "1.8.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129, upload-time = "2025-09-17T16:33:20.633Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/36/b57c6e818d909f6e59c0182252921cf435e0951126a97e11de37e72ab5e1/debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542", size = 2098021, upload-time = "2025-09-17T16:33:22.556Z" }, - { url = "https://files.pythonhosted.org/packages/be/01/0363c7efdd1e9febd090bb13cee4fb1057215b157b2979a4ca5ccb678217/debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3", size = 3087399, upload-time = "2025-09-17T16:33:24.292Z" }, - { url = "https://files.pythonhosted.org/packages/79/bc/4a984729674aa9a84856650438b9665f9a1d5a748804ac6f37932ce0d4aa/debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4", size = 5230292, upload-time = "2025-09-17T16:33:26.137Z" }, - { url = "https://files.pythonhosted.org/packages/5d/19/2b9b3092d0cf81a5aa10c86271999453030af354d1a5a7d6e34c574515d7/debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a", size = 5261885, upload-time = "2025-09-17T16:33:27.592Z" }, - { url = "https://files.pythonhosted.org/packages/d8/53/3af72b5c159278c4a0cf4cffa518675a0e73bdb7d1cac0239b815502d2ce/debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840", size = 2207154, upload-time = "2025-09-17T16:33:29.457Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6d/204f407df45600e2245b4a39860ed4ba32552330a0b3f5f160ae4cc30072/debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f", size = 3170322, upload-time = "2025-09-17T16:33:30.837Z" }, - { url = "https://files.pythonhosted.org/packages/f2/13/1b8f87d39cf83c6b713de2620c31205299e6065622e7dd37aff4808dd410/debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da", size = 5155078, upload-time = "2025-09-17T16:33:33.331Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c5/c012c60a2922cc91caa9675d0ddfbb14ba59e1e36228355f41cab6483469/debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4", size = 5179011, upload-time = "2025-09-17T16:33:35.711Z" }, - { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522, upload-time = "2025-09-17T16:33:38.466Z" }, - { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417, upload-time = "2025-09-17T16:33:41.299Z" }, - { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130, upload-time = "2025-09-17T16:33:43.554Z" }, - { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053, upload-time = "2025-09-17T16:33:53.033Z" }, - { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386, upload-time = "2025-09-17T16:33:54.594Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100, upload-time = "2025-09-17T16:33:56.353Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002, upload-time = "2025-09-17T16:33:58.231Z" }, - { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047, upload-time = "2025-09-17T16:34:00.586Z" }, - { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899, upload-time = "2025-09-17T16:34:02.657Z" }, - { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254, upload-time = "2025-09-17T16:34:04.486Z" }, - { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203, upload-time = "2025-09-17T16:34:06.65Z" }, - { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493, upload-time = "2025-09-17T16:34:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload-time = "2025-09-17T16:34:25.835Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/15/ad/71e708ff4ca377c4230530d6a7aa7992592648c122a2cd2b321cf8b35a76/debugpy-1.8.17.tar.gz", hash = "sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e", size = 1644129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/36/b57c6e818d909f6e59c0182252921cf435e0951126a97e11de37e72ab5e1/debugpy-1.8.17-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542", size = 2098021 }, + { url = "https://files.pythonhosted.org/packages/be/01/0363c7efdd1e9febd090bb13cee4fb1057215b157b2979a4ca5ccb678217/debugpy-1.8.17-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3", size = 3087399 }, + { url = "https://files.pythonhosted.org/packages/79/bc/4a984729674aa9a84856650438b9665f9a1d5a748804ac6f37932ce0d4aa/debugpy-1.8.17-cp310-cp310-win32.whl", hash = "sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4", size = 5230292 }, + { url = "https://files.pythonhosted.org/packages/5d/19/2b9b3092d0cf81a5aa10c86271999453030af354d1a5a7d6e34c574515d7/debugpy-1.8.17-cp310-cp310-win_amd64.whl", hash = "sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a", size = 5261885 }, + { url = "https://files.pythonhosted.org/packages/d8/53/3af72b5c159278c4a0cf4cffa518675a0e73bdb7d1cac0239b815502d2ce/debugpy-1.8.17-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840", size = 2207154 }, + { url = "https://files.pythonhosted.org/packages/8f/6d/204f407df45600e2245b4a39860ed4ba32552330a0b3f5f160ae4cc30072/debugpy-1.8.17-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f", size = 3170322 }, + { url = "https://files.pythonhosted.org/packages/f2/13/1b8f87d39cf83c6b713de2620c31205299e6065622e7dd37aff4808dd410/debugpy-1.8.17-cp311-cp311-win32.whl", hash = "sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da", size = 5155078 }, + { url = "https://files.pythonhosted.org/packages/c2/c5/c012c60a2922cc91caa9675d0ddfbb14ba59e1e36228355f41cab6483469/debugpy-1.8.17-cp311-cp311-win_amd64.whl", hash = "sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4", size = 5179011 }, + { url = "https://files.pythonhosted.org/packages/08/2b/9d8e65beb2751876c82e1aceb32f328c43ec872711fa80257c7674f45650/debugpy-1.8.17-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d", size = 2549522 }, + { url = "https://files.pythonhosted.org/packages/b4/78/eb0d77f02971c05fca0eb7465b18058ba84bd957062f5eec82f941ac792a/debugpy-1.8.17-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc", size = 4309417 }, + { url = "https://files.pythonhosted.org/packages/37/42/c40f1d8cc1fed1e75ea54298a382395b8b937d923fcf41ab0797a554f555/debugpy-1.8.17-cp312-cp312-win32.whl", hash = "sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf", size = 5277130 }, + { url = "https://files.pythonhosted.org/packages/72/22/84263b205baad32b81b36eac076de0cdbe09fe2d0637f5b32243dc7c925b/debugpy-1.8.17-cp312-cp312-win_amd64.whl", hash = "sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464", size = 5319053 }, + { url = "https://files.pythonhosted.org/packages/50/76/597e5cb97d026274ba297af8d89138dfd9e695767ba0e0895edb20963f40/debugpy-1.8.17-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464", size = 2538386 }, + { url = "https://files.pythonhosted.org/packages/5f/60/ce5c34fcdfec493701f9d1532dba95b21b2f6394147234dce21160bd923f/debugpy-1.8.17-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088", size = 4292100 }, + { url = "https://files.pythonhosted.org/packages/e8/95/7873cf2146577ef71d2a20bf553f12df865922a6f87b9e8ee1df04f01785/debugpy-1.8.17-cp313-cp313-win32.whl", hash = "sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83", size = 5277002 }, + { url = "https://files.pythonhosted.org/packages/46/11/18c79a1cee5ff539a94ec4aa290c1c069a5580fd5cfd2fb2e282f8e905da/debugpy-1.8.17-cp313-cp313-win_amd64.whl", hash = "sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420", size = 5319047 }, + { url = "https://files.pythonhosted.org/packages/de/45/115d55b2a9da6de812696064ceb505c31e952c5d89c4ed1d9bb983deec34/debugpy-1.8.17-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1", size = 2536899 }, + { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254 }, + { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203 }, + { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493 }, + { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210 }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, ] [[package]] @@ -933,36 +932,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "orderly-set" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/76/36c9aab3d5c19a94091f7c6c6e784efca50d87b124bf026c36e94719f33c/deepdiff-8.6.1.tar.gz", hash = "sha256:ec56d7a769ca80891b5200ec7bd41eec300ced91ebcc7797b41eb2b3f3ff643a", size = 634054, upload-time = "2025-09-03T19:40:41.461Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/76/36c9aab3d5c19a94091f7c6c6e784efca50d87b124bf026c36e94719f33c/deepdiff-8.6.1.tar.gz", hash = "sha256:ec56d7a769ca80891b5200ec7bd41eec300ced91ebcc7797b41eb2b3f3ff643a", size = 634054 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/e6/efe534ef0952b531b630780e19cabd416e2032697019d5295defc6ef9bd9/deepdiff-8.6.1-py3-none-any.whl", hash = "sha256:ee8708a7f7d37fb273a541fa24ad010ed484192cd0c4ffc0fa0ed5e2d4b9e78b", size = 91378, upload-time = "2025-09-03T19:40:39.679Z" }, + { url = "https://files.pythonhosted.org/packages/f7/e6/efe534ef0952b531b630780e19cabd416e2032697019d5295defc6ef9bd9/deepdiff-8.6.1-py3-none-any.whl", hash = "sha256:ee8708a7f7d37fb273a541fa24ad010ed484192cd0c4ffc0fa0ed5e2d4b9e78b", size = 91378 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } 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" }, + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, ] [[package]] name = "dill" version = "0.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976 } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, + { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668 }, ] [[package]] name = "distlib" version = "0.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, ] [[package]] @@ -972,9 +971,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/71/80cc718ff6d7abfbabacb1f57aaa42e9c1552bfdd01e64ddd704e4a03638/donfig-0.8.1.post1.tar.gz", hash = "sha256:3bef3413a4c1c601b585e8d297256d0c1470ea012afa6e8461dc28bfb7c23f52", size = 19506, upload-time = "2024-05-23T14:14:31.513Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/71/80cc718ff6d7abfbabacb1f57aaa42e9c1552bfdd01e64ddd704e4a03638/donfig-0.8.1.post1.tar.gz", hash = "sha256:3bef3413a4c1c601b585e8d297256d0c1470ea012afa6e8461dc28bfb7c23f52", size = 19506 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl", hash = "sha256:2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d", size = 21592, upload-time = "2024-05-23T14:13:55.283Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl", hash = "sha256:2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d", size = 21592 }, ] [[package]] @@ -984,108 +983,108 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749 } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488 } 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" }, + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317 }, ] [[package]] name = "fasteners" version = "0.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/18/7881a99ba5244bfc82f06017316ffe93217dbbbcfa52b887caa1d4f2a6d3/fasteners-0.20.tar.gz", hash = "sha256:55dce8792a41b56f727ba6e123fcaee77fd87e638a6863cec00007bfea84c8d8", size = 25087, upload-time = "2025-08-11T10:19:37.785Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/18/7881a99ba5244bfc82f06017316ffe93217dbbbcfa52b887caa1d4f2a6d3/fasteners-0.20.tar.gz", hash = "sha256:55dce8792a41b56f727ba6e123fcaee77fd87e638a6863cec00007bfea84c8d8", size = 25087 } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/ac/e5d886f892666d2d1e5cb8c1a41146e1d79ae8896477b1153a21711d3b44/fasteners-0.20-py3-none-any.whl", hash = "sha256:9422c40d1e350e4259f509fb2e608d6bc43c0136f79a00db1b49046029d0b3b7", size = 18702, upload-time = "2025-08-11T10:19:35.716Z" }, + { url = "https://files.pythonhosted.org/packages/51/ac/e5d886f892666d2d1e5cb8c1a41146e1d79ae8896477b1153a21711d3b44/fasteners-0.20-py3-none-any.whl", hash = "sha256:9422c40d1e350e4259f509fb2e608d6bc43c0136f79a00db1b49046029d0b3b7", size = 18702 }, ] [[package]] name = "fastjsonschema" version = "2.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, + { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024 }, ] [[package]] name = "filelock" version = "3.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, ] [[package]] name = "fonttools" version = "4.60.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4b/42/97a13e47a1e51a5a7142475bbcf5107fe3a68fc34aef331c897d5fb98ad0/fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9", size = 3559823, upload-time = "2025-09-29T21:13:27.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/18/e5970aa96c8fad1cb19a9479cc3b7602c0c98d250fcdc06a5da994309c50/fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c", size = 4864572, upload-time = "2025-09-29T21:11:05.096Z" }, - { url = "https://files.pythonhosted.org/packages/ce/20/9b2b4051b6ec6689480787d506b5003f72648f50972a92d04527a456192c/fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea", size = 4794635, upload-time = "2025-09-29T21:11:08.651Z" }, - { url = "https://files.pythonhosted.org/packages/10/52/c791f57347c1be98f8345e3dca4ac483eb97666dd7c47f3059aeffab8b59/fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652", size = 4843878, upload-time = "2025-09-29T21:11:10.893Z" }, - { url = "https://files.pythonhosted.org/packages/69/e9/35c24a8d01644cee8c090a22fad34d5b61d1e0a8ecbc9945ad785ebf2e9e/fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a", size = 4954555, upload-time = "2025-09-29T21:11:13.24Z" }, - { url = "https://files.pythonhosted.org/packages/f7/86/fb1e994971be4bdfe3a307de6373ef69a9df83fb66e3faa9c8114893d4cc/fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce", size = 2232019, upload-time = "2025-09-29T21:11:15.73Z" }, - { url = "https://files.pythonhosted.org/packages/40/84/62a19e2bd56f0e9fb347486a5b26376bade4bf6bbba64dda2c103bd08c94/fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038", size = 2276803, upload-time = "2025-09-29T21:11:18.152Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/1934b537c86fcf99f9761823f1fc37a98fbd54568e8e613f29a90fed95a9/fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914", size = 5042189, upload-time = "2025-09-29T21:11:25.061Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d2/9f4e4c4374dd1daa8367784e1bd910f18ba886db1d6b825b12edf6db3edc/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1", size = 4978683, upload-time = "2025-09-29T21:11:27.693Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c4/0fb2dfd1ecbe9a07954cc13414713ed1eab17b1c0214ef07fc93df234a47/fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d", size = 5021372, upload-time = "2025-09-29T21:11:30.257Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d5/495fc7ae2fab20223cc87179a8f50f40f9a6f821f271ba8301ae12bb580f/fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa", size = 5132562, upload-time = "2025-09-29T21:11:32.737Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fa/021dab618526323c744e0206b3f5c8596a2e7ae9aa38db5948a131123e83/fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258", size = 2230288, upload-time = "2025-09-29T21:11:35.015Z" }, - { url = "https://files.pythonhosted.org/packages/bb/78/0e1a6d22b427579ea5c8273e1c07def2f325b977faaf60bb7ddc01456cb1/fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf", size = 2278184, upload-time = "2025-09-29T21:11:37.434Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ca/4bb48a26ed95a1e7eba175535fe5805887682140ee0a0d10a88e1de84208/fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c", size = 4923716, upload-time = "2025-09-29T21:11:43.893Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9f/2cb82999f686c1d1ddf06f6ae1a9117a880adbec113611cc9d22b2fdd465/fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401", size = 4968175, upload-time = "2025-09-29T21:11:46.439Z" }, - { url = "https://files.pythonhosted.org/packages/18/79/be569699e37d166b78e6218f2cde8c550204f2505038cdd83b42edc469b9/fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903", size = 4911031, upload-time = "2025-09-29T21:11:48.977Z" }, - { url = "https://files.pythonhosted.org/packages/cc/9f/89411cc116effaec5260ad519162f64f9c150e5522a27cbb05eb62d0c05b/fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed", size = 5062966, upload-time = "2025-09-29T21:11:54.344Z" }, - { url = "https://files.pythonhosted.org/packages/62/a1/f888221934b5731d46cb9991c7a71f30cb1f97c0ef5fcf37f8da8fce6c8e/fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6", size = 2218750, upload-time = "2025-09-29T21:11:56.601Z" }, - { url = "https://files.pythonhosted.org/packages/88/8f/a55b5550cd33cd1028601df41acd057d4be20efa5c958f417b0c0613924d/fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383", size = 2267026, upload-time = "2025-09-29T21:11:58.852Z" }, - { url = "https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c", size = 4903082, upload-time = "2025-09-29T21:12:06.382Z" }, - { url = "https://files.pythonhosted.org/packages/04/05/06b1455e4bc653fcb2117ac3ef5fa3a8a14919b93c60742d04440605d058/fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77", size = 4960125, upload-time = "2025-09-29T21:12:09.314Z" }, - { url = "https://files.pythonhosted.org/packages/8e/37/f3b840fcb2666f6cb97038793606bdd83488dca2d0b0fc542ccc20afa668/fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199", size = 4901454, upload-time = "2025-09-29T21:12:11.931Z" }, - { url = "https://files.pythonhosted.org/packages/fd/9e/eb76f77e82f8d4a46420aadff12cec6237751b0fb9ef1de373186dcffb5f/fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c", size = 5044495, upload-time = "2025-09-29T21:12:15.241Z" }, - { url = "https://files.pythonhosted.org/packages/f8/b3/cede8f8235d42ff7ae891bae8d619d02c8ac9fd0cfc450c5927a6200c70d/fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272", size = 2217028, upload-time = "2025-09-29T21:12:17.96Z" }, - { url = "https://files.pythonhosted.org/packages/75/4d/b022c1577807ce8b31ffe055306ec13a866f2337ecee96e75b24b9b753ea/fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac", size = 2266200, upload-time = "2025-09-29T21:12:20.14Z" }, - { url = "https://files.pythonhosted.org/packages/3d/2e/d4831caa96d85a84dd0da1d9f90d81cec081f551e0ea216df684092c6c97/fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537", size = 4843490, upload-time = "2025-09-29T21:12:29.123Z" }, - { url = "https://files.pythonhosted.org/packages/49/13/5e2ea7c7a101b6fc3941be65307ef8df92cbbfa6ec4804032baf1893b434/fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003", size = 4944184, upload-time = "2025-09-29T21:12:31.414Z" }, - { url = "https://files.pythonhosted.org/packages/0c/2b/cf9603551c525b73fc47c52ee0b82a891579a93d9651ed694e4e2cd08bb8/fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08", size = 4890218, upload-time = "2025-09-29T21:12:33.936Z" }, - { url = "https://files.pythonhosted.org/packages/fd/2f/933d2352422e25f2376aae74f79eaa882a50fb3bfef3c0d4f50501267101/fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99", size = 4999324, upload-time = "2025-09-29T21:12:36.637Z" }, - { url = "https://files.pythonhosted.org/packages/38/99/234594c0391221f66216bc2c886923513b3399a148defaccf81dc3be6560/fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6", size = 2220861, upload-time = "2025-09-29T21:12:39.108Z" }, - { url = "https://files.pythonhosted.org/packages/3e/1d/edb5b23726dde50fc4068e1493e4fc7658eeefcaf75d4c5ffce067d07ae5/fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987", size = 2270934, upload-time = "2025-09-29T21:12:41.339Z" }, - { url = "https://files.pythonhosted.org/packages/9b/b5/e9bcf51980f98e59bb5bb7c382a63c6f6cac0eec5f67de6d8f2322382065/fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801", size = 4849758, upload-time = "2025-09-29T21:12:48.694Z" }, - { url = "https://files.pythonhosted.org/packages/e3/dc/1d2cf7d1cba82264b2f8385db3f5960e3d8ce756b4dc65b700d2c496f7e9/fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc", size = 5085598, upload-time = "2025-09-29T21:12:51.081Z" }, - { url = "https://files.pythonhosted.org/packages/5d/4d/279e28ba87fb20e0c69baf72b60bbf1c4d873af1476806a7b5f2b7fac1ff/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc", size = 4957603, upload-time = "2025-09-29T21:12:53.423Z" }, - { url = "https://files.pythonhosted.org/packages/78/d4/ff19976305e0c05aa3340c805475abb00224c954d3c65e82c0a69633d55d/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed", size = 4974184, upload-time = "2025-09-29T21:12:55.962Z" }, - { url = "https://files.pythonhosted.org/packages/63/22/8553ff6166f5cd21cfaa115aaacaa0dc73b91c079a8cfd54a482cbc0f4f5/fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259", size = 2282241, upload-time = "2025-09-29T21:12:58.179Z" }, - { url = "https://files.pythonhosted.org/packages/8a/cb/fa7b4d148e11d5a72761a22e595344133e83a9507a4c231df972e657579b/fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c", size = 2345760, upload-time = "2025-09-29T21:13:00.375Z" }, - { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/4b/42/97a13e47a1e51a5a7142475bbcf5107fe3a68fc34aef331c897d5fb98ad0/fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9", size = 3559823 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/18/e5970aa96c8fad1cb19a9479cc3b7602c0c98d250fcdc06a5da994309c50/fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c", size = 4864572 }, + { url = "https://files.pythonhosted.org/packages/ce/20/9b2b4051b6ec6689480787d506b5003f72648f50972a92d04527a456192c/fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea", size = 4794635 }, + { url = "https://files.pythonhosted.org/packages/10/52/c791f57347c1be98f8345e3dca4ac483eb97666dd7c47f3059aeffab8b59/fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652", size = 4843878 }, + { url = "https://files.pythonhosted.org/packages/69/e9/35c24a8d01644cee8c090a22fad34d5b61d1e0a8ecbc9945ad785ebf2e9e/fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a", size = 4954555 }, + { url = "https://files.pythonhosted.org/packages/f7/86/fb1e994971be4bdfe3a307de6373ef69a9df83fb66e3faa9c8114893d4cc/fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce", size = 2232019 }, + { url = "https://files.pythonhosted.org/packages/40/84/62a19e2bd56f0e9fb347486a5b26376bade4bf6bbba64dda2c103bd08c94/fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038", size = 2276803 }, + { url = "https://files.pythonhosted.org/packages/94/dd/1934b537c86fcf99f9761823f1fc37a98fbd54568e8e613f29a90fed95a9/fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914", size = 5042189 }, + { url = "https://files.pythonhosted.org/packages/d2/d2/9f4e4c4374dd1daa8367784e1bd910f18ba886db1d6b825b12edf6db3edc/fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1", size = 4978683 }, + { url = "https://files.pythonhosted.org/packages/cc/c4/0fb2dfd1ecbe9a07954cc13414713ed1eab17b1c0214ef07fc93df234a47/fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d", size = 5021372 }, + { url = "https://files.pythonhosted.org/packages/0c/d5/495fc7ae2fab20223cc87179a8f50f40f9a6f821f271ba8301ae12bb580f/fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa", size = 5132562 }, + { url = "https://files.pythonhosted.org/packages/bc/fa/021dab618526323c744e0206b3f5c8596a2e7ae9aa38db5948a131123e83/fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258", size = 2230288 }, + { url = "https://files.pythonhosted.org/packages/bb/78/0e1a6d22b427579ea5c8273e1c07def2f325b977faaf60bb7ddc01456cb1/fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf", size = 2278184 }, + { url = "https://files.pythonhosted.org/packages/c0/ca/4bb48a26ed95a1e7eba175535fe5805887682140ee0a0d10a88e1de84208/fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c", size = 4923716 }, + { url = "https://files.pythonhosted.org/packages/b8/9f/2cb82999f686c1d1ddf06f6ae1a9117a880adbec113611cc9d22b2fdd465/fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401", size = 4968175 }, + { url = "https://files.pythonhosted.org/packages/18/79/be569699e37d166b78e6218f2cde8c550204f2505038cdd83b42edc469b9/fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903", size = 4911031 }, + { url = "https://files.pythonhosted.org/packages/cc/9f/89411cc116effaec5260ad519162f64f9c150e5522a27cbb05eb62d0c05b/fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed", size = 5062966 }, + { url = "https://files.pythonhosted.org/packages/62/a1/f888221934b5731d46cb9991c7a71f30cb1f97c0ef5fcf37f8da8fce6c8e/fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6", size = 2218750 }, + { url = "https://files.pythonhosted.org/packages/88/8f/a55b5550cd33cd1028601df41acd057d4be20efa5c958f417b0c0613924d/fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383", size = 2267026 }, + { url = "https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c", size = 4903082 }, + { url = "https://files.pythonhosted.org/packages/04/05/06b1455e4bc653fcb2117ac3ef5fa3a8a14919b93c60742d04440605d058/fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77", size = 4960125 }, + { url = "https://files.pythonhosted.org/packages/8e/37/f3b840fcb2666f6cb97038793606bdd83488dca2d0b0fc542ccc20afa668/fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199", size = 4901454 }, + { url = "https://files.pythonhosted.org/packages/fd/9e/eb76f77e82f8d4a46420aadff12cec6237751b0fb9ef1de373186dcffb5f/fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c", size = 5044495 }, + { url = "https://files.pythonhosted.org/packages/f8/b3/cede8f8235d42ff7ae891bae8d619d02c8ac9fd0cfc450c5927a6200c70d/fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272", size = 2217028 }, + { url = "https://files.pythonhosted.org/packages/75/4d/b022c1577807ce8b31ffe055306ec13a866f2337ecee96e75b24b9b753ea/fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac", size = 2266200 }, + { url = "https://files.pythonhosted.org/packages/3d/2e/d4831caa96d85a84dd0da1d9f90d81cec081f551e0ea216df684092c6c97/fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537", size = 4843490 }, + { url = "https://files.pythonhosted.org/packages/49/13/5e2ea7c7a101b6fc3941be65307ef8df92cbbfa6ec4804032baf1893b434/fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003", size = 4944184 }, + { url = "https://files.pythonhosted.org/packages/0c/2b/cf9603551c525b73fc47c52ee0b82a891579a93d9651ed694e4e2cd08bb8/fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08", size = 4890218 }, + { url = "https://files.pythonhosted.org/packages/fd/2f/933d2352422e25f2376aae74f79eaa882a50fb3bfef3c0d4f50501267101/fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99", size = 4999324 }, + { url = "https://files.pythonhosted.org/packages/38/99/234594c0391221f66216bc2c886923513b3399a148defaccf81dc3be6560/fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6", size = 2220861 }, + { url = "https://files.pythonhosted.org/packages/3e/1d/edb5b23726dde50fc4068e1493e4fc7658eeefcaf75d4c5ffce067d07ae5/fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987", size = 2270934 }, + { url = "https://files.pythonhosted.org/packages/9b/b5/e9bcf51980f98e59bb5bb7c382a63c6f6cac0eec5f67de6d8f2322382065/fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801", size = 4849758 }, + { url = "https://files.pythonhosted.org/packages/e3/dc/1d2cf7d1cba82264b2f8385db3f5960e3d8ce756b4dc65b700d2c496f7e9/fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc", size = 5085598 }, + { url = "https://files.pythonhosted.org/packages/5d/4d/279e28ba87fb20e0c69baf72b60bbf1c4d873af1476806a7b5f2b7fac1ff/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc", size = 4957603 }, + { url = "https://files.pythonhosted.org/packages/78/d4/ff19976305e0c05aa3340c805475abb00224c954d3c65e82c0a69633d55d/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed", size = 4974184 }, + { url = "https://files.pythonhosted.org/packages/63/22/8553ff6166f5cd21cfaa115aaacaa0dc73b91c079a8cfd54a482cbc0f4f5/fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259", size = 2282241 }, + { url = "https://files.pythonhosted.org/packages/8a/cb/fa7b4d148e11d5a72761a22e595344133e83a9507a4c231df972e657579b/fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c", size = 2345760 }, + { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } 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" }, + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, ] [[package]] name = "fsspec" version = "2025.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/e0/bab50af11c2d75c9c4a2a26a5254573c0bd97cea152254401510950486fa/fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19", size = 304847, upload-time = "2025-09-02T19:10:49.215Z" } +sdist = { url = "https://files.pythonhosted.org/packages/de/e0/bab50af11c2d75c9c4a2a26a5254573c0bd97cea152254401510950486fa/fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19", size = 304847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/71/70db47e4f6ce3e5c37a607355f80da8860a33226be640226ac52cb05ef2e/fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7", size = 199289, upload-time = "2025-09-02T19:10:47.708Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/70db47e4f6ce3e5c37a607355f80da8860a33226be640226ac52cb05ef2e/fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7", size = 199289 }, ] [[package]] @@ -1095,9 +1094,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034 }, ] [[package]] @@ -1107,18 +1106,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684, upload-time = "2025-09-05T15:02:29.167Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439, upload-time = "2025-09-05T15:02:27.511Z" }, + { url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439 }, ] [[package]] name = "h11" version = "0.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, ] [[package]] @@ -1129,9 +1128,9 @@ dependencies = [ { name = "h5py" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/a1/e3ca842fd0895fcfb21c754a18fd8cd7362d1625b3a93408c982c38f4ec1/h5netcdf-1.6.4.tar.gz", hash = "sha256:83db7e5eb9b822bed2c79050d6cf8f36ecbd1039f4252bd90fab200edcaaf67d", size = 65832, upload-time = "2025-08-05T06:26:56.707Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/a1/e3ca842fd0895fcfb21c754a18fd8cd7362d1625b3a93408c982c38f4ec1/h5netcdf-1.6.4.tar.gz", hash = "sha256:83db7e5eb9b822bed2c79050d6cf8f36ecbd1039f4252bd90fab200edcaaf67d", size = 65832 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/f5/ac71e692aad076d50a0f5f073204346d5f5577daffd21bb4b72c485f8959/h5netcdf-1.6.4-py3-none-any.whl", hash = "sha256:e0018e6a918f2bef2a4aa7b470a952b8a0b5d16a5893d59bea56524cc6207fcf", size = 50683, upload-time = "2025-08-05T06:26:55.644Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f5/ac71e692aad076d50a0f5f073204346d5f5577daffd21bb4b72c485f8959/h5netcdf-1.6.4-py3-none-any.whl", hash = "sha256:e0018e6a918f2bef2a4aa7b470a952b8a0b5d16a5893d59bea56524cc6207fcf", size = 50683 }, ] [[package]] @@ -1142,20 +1141,20 @@ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5d/57/dfb3c5c3f1bf5f5ef2e59a22dec4ff1f3d7408b55bfcefcfb0ea69ef21c6/h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4", size = 424323, upload-time = "2025-06-06T14:06:15.01Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5d/57/dfb3c5c3f1bf5f5ef2e59a22dec4ff1f3d7408b55bfcefcfb0ea69ef21c6/h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4", size = 424323 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/cd/3dd38cdb7cc9266dc4d85f27f0261680cb62f553f1523167ad7454e32b11/h5py-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:016e89d3be4c44f8d5e115fab60548e518ecd9efe9fa5c5324505a90773e6f03", size = 4324677, upload-time = "2025-06-06T14:04:23.438Z" }, - { url = "https://files.pythonhosted.org/packages/b1/45/e1a754dc7cd465ba35e438e28557119221ac89b20aaebef48282654e3dc7/h5py-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1223b902ef0b5d90bcc8a4778218d6d6cd0f5561861611eda59fa6c52b922f4d", size = 4557272, upload-time = "2025-06-06T14:04:28.863Z" }, - { url = "https://files.pythonhosted.org/packages/5c/06/f9506c1531645829d302c420851b78bb717af808dde11212c113585fae42/h5py-3.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:852b81f71df4bb9e27d407b43071d1da330d6a7094a588efa50ef02553fa7ce4", size = 2866734, upload-time = "2025-06-06T14:04:33.5Z" }, - { url = "https://files.pythonhosted.org/packages/08/0c/5e6aaf221557314bc15ba0e0da92e40b24af97ab162076c8ae009320a42b/h5py-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c497600c0496548810047257e36360ff551df8b59156d3a4181072eed47d8ad", size = 4298002, upload-time = "2025-06-06T14:04:47.106Z" }, - { url = "https://files.pythonhosted.org/packages/21/d4/d461649cafd5137088fb7f8e78fdc6621bb0c4ff2c090a389f68e8edc136/h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:723a40ee6505bd354bfd26385f2dae7bbfa87655f4e61bab175a49d72ebfc06b", size = 4516618, upload-time = "2025-06-06T14:04:52.467Z" }, - { url = "https://files.pythonhosted.org/packages/db/0c/6c3f879a0f8e891625817637fad902da6e764e36919ed091dc77529004ac/h5py-3.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2744b520440a996f2dae97f901caa8a953afc055db4673a993f2d87d7f38713", size = 2874888, upload-time = "2025-06-06T14:04:56.95Z" }, - { url = "https://files.pythonhosted.org/packages/3f/19/c8bfe8543bfdd7ccfafd46d8cfd96fce53d6c33e9c7921f375530ee1d39a/h5py-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554ef0ced3571366d4d383427c00c966c360e178b5fb5ee5bb31a435c424db0c", size = 4708455, upload-time = "2025-06-06T14:05:11.528Z" }, - { url = "https://files.pythonhosted.org/packages/86/f9/f00de11c82c88bfc1ef22633557bfba9e271e0cb3189ad704183fc4a2644/h5py-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cbd41f4e3761f150aa5b662df991868ca533872c95467216f2bec5fcad84882", size = 4929422, upload-time = "2025-06-06T14:05:18.399Z" }, - { url = "https://files.pythonhosted.org/packages/7a/6d/6426d5d456f593c94b96fa942a9b3988ce4d65ebaf57d7273e452a7222e8/h5py-3.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:bf4897d67e613ecf5bdfbdab39a1158a64df105827da70ea1d90243d796d367f", size = 2862845, upload-time = "2025-06-06T14:05:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ce/3a21d87896bc7e3e9255e0ad5583ae31ae9e6b4b00e0bcb2a67e2b6acdbc/h5py-3.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8cbaf6910fa3983c46172666b0b8da7b7bd90d764399ca983236f2400436eeb", size = 4700675, upload-time = "2025-06-06T14:05:37.38Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ec/86f59025306dcc6deee5fda54d980d077075b8d9889aac80f158bd585f1b/h5py-3.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d90e6445ab7c146d7f7981b11895d70bc1dd91278a4f9f9028bc0c95e4a53f13", size = 4921632, upload-time = "2025-06-06T14:05:43.464Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6d/0084ed0b78d4fd3e7530c32491f2884140d9b06365dac8a08de726421d4a/h5py-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae18e3de237a7a830adb76aaa68ad438d85fe6e19e0d99944a3ce46b772c69b3", size = 2852929, upload-time = "2025-06-06T14:05:47.659Z" }, + { url = "https://files.pythonhosted.org/packages/fa/cd/3dd38cdb7cc9266dc4d85f27f0261680cb62f553f1523167ad7454e32b11/h5py-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:016e89d3be4c44f8d5e115fab60548e518ecd9efe9fa5c5324505a90773e6f03", size = 4324677 }, + { url = "https://files.pythonhosted.org/packages/b1/45/e1a754dc7cd465ba35e438e28557119221ac89b20aaebef48282654e3dc7/h5py-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1223b902ef0b5d90bcc8a4778218d6d6cd0f5561861611eda59fa6c52b922f4d", size = 4557272 }, + { url = "https://files.pythonhosted.org/packages/5c/06/f9506c1531645829d302c420851b78bb717af808dde11212c113585fae42/h5py-3.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:852b81f71df4bb9e27d407b43071d1da330d6a7094a588efa50ef02553fa7ce4", size = 2866734 }, + { url = "https://files.pythonhosted.org/packages/08/0c/5e6aaf221557314bc15ba0e0da92e40b24af97ab162076c8ae009320a42b/h5py-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c497600c0496548810047257e36360ff551df8b59156d3a4181072eed47d8ad", size = 4298002 }, + { url = "https://files.pythonhosted.org/packages/21/d4/d461649cafd5137088fb7f8e78fdc6621bb0c4ff2c090a389f68e8edc136/h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:723a40ee6505bd354bfd26385f2dae7bbfa87655f4e61bab175a49d72ebfc06b", size = 4516618 }, + { url = "https://files.pythonhosted.org/packages/db/0c/6c3f879a0f8e891625817637fad902da6e764e36919ed091dc77529004ac/h5py-3.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2744b520440a996f2dae97f901caa8a953afc055db4673a993f2d87d7f38713", size = 2874888 }, + { url = "https://files.pythonhosted.org/packages/3f/19/c8bfe8543bfdd7ccfafd46d8cfd96fce53d6c33e9c7921f375530ee1d39a/h5py-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554ef0ced3571366d4d383427c00c966c360e178b5fb5ee5bb31a435c424db0c", size = 4708455 }, + { url = "https://files.pythonhosted.org/packages/86/f9/f00de11c82c88bfc1ef22633557bfba9e271e0cb3189ad704183fc4a2644/h5py-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cbd41f4e3761f150aa5b662df991868ca533872c95467216f2bec5fcad84882", size = 4929422 }, + { url = "https://files.pythonhosted.org/packages/7a/6d/6426d5d456f593c94b96fa942a9b3988ce4d65ebaf57d7273e452a7222e8/h5py-3.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:bf4897d67e613ecf5bdfbdab39a1158a64df105827da70ea1d90243d796d367f", size = 2862845 }, + { url = "https://files.pythonhosted.org/packages/0d/ce/3a21d87896bc7e3e9255e0ad5583ae31ae9e6b4b00e0bcb2a67e2b6acdbc/h5py-3.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8cbaf6910fa3983c46172666b0b8da7b7bd90d764399ca983236f2400436eeb", size = 4700675 }, + { url = "https://files.pythonhosted.org/packages/e7/ec/86f59025306dcc6deee5fda54d980d077075b8d9889aac80f158bd585f1b/h5py-3.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d90e6445ab7c146d7f7981b11895d70bc1dd91278a4f9f9028bc0c95e4a53f13", size = 4921632 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/0084ed0b78d4fd3e7530c32491f2884140d9b06365dac8a08de726421d4a/h5py-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae18e3de237a7a830adb76aaa68ad438d85fe6e19e0d99944a3ce46b772c69b3", size = 2852929 }, ] [[package]] @@ -1167,9 +1166,9 @@ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/42/09a543153c1609b656f5c8e33210d6bdd1b7045c0d6e33bc96bb9afbb704/hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e", size = 117601, upload-time = "2024-03-30T09:15:08.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/42/09a543153c1609b656f5c8e33210d6bdd1b7045c0d6e33bc96bb9afbb704/hickle-5.0.3.tar.gz", hash = "sha256:027e51ccad279d168123a244525e6c84bac0db64605b311b0bd349891be0c53e", size = 117601 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/71/d765d1406e2ca52b81f7ff4be6ce99413cb76d831edabf772c667789ff7b/hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad", size = 107970, upload-time = "2024-03-30T09:15:05.094Z" }, + { url = "https://files.pythonhosted.org/packages/78/71/d765d1406e2ca52b81f7ff4be6ce99413cb76d831edabf772c667789ff7b/hickle-5.0.3-py3-none-any.whl", hash = "sha256:3b87613de35e644d94541b8c79ffced5e62332e001b4f62c53ff11bd3fa87dad", size = 107970 }, ] [[package]] @@ -1180,9 +1179,9 @@ dependencies = [ { name = "certifi" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, ] [[package]] @@ -1192,9 +1191,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyparsing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/77/6653db69c1f7ecfe5e3f9726fdadc981794656fcd7d98c4209fecfea9993/httplib2-0.31.0.tar.gz", hash = "sha256:ac7ab497c50975147d4f7b1ade44becc7df2f8954d42b38b3d69c515f531135c", size = 250759, upload-time = "2025-09-11T12:16:03.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/77/6653db69c1f7ecfe5e3f9726fdadc981794656fcd7d98c4209fecfea9993/httplib2-0.31.0.tar.gz", hash = "sha256:ac7ab497c50975147d4f7b1ade44becc7df2f8954d42b38b3d69c515f531135c", size = 250759 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl", hash = "sha256:b9cd78abea9b4e43a7714c6e0f8b6b8561a6fc1e95d5dbd367f5bf0ef35f5d24", size = 91148, upload-time = "2025-09-11T12:16:01.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a2/0d269db0f6163be503775dc8b6a6fa15820cc9fdc866f6ba608d86b721f2/httplib2-0.31.0-py3-none-any.whl", hash = "sha256:b9cd78abea9b4e43a7714c6e0f8b6b8561a6fc1e95d5dbd367f5bf0ef35f5d24", size = 91148 }, ] [[package]] @@ -1207,27 +1206,27 @@ dependencies = [ { name = "httpcore" }, { name = "idna" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, ] [[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] [[package]] name = "ifaddr" version = "0.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/ac/fb4c578f4a3256561548cd825646680edcadb9440f3f68add95ade1eb791/ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4", size = 10485, upload-time = "2022-06-15T21:40:27.561Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/ac/fb4c578f4a3256561548cd825646680edcadb9440f3f68add95ade1eb791/ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4", size = 10485 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/1f/19ebc343cc71a7ffa78f17018535adc5cbdd87afb31d7c34874680148b32/ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748", size = 12314, upload-time = "2022-06-15T21:40:25.756Z" }, + { url = "https://files.pythonhosted.org/packages/9c/1f/19ebc343cc71a7ffa78f17018535adc5cbdd87afb31d7c34874680148b32/ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748", size = 12314 }, ] [[package]] @@ -1237,27 +1236,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656 }, ] [[package]] name = "importlib-resources" version = "6.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461 }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] [[package]] @@ -1279,9 +1278,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260, upload-time = "2025-08-04T15:47:35.018Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484, upload-time = "2025-08-04T15:47:32.622Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484 }, ] [[package]] @@ -1301,9 +1300,9 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864, upload-time = "2025-05-31T16:39:06.38Z" }, + { url = "https://files.pythonhosted.org/packages/91/d0/274fbf7b0b12643cbbc001ce13e6a5b1607ac4929d1b11c72460152c9fc3/ipython-8.37.0-py3-none-any.whl", hash = "sha256:ed87326596b878932dbcb171e3e698845434d8c61b8d8cd474bf663041a9dcf2", size = 831864 }, ] [[package]] @@ -1317,9 +1316,9 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721, upload-time = "2025-05-05T12:42:03.489Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721 } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806, upload-time = "2025-05-05T12:41:56.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806 }, ] [[package]] @@ -1329,9 +1328,9 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } 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" }, + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, ] [[package]] @@ -1341,9 +1340,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, ] [[package]] @@ -1353,36 +1352,36 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } 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" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, ] [[package]] name = "joblib" version = "1.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077, upload-time = "2025-08-27T12:15:46.575Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5d/447af5ea094b9e4c4054f82e223ada074c552335b9b4b2d14bd9b35a67c4/joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55", size = 331077 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396, upload-time = "2025-08-27T12:15:45.188Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e8/685f47e0d754320684db4425a0967f7d3fa70126bffd76110b7009a0090f/joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241", size = 308396 }, ] [[package]] name = "json5" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/ae/929aee9619e9eba9015207a9d2c1c54db18311da7eb4dcf6d41ad6f0eb67/json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990", size = 52191, upload-time = "2025-08-12T19:47:42.583Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/ae/929aee9619e9eba9015207a9d2c1c54db18311da7eb4dcf6d41ad6f0eb67/json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990", size = 52191 } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/e2/05328bd2621be49a6fed9e3030b1e51a2d04537d3f816d211b9cc53c5262/json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5", size = 36119, upload-time = "2025-08-12T19:47:41.131Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/05328bd2621be49a6fed9e3030b1e51a2d04537d3f816d211b9cc53c5262/json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5", size = 36119 }, ] [[package]] name = "jsonpointer" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, ] [[package]] @@ -1395,9 +1394,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040 }, ] [package.optional-dependencies] @@ -1420,9 +1419,9 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855 } 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" }, + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437 }, ] [[package]] @@ -1437,9 +1436,9 @@ dependencies = [ { name = "nbconvert" }, { name = "notebook" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959, upload-time = "2024-08-30T07:15:48.299Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657, upload-time = "2024-08-30T07:15:47.045Z" }, + { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657 }, ] [[package]] @@ -1453,9 +1452,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, ] [[package]] @@ -1472,9 +1471,9 @@ dependencies = [ { name = "pyzmq" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363, upload-time = "2023-03-06T14:13:31.02Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510, upload-time = "2023-03-06T14:13:28.229Z" }, + { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510 }, ] [[package]] @@ -1486,9 +1485,9 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, ] [[package]] @@ -1505,9 +1504,9 @@ dependencies = [ { name = "rfc3986-validator" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196, upload-time = "2025-02-03T17:23:41.485Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430, upload-time = "2025-02-03T17:23:38.643Z" }, + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, ] [[package]] @@ -1517,9 +1516,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823, upload-time = "2025-08-27T17:47:34.671Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f", size = 76687, upload-time = "2025-08-27T17:47:33.15Z" }, + { url = "https://files.pythonhosted.org/packages/1a/60/1f6cee0c46263de1173894f0fafcb3475ded276c472c14d25e0280c18d6d/jupyter_lsp-2.3.0-py3-none-any.whl", hash = "sha256:e914a3cb2addf48b1c7710914771aaf1819d46b2e5a79b0f917b5478ec93f34f", size = 76687 }, ] [[package]] @@ -1547,9 +1546,9 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949, upload-time = "2025-08-21T14:42:54.042Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949 } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221, upload-time = "2025-08-21T14:42:52.034Z" }, + { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221 }, ] [[package]] @@ -1560,9 +1559,9 @@ dependencies = [ { name = "pywinpty", marker = "os_name == 'nt'" }, { name = "terminado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430, upload-time = "2024-03-12T14:37:03.049Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430 } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656, upload-time = "2024-03-12T14:37:00.708Z" }, + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656 }, ] [[package]] @@ -1585,18 +1584,18 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/b2/7dad2d0049a904d17c070226a4f78f81905f93bfe09503722d210ccf9335/jupyterlab-4.4.9.tar.gz", hash = "sha256:ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2", size = 22966654, upload-time = "2025-09-26T17:28:20.158Z" } +sdist = { url = "https://files.pythonhosted.org/packages/45/b2/7dad2d0049a904d17c070226a4f78f81905f93bfe09503722d210ccf9335/jupyterlab-4.4.9.tar.gz", hash = "sha256:ea55aca8269909016d5fde2dc09b97128bc931230183fe7e2920ede5154ad9c2", size = 22966654 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/fd/ac0979ebd1b1975c266c99b96930b0a66609c3f6e5d76979ca6eb3073896/jupyterlab-4.4.9-py3-none-any.whl", hash = "sha256:394c902827350c017430a8370b9f40c03c098773084bc53930145c146d3d2cb2", size = 12292552, upload-time = "2025-09-26T17:28:15.663Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/ac0979ebd1b1975c266c99b96930b0a66609c3f6e5d76979ca6eb3073896/jupyterlab-4.4.9-py3-none-any.whl", hash = "sha256:394c902827350c017430a8370b9f40c03c098773084bc53930145c146d3d2cb2", size = 12292552 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } 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" }, + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, ] [[package]] @@ -1612,110 +1611,110 @@ dependencies = [ { name = "packaging" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173, upload-time = "2024-07-16T17:02:04.149Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700, upload-time = "2024-07-16T17:02:01.115Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, ] [[package]] name = "jupyterlab-widgets" version = "3.0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149, upload-time = "2025-05-05T12:32:31.004Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149 } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, + { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571 }, ] [[package]] name = "kiwisolver" version = "1.4.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/42/0f333164e6307a0687d1eb9ad256215aae2f4bd5d28f4653d6cd319a3ba3/kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9", size = 1628458, upload-time = "2025-08-10T21:25:39.067Z" }, - { url = "https://files.pythonhosted.org/packages/86/b6/2dccb977d651943995a90bfe3495c2ab2ba5cd77093d9f2318a20c9a6f59/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415", size = 1225640, upload-time = "2025-08-10T21:25:40.489Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/362ebd3eec46c850ccf2bfe3e30f2fc4c008750011f38a850f088c56a1c6/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b", size = 1244074, upload-time = "2025-08-10T21:25:42.221Z" }, - { url = "https://files.pythonhosted.org/packages/6f/bb/f09a1e66dab8984773d13184a10a29fe67125337649d26bdef547024ed6b/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154", size = 1293036, upload-time = "2025-08-10T21:25:43.801Z" }, - { url = "https://files.pythonhosted.org/packages/ea/01/11ecf892f201cafda0f68fa59212edaea93e96c37884b747c181303fccd1/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48", size = 2175310, upload-time = "2025-08-10T21:25:45.045Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5f/bfe11d5b934f500cc004314819ea92427e6e5462706a498c1d4fc052e08f/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220", size = 2270943, upload-time = "2025-08-10T21:25:46.393Z" }, - { url = "https://files.pythonhosted.org/packages/3d/de/259f786bf71f1e03e73d87e2db1a9a3bcab64d7b4fd780167123161630ad/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586", size = 2440488, upload-time = "2025-08-10T21:25:48.074Z" }, - { url = "https://files.pythonhosted.org/packages/1b/76/c989c278faf037c4d3421ec07a5c452cd3e09545d6dae7f87c15f54e4edf/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634", size = 2246787, upload-time = "2025-08-10T21:25:49.442Z" }, - { url = "https://files.pythonhosted.org/packages/a2/55/c2898d84ca440852e560ca9f2a0d28e6e931ac0849b896d77231929900e7/kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611", size = 73730, upload-time = "2025-08-10T21:25:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/e8/09/486d6ac523dd33b80b368247f238125d027964cfacb45c654841e88fb2ae/kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536", size = 65036, upload-time = "2025-08-10T21:25:52.063Z" }, - { url = "https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61", size = 1435596, upload-time = "2025-08-10T21:25:56.861Z" }, - { url = "https://files.pythonhosted.org/packages/67/1e/51b73c7347f9aabdc7215aa79e8b15299097dc2f8e67dee2b095faca9cb0/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1", size = 1246548, upload-time = "2025-08-10T21:25:58.246Z" }, - { url = "https://files.pythonhosted.org/packages/21/aa/72a1c5d1e430294f2d32adb9542719cfb441b5da368d09d268c7757af46c/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872", size = 1263618, upload-time = "2025-08-10T21:25:59.857Z" }, - { url = "https://files.pythonhosted.org/packages/a3/af/db1509a9e79dbf4c260ce0cfa3903ea8945f6240e9e59d1e4deb731b1a40/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26", size = 1317437, upload-time = "2025-08-10T21:26:01.105Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f2/3ea5ee5d52abacdd12013a94130436e19969fa183faa1e7c7fbc89e9a42f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028", size = 2195742, upload-time = "2025-08-10T21:26:02.675Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9b/1efdd3013c2d9a2566aa6a337e9923a00590c516add9a1e89a768a3eb2fc/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771", size = 2290810, upload-time = "2025-08-10T21:26:04.009Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e5/cfdc36109ae4e67361f9bc5b41323648cb24a01b9ade18784657e022e65f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a", size = 2461579, upload-time = "2025-08-10T21:26:05.317Z" }, - { url = "https://files.pythonhosted.org/packages/62/86/b589e5e86c7610842213994cdea5add00960076bef4ae290c5fa68589cac/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464", size = 2268071, upload-time = "2025-08-10T21:26:06.686Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2", size = 73840, upload-time = "2025-08-10T21:26:07.94Z" }, - { url = "https://files.pythonhosted.org/packages/e2/2d/16e0581daafd147bc11ac53f032a2b45eabac897f42a338d0a13c1e5c436/kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7", size = 65159, upload-time = "2025-08-10T21:26:09.048Z" }, - { url = "https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04", size = 1474756, upload-time = "2025-08-10T21:26:13.096Z" }, - { url = "https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752", size = 1276404, upload-time = "2025-08-10T21:26:14.457Z" }, - { url = "https://files.pythonhosted.org/packages/2e/64/bc2de94800adc830c476dce44e9b40fd0809cddeef1fde9fcf0f73da301f/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77", size = 1294410, upload-time = "2025-08-10T21:26:15.73Z" }, - { url = "https://files.pythonhosted.org/packages/5f/42/2dc82330a70aa8e55b6d395b11018045e58d0bb00834502bf11509f79091/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198", size = 1343631, upload-time = "2025-08-10T21:26:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/22/fd/f4c67a6ed1aab149ec5a8a401c323cee7a1cbe364381bb6c9c0d564e0e20/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d", size = 2224963, upload-time = "2025-08-10T21:26:18.737Z" }, - { url = "https://files.pythonhosted.org/packages/45/aa/76720bd4cb3713314677d9ec94dcc21ced3f1baf4830adde5bb9b2430a5f/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab", size = 2321295, upload-time = "2025-08-10T21:26:20.11Z" }, - { url = "https://files.pythonhosted.org/packages/80/19/d3ec0d9ab711242f56ae0dc2fc5d70e298bb4a1f9dfab44c027668c673a1/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2", size = 2487987, upload-time = "2025-08-10T21:26:21.49Z" }, - { url = "https://files.pythonhosted.org/packages/39/e9/61e4813b2c97e86b6fdbd4dd824bf72d28bcd8d4849b8084a357bc0dd64d/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145", size = 2291817, upload-time = "2025-08-10T21:26:22.812Z" }, - { url = "https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54", size = 73895, upload-time = "2025-08-10T21:26:24.37Z" }, - { url = "https://files.pythonhosted.org/packages/e2/92/5f3068cf15ee5cb624a0c7596e67e2a0bb2adee33f71c379054a491d07da/kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60", size = 64992, upload-time = "2025-08-10T21:26:25.732Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607, upload-time = "2025-08-10T21:26:29.798Z" }, - { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546, upload-time = "2025-08-10T21:26:31.401Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482, upload-time = "2025-08-10T21:26:32.721Z" }, - { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720, upload-time = "2025-08-10T21:26:34.032Z" }, - { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907, upload-time = "2025-08-10T21:26:35.824Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334, upload-time = "2025-08-10T21:26:37.534Z" }, - { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313, upload-time = "2025-08-10T21:26:39.191Z" }, - { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970, upload-time = "2025-08-10T21:26:40.828Z" }, - { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894, upload-time = "2025-08-10T21:26:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995, upload-time = "2025-08-10T21:26:43.889Z" }, - { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135, upload-time = "2025-08-10T21:26:48.665Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409, upload-time = "2025-08-10T21:26:50.335Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763, upload-time = "2025-08-10T21:26:51.867Z" }, - { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643, upload-time = "2025-08-10T21:26:53.592Z" }, - { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818, upload-time = "2025-08-10T21:26:55.051Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963, upload-time = "2025-08-10T21:26:56.421Z" }, - { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, - { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, - { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, - { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, - { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, - { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, - { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, - { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, - { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, - { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, - { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1a/23d855a702bb35a76faed5ae2ba3de57d323f48b1f6b17ee2176c4849463/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e", size = 80277, upload-time = "2025-08-10T21:27:40.129Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5b/5239e3c2b8fb5afa1e8508f721bb77325f740ab6994d963e61b2b7abcc1e/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9", size = 77994, upload-time = "2025-08-10T21:27:41.181Z" }, - { url = "https://files.pythonhosted.org/packages/f9/1c/5d4d468fb16f8410e596ed0eac02d2c68752aa7dc92997fe9d60a7147665/kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb", size = 73744, upload-time = "2025-08-10T21:27:42.254Z" }, - { url = "https://files.pythonhosted.org/packages/33/01/a8ea7c5ea32a9b45ceeaee051a04c8ed4320f5add3c51bfa20879b765b70/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2", size = 80281, upload-time = "2025-08-10T21:27:45.369Z" }, - { url = "https://files.pythonhosted.org/packages/da/e3/dbd2ecdce306f1d07a1aaf324817ee993aab7aee9db47ceac757deabafbe/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f", size = 78009, upload-time = "2025-08-10T21:27:46.376Z" }, - { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/42/0f333164e6307a0687d1eb9ad256215aae2f4bd5d28f4653d6cd319a3ba3/kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9", size = 1628458 }, + { url = "https://files.pythonhosted.org/packages/86/b6/2dccb977d651943995a90bfe3495c2ab2ba5cd77093d9f2318a20c9a6f59/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415", size = 1225640 }, + { url = "https://files.pythonhosted.org/packages/50/2b/362ebd3eec46c850ccf2bfe3e30f2fc4c008750011f38a850f088c56a1c6/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b", size = 1244074 }, + { url = "https://files.pythonhosted.org/packages/6f/bb/f09a1e66dab8984773d13184a10a29fe67125337649d26bdef547024ed6b/kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154", size = 1293036 }, + { url = "https://files.pythonhosted.org/packages/ea/01/11ecf892f201cafda0f68fa59212edaea93e96c37884b747c181303fccd1/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48", size = 2175310 }, + { url = "https://files.pythonhosted.org/packages/7f/5f/bfe11d5b934f500cc004314819ea92427e6e5462706a498c1d4fc052e08f/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220", size = 2270943 }, + { url = "https://files.pythonhosted.org/packages/3d/de/259f786bf71f1e03e73d87e2db1a9a3bcab64d7b4fd780167123161630ad/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586", size = 2440488 }, + { url = "https://files.pythonhosted.org/packages/1b/76/c989c278faf037c4d3421ec07a5c452cd3e09545d6dae7f87c15f54e4edf/kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634", size = 2246787 }, + { url = "https://files.pythonhosted.org/packages/a2/55/c2898d84ca440852e560ca9f2a0d28e6e931ac0849b896d77231929900e7/kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611", size = 73730 }, + { url = "https://files.pythonhosted.org/packages/e8/09/486d6ac523dd33b80b368247f238125d027964cfacb45c654841e88fb2ae/kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536", size = 65036 }, + { url = "https://files.pythonhosted.org/packages/66/e1/e533435c0be77c3f64040d68d7a657771194a63c279f55573188161e81ca/kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61", size = 1435596 }, + { url = "https://files.pythonhosted.org/packages/67/1e/51b73c7347f9aabdc7215aa79e8b15299097dc2f8e67dee2b095faca9cb0/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1", size = 1246548 }, + { url = "https://files.pythonhosted.org/packages/21/aa/72a1c5d1e430294f2d32adb9542719cfb441b5da368d09d268c7757af46c/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872", size = 1263618 }, + { url = "https://files.pythonhosted.org/packages/a3/af/db1509a9e79dbf4c260ce0cfa3903ea8945f6240e9e59d1e4deb731b1a40/kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26", size = 1317437 }, + { url = "https://files.pythonhosted.org/packages/e0/f2/3ea5ee5d52abacdd12013a94130436e19969fa183faa1e7c7fbc89e9a42f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028", size = 2195742 }, + { url = "https://files.pythonhosted.org/packages/6f/9b/1efdd3013c2d9a2566aa6a337e9923a00590c516add9a1e89a768a3eb2fc/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771", size = 2290810 }, + { url = "https://files.pythonhosted.org/packages/fb/e5/cfdc36109ae4e67361f9bc5b41323648cb24a01b9ade18784657e022e65f/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a", size = 2461579 }, + { url = "https://files.pythonhosted.org/packages/62/86/b589e5e86c7610842213994cdea5add00960076bef4ae290c5fa68589cac/kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464", size = 2268071 }, + { url = "https://files.pythonhosted.org/packages/3b/c6/f8df8509fd1eee6c622febe54384a96cfaf4d43bf2ccec7a0cc17e4715c9/kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2", size = 73840 }, + { url = "https://files.pythonhosted.org/packages/e2/2d/16e0581daafd147bc11ac53f032a2b45eabac897f42a338d0a13c1e5c436/kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7", size = 65159 }, + { url = "https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04", size = 1474756 }, + { url = "https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752", size = 1276404 }, + { url = "https://files.pythonhosted.org/packages/2e/64/bc2de94800adc830c476dce44e9b40fd0809cddeef1fde9fcf0f73da301f/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77", size = 1294410 }, + { url = "https://files.pythonhosted.org/packages/5f/42/2dc82330a70aa8e55b6d395b11018045e58d0bb00834502bf11509f79091/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198", size = 1343631 }, + { url = "https://files.pythonhosted.org/packages/22/fd/f4c67a6ed1aab149ec5a8a401c323cee7a1cbe364381bb6c9c0d564e0e20/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d", size = 2224963 }, + { url = "https://files.pythonhosted.org/packages/45/aa/76720bd4cb3713314677d9ec94dcc21ced3f1baf4830adde5bb9b2430a5f/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab", size = 2321295 }, + { url = "https://files.pythonhosted.org/packages/80/19/d3ec0d9ab711242f56ae0dc2fc5d70e298bb4a1f9dfab44c027668c673a1/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2", size = 2487987 }, + { url = "https://files.pythonhosted.org/packages/39/e9/61e4813b2c97e86b6fdbd4dd824bf72d28bcd8d4849b8084a357bc0dd64d/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145", size = 2291817 }, + { url = "https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54", size = 73895 }, + { url = "https://files.pythonhosted.org/packages/e2/92/5f3068cf15ee5cb624a0c7596e67e2a0bb2adee33f71c379054a491d07da/kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60", size = 64992 }, + { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607 }, + { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546 }, + { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482 }, + { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720 }, + { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907 }, + { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334 }, + { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313 }, + { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970 }, + { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894 }, + { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995 }, + { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135 }, + { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409 }, + { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763 }, + { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643 }, + { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818 }, + { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963 }, + { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639 }, + { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741 }, + { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646 }, + { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414 }, + { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272 }, + { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578 }, + { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607 }, + { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150 }, + { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979 }, + { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456 }, + { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621 }, + { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417 }, + { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582 }, + { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197 }, + { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125 }, + { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612 }, + { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990 }, + { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601 }, + { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041 }, + { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897 }, + { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835 }, + { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988 }, + { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260 }, + { url = "https://files.pythonhosted.org/packages/9d/1a/23d855a702bb35a76faed5ae2ba3de57d323f48b1f6b17ee2176c4849463/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e", size = 80277 }, + { url = "https://files.pythonhosted.org/packages/5a/5b/5239e3c2b8fb5afa1e8508f721bb77325f740ab6994d963e61b2b7abcc1e/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9", size = 77994 }, + { url = "https://files.pythonhosted.org/packages/f9/1c/5d4d468fb16f8410e596ed0eac02d2c68752aa7dc92997fe9d60a7147665/kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb", size = 73744 }, + { url = "https://files.pythonhosted.org/packages/33/01/a8ea7c5ea32a9b45ceeaee051a04c8ed4320f5add3c51bfa20879b765b70/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2", size = 80281 }, + { url = "https://files.pythonhosted.org/packages/da/e3/dbd2ecdce306f1d07a1aaf324817ee993aab7aee9db47ceac757deabafbe/kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f", size = 78009 }, + { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929 }, ] [[package]] name = "lark" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/37/a13baf0135f348af608c667633cbe5d13aa2c5c15a56ae9ad3e6cba45ae3/lark-1.3.0.tar.gz", hash = "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48", size = 259551, upload-time = "2025-09-22T13:45:05.072Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/37/a13baf0135f348af608c667633cbe5d13aa2c5c15a56ae9ad3e6cba45ae3/lark-1.3.0.tar.gz", hash = "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48", size = 259551 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/3e/1c6b43277de64fc3c0333b0e72ab7b52ddaaea205210d60d9b9f83c3d0c7/lark-1.3.0-py3-none-any.whl", hash = "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831", size = 113002, upload-time = "2025-09-22T13:45:03.747Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3e/1c6b43277de64fc3c0333b0e72ab7b52ddaaea205210d60d9b9f83c3d0c7/lark-1.3.0-py3-none-any.whl", hash = "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831", size = 113002 }, ] [[package]] @@ -1725,18 +1724,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431, upload-time = "2024-04-05T13:03:12.261Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6b/c875b30a1ba490860c93da4cabf479e03f584eba06fe5963f6f6644653d8/lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1", size = 15431 } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097, upload-time = "2024-04-05T13:03:10.514Z" }, + { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097 }, ] [[package]] name = "legacy-cgi" version = "2.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/ed/300cabc9693209d5a03e2ebc5eb5c4171b51607c08ed84a2b71c9015e0f3/legacy_cgi-2.6.3.tar.gz", hash = "sha256:4c119d6cb8e9d8b6ad7cc0ddad880552c62df4029622835d06dfd18f438a8154", size = 24401, upload-time = "2025-03-27T00:48:56.957Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/ed/300cabc9693209d5a03e2ebc5eb5c4171b51607c08ed84a2b71c9015e0f3/legacy_cgi-2.6.3.tar.gz", hash = "sha256:4c119d6cb8e9d8b6ad7cc0ddad880552c62df4029622835d06dfd18f438a8154", size = 24401 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/33/68c6c38193684537757e0d50a7ccb4f4656e5c2f7cd2be737a9d4a1bff71/legacy_cgi-2.6.3-py3-none-any.whl", hash = "sha256:6df2ea5ae14c71ef6f097f8b6372b44f6685283dc018535a75c924564183cdab", size = 19851, upload-time = "2025-03-27T00:48:55.366Z" }, + { url = "https://files.pythonhosted.org/packages/5a/33/68c6c38193684537757e0d50a7ccb4f4656e5c2f7cd2be737a9d4a1bff71/legacy_cgi-2.6.3-py3-none-any.whl", hash = "sha256:6df2ea5ae14c71ef6f097f8b6372b44f6685283dc018535a75c924564183cdab", size = 19851 }, ] [[package]] @@ -1748,26 +1747,26 @@ dependencies = [ { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/67/28/bbb9fdb69bc129a4ce3bbd2abe1f994bcb3c990a23a74958ee9ff2b67280/libqasm-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6146a6ee22c00542fc15323aaaca7105a2e45653193e73c97096ab86dec0560", size = 1270891, upload-time = "2025-07-28T14:02:40.297Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ec/25b6080c1e98785e5b953236f687e778d7725a28004cdcf9c6b64b904b05/libqasm-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5be0873afccab6ac6a07c396989949fc56cbbfea12e33c8c7497a01f1b1c4413", size = 1142070, upload-time = "2025-07-28T14:02:46.985Z" }, - { url = "https://files.pythonhosted.org/packages/57/b5/f9091c1c72c7fef49342599e846aa62d1f23d4777043a0b3473715072674/libqasm-1.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e113b59ef51e6c52c99dd32b669b7945062a65550ce544ae5ecd8b7f71ee985a", size = 1768091, upload-time = "2025-07-28T14:02:53.105Z" }, - { url = "https://files.pythonhosted.org/packages/1d/29/584b1148d5f5dd1cf4a9cc682abba2e3ef1808604ad871a58ee837ba5d08/libqasm-1.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fe6e94cbe62697c7e44e809a9b5f396c37837f5348735366df099884f78a8a11", size = 1926442, upload-time = "2025-07-28T14:02:58.641Z" }, - { url = "https://files.pythonhosted.org/packages/63/ff/48333e38bd3ed6b17a0cee3e38e795e18c2b14088ce7634ebdcf1ae1e423/libqasm-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:600a7a54c3a60461d554105a9b62538d09aef75856cb0086545bbc93467ff837", size = 812874, upload-time = "2025-07-28T14:03:05.591Z" }, - { url = "https://files.pythonhosted.org/packages/25/20/8a26189e4f4c4d5977cdf41a5ef24341fc879ac5f47e4dbcdaef72448424/libqasm-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04492faa8ef32b5aafb35548f37cd9247acc62cd7b53c4f6362028435b36e1a6", size = 1270890, upload-time = "2025-07-28T14:02:42.162Z" }, - { url = "https://files.pythonhosted.org/packages/83/b3/0038765ce50e5ffef68f4334af690ae1883d57a381a81ce59e69bafcacfa/libqasm-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8a9bf76b3e88a0773476bceac443c79ff4f46d30ca13a97b886a013d76daf49", size = 1142070, upload-time = "2025-07-28T14:02:47.993Z" }, - { url = "https://files.pythonhosted.org/packages/f9/1c/66462640c09dfbc993fc722057e7fabe924d28d18ec61a80547ed6b70d3a/libqasm-1.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8158b75eccb8d2347f3c2ccdf0b14f722d0d478936a2c41275165c77ada0bdd0", size = 1768073, upload-time = "2025-07-28T14:02:54.392Z" }, - { url = "https://files.pythonhosted.org/packages/49/39/cada9ff3a56af495f884c52633929548e2459cd6626eaea81704f822d5ec/libqasm-1.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c310e73f3b6f23acd2d308a46698c52bdee561d59dc0a8e455bf89ded24554a", size = 1926368, upload-time = "2025-07-28T14:03:00.793Z" }, - { url = "https://files.pythonhosted.org/packages/9d/e8/a70987abfb70aa6be0642453cf429eb625f0acc4e275fbeaf0c1e5fb4087/libqasm-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:469e65c26b9da8943b367e66d48a4a8273286fe8ba40c73b088558c9756b291c", size = 812862, upload-time = "2025-07-28T14:03:06.616Z" }, - { url = "https://files.pythonhosted.org/packages/18/55/626a3d712f879962c869123e0ecc03297fd4e23f750c30228ee5d467f911/libqasm-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4bad23d47b7fa04b6975c425b81e4c75080bfe6a8553ab6f6f06f1213f1e2850", size = 1272644, upload-time = "2025-07-28T14:02:43.565Z" }, - { url = "https://files.pythonhosted.org/packages/c2/1e/b5f09546616483db76217d8e55d2f4cb23582f3f7c62ffe94d02fa5ae0ae/libqasm-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f2e53598077a439349a01f365a7fe9f927a9153064ac2bd2efe9f9379dfb383", size = 1142704, upload-time = "2025-07-28T14:02:49.071Z" }, - { url = "https://files.pythonhosted.org/packages/16/b6/07c7e74f788f3ead7797e30101666f91e8efa9dbb37f279d791f6f77dc4e/libqasm-1.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ef94a3295bf28e4569d1178e6bcff8cb62c7b08e711c3360948946293e09dfe", size = 1768550, upload-time = "2025-07-28T14:02:55.425Z" }, - { url = "https://files.pythonhosted.org/packages/3a/20/eb668b9cc354854925fc4a54a9d5372bb45987c522ca03a0d84fa9fe63a9/libqasm-1.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1918872005ecffe837d55758ab5c2039a25e823b527cec14b5e60b694b987cd", size = 1926607, upload-time = "2025-07-28T14:03:01.975Z" }, - { url = "https://files.pythonhosted.org/packages/d3/19/088a391f7a3cab3084a0ec4dce7325fa9a699c8e86068afd61b923aae5dc/libqasm-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:8e14ebbfeaea9441d84b3950f472f5caea0a9ab3790bdd554141fb416899e566", size = 813203, upload-time = "2025-07-28T14:03:07.68Z" }, - { url = "https://files.pythonhosted.org/packages/73/29/3c5db5ec506df20475f4882df37ad8e23bf65eed2c6421a93c9d25cd884b/libqasm-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:832dd91d93af63f41f15bb15e20da895a92502aa9a7d5ddc89c4f1d34a521304", size = 1272644, upload-time = "2025-07-28T14:02:44.934Z" }, - { url = "https://files.pythonhosted.org/packages/85/8b/7cebede9916ee95734f3aa20f6b4e47aba8ac55a04e9170486a5218532f1/libqasm-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a51412e939aa9b5f329dffe050cf2483f81201489e51a6511dddf521c1d7c594", size = 1142704, upload-time = "2025-07-28T14:02:50.678Z" }, - { url = "https://files.pythonhosted.org/packages/32/5f/a92b65d8cbd96fa8201da49c191b521324d62112867d93137e70deef5944/libqasm-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca69e354a22d80c1ca7f6ae2a7dd095cb33fbc0b49de4afdf66463722321165d", size = 1768542, upload-time = "2025-07-28T14:02:56.488Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a1/ea55f32186f785213d82cbc92aae3d54083046dad182f6b7631ec2c636a7/libqasm-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c418cdb7cd84f78ef987c6ca55225f2f8ffdeec4283aeabca427346f40e1f741", size = 1926607, upload-time = "2025-07-28T14:03:03.027Z" }, - { url = "https://files.pythonhosted.org/packages/d1/ef/6d32c19edd4d4f9f446cb0b086e4e6666fc0f2f4f4b8bec382fe0fa2cafc/libqasm-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:dfe354c3bffbb2404fd0e7c91c33845a5c06488771050e9f9ec76c2117752c4d", size = 813224, upload-time = "2025-07-28T14:03:08.71Z" }, + { url = "https://files.pythonhosted.org/packages/67/28/bbb9fdb69bc129a4ce3bbd2abe1f994bcb3c990a23a74958ee9ff2b67280/libqasm-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6146a6ee22c00542fc15323aaaca7105a2e45653193e73c97096ab86dec0560", size = 1270891 }, + { url = "https://files.pythonhosted.org/packages/2a/ec/25b6080c1e98785e5b953236f687e778d7725a28004cdcf9c6b64b904b05/libqasm-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5be0873afccab6ac6a07c396989949fc56cbbfea12e33c8c7497a01f1b1c4413", size = 1142070 }, + { url = "https://files.pythonhosted.org/packages/57/b5/f9091c1c72c7fef49342599e846aa62d1f23d4777043a0b3473715072674/libqasm-1.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e113b59ef51e6c52c99dd32b669b7945062a65550ce544ae5ecd8b7f71ee985a", size = 1768091 }, + { url = "https://files.pythonhosted.org/packages/1d/29/584b1148d5f5dd1cf4a9cc682abba2e3ef1808604ad871a58ee837ba5d08/libqasm-1.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fe6e94cbe62697c7e44e809a9b5f396c37837f5348735366df099884f78a8a11", size = 1926442 }, + { url = "https://files.pythonhosted.org/packages/63/ff/48333e38bd3ed6b17a0cee3e38e795e18c2b14088ce7634ebdcf1ae1e423/libqasm-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:600a7a54c3a60461d554105a9b62538d09aef75856cb0086545bbc93467ff837", size = 812874 }, + { url = "https://files.pythonhosted.org/packages/25/20/8a26189e4f4c4d5977cdf41a5ef24341fc879ac5f47e4dbcdaef72448424/libqasm-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04492faa8ef32b5aafb35548f37cd9247acc62cd7b53c4f6362028435b36e1a6", size = 1270890 }, + { url = "https://files.pythonhosted.org/packages/83/b3/0038765ce50e5ffef68f4334af690ae1883d57a381a81ce59e69bafcacfa/libqasm-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8a9bf76b3e88a0773476bceac443c79ff4f46d30ca13a97b886a013d76daf49", size = 1142070 }, + { url = "https://files.pythonhosted.org/packages/f9/1c/66462640c09dfbc993fc722057e7fabe924d28d18ec61a80547ed6b70d3a/libqasm-1.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8158b75eccb8d2347f3c2ccdf0b14f722d0d478936a2c41275165c77ada0bdd0", size = 1768073 }, + { url = "https://files.pythonhosted.org/packages/49/39/cada9ff3a56af495f884c52633929548e2459cd6626eaea81704f822d5ec/libqasm-1.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c310e73f3b6f23acd2d308a46698c52bdee561d59dc0a8e455bf89ded24554a", size = 1926368 }, + { url = "https://files.pythonhosted.org/packages/9d/e8/a70987abfb70aa6be0642453cf429eb625f0acc4e275fbeaf0c1e5fb4087/libqasm-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:469e65c26b9da8943b367e66d48a4a8273286fe8ba40c73b088558c9756b291c", size = 812862 }, + { url = "https://files.pythonhosted.org/packages/18/55/626a3d712f879962c869123e0ecc03297fd4e23f750c30228ee5d467f911/libqasm-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4bad23d47b7fa04b6975c425b81e4c75080bfe6a8553ab6f6f06f1213f1e2850", size = 1272644 }, + { url = "https://files.pythonhosted.org/packages/c2/1e/b5f09546616483db76217d8e55d2f4cb23582f3f7c62ffe94d02fa5ae0ae/libqasm-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1f2e53598077a439349a01f365a7fe9f927a9153064ac2bd2efe9f9379dfb383", size = 1142704 }, + { url = "https://files.pythonhosted.org/packages/16/b6/07c7e74f788f3ead7797e30101666f91e8efa9dbb37f279d791f6f77dc4e/libqasm-1.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ef94a3295bf28e4569d1178e6bcff8cb62c7b08e711c3360948946293e09dfe", size = 1768550 }, + { url = "https://files.pythonhosted.org/packages/3a/20/eb668b9cc354854925fc4a54a9d5372bb45987c522ca03a0d84fa9fe63a9/libqasm-1.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1918872005ecffe837d55758ab5c2039a25e823b527cec14b5e60b694b987cd", size = 1926607 }, + { url = "https://files.pythonhosted.org/packages/d3/19/088a391f7a3cab3084a0ec4dce7325fa9a699c8e86068afd61b923aae5dc/libqasm-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:8e14ebbfeaea9441d84b3950f472f5caea0a9ab3790bdd554141fb416899e566", size = 813203 }, + { url = "https://files.pythonhosted.org/packages/73/29/3c5db5ec506df20475f4882df37ad8e23bf65eed2c6421a93c9d25cd884b/libqasm-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:832dd91d93af63f41f15bb15e20da895a92502aa9a7d5ddc89c4f1d34a521304", size = 1272644 }, + { url = "https://files.pythonhosted.org/packages/85/8b/7cebede9916ee95734f3aa20f6b4e47aba8ac55a04e9170486a5218532f1/libqasm-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a51412e939aa9b5f329dffe050cf2483f81201489e51a6511dddf521c1d7c594", size = 1142704 }, + { url = "https://files.pythonhosted.org/packages/32/5f/a92b65d8cbd96fa8201da49c191b521324d62112867d93137e70deef5944/libqasm-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca69e354a22d80c1ca7f6ae2a7dd095cb33fbc0b49de4afdf66463722321165d", size = 1768542 }, + { url = "https://files.pythonhosted.org/packages/5d/a1/ea55f32186f785213d82cbc92aae3d54083046dad182f6b7631ec2c636a7/libqasm-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c418cdb7cd84f78ef987c6ca55225f2f8ffdeec4283aeabca427346f40e1f741", size = 1926607 }, + { url = "https://files.pythonhosted.org/packages/d1/ef/6d32c19edd4d4f9f446cb0b086e4e6666fc0f2f4f4b8bec382fe0fa2cafc/libqasm-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:dfe354c3bffbb2404fd0e7c91c33845a5c06488771050e9f9ec76c2117752c4d", size = 813224 }, ] [[package]] @@ -1783,18 +1782,18 @@ dependencies = [ { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "uncertainties" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/e5/a35942aed2de95e228728c34609b51fe3ec9182398eac50d288eef313aa2/lmfit-1.3.4.tar.gz", hash = "sha256:3c22c28c43f717f6c5b4a3bd81e893a2149739c26a592c046f2e33c23cfbe497", size = 630720, upload-time = "2025-07-19T20:09:01.876Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/e5/a35942aed2de95e228728c34609b51fe3ec9182398eac50d288eef313aa2/lmfit-1.3.4.tar.gz", hash = "sha256:3c22c28c43f717f6c5b4a3bd81e893a2149739c26a592c046f2e33c23cfbe497", size = 630720 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl", hash = "sha256:afce1593b42324d37ae2908249b0c55445e2f4c1a0474ff706a8e2f7b5d949fa", size = 97662, upload-time = "2025-07-19T20:09:00.32Z" }, + { url = "https://files.pythonhosted.org/packages/38/7e/7b91c89a4cf0f543a83be978657afb20c86af6d725253e319589dcc4ce52/lmfit-1.3.4-py3-none-any.whl", hash = "sha256:afce1593b42324d37ae2908249b0c55445e2f4c1a0474ff706a8e2f7b5d949fa", size = 97662 }, ] [[package]] name = "locket" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, ] [[package]] @@ -1804,128 +1803,128 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cloudpickle" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/61/690a4503ede61d36cc7fa2d5fa11fe02d94f030bd82155cd8935b2694580/loky-3.5.6.tar.gz", hash = "sha256:d96935ed689aa53eeb7b329769544950fa10a52706968f5d0af3d9c33a761e77", size = 102275, upload-time = "2025-08-27T09:53:52.4Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/61/690a4503ede61d36cc7fa2d5fa11fe02d94f030bd82155cd8935b2694580/loky-3.5.6.tar.gz", hash = "sha256:d96935ed689aa53eeb7b329769544950fa10a52706968f5d0af3d9c33a761e77", size = 102275 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl", hash = "sha256:6d5300ac68cbd5084e89a6a0a187785d6a79950d461c80223d2c9a41d672b3d4", size = 56515, upload-time = "2025-08-27T09:53:51.145Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/7f1f1bf8c2d5dfd8e9c0e1191aa355ff8b80b5619f84d6dcc2703fa7fd5a/loky-3.5.6-py3-none-any.whl", hash = "sha256:6d5300ac68cbd5084e89a6a0a187785d6a79950d461c80223d2c9a41d672b3d4", size = 56515 }, ] [[package]] name = "lxml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/5a/a7d53b3291c324e0b6e48f3c797be63836cc52156ddf8f33cd72aac78866/lxml-6.0.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31", size = 4999961, upload-time = "2025-09-22T04:00:17.619Z" }, - { url = "https://files.pythonhosted.org/packages/f5/55/d465e9b89df1761674d8672bb3e4ae2c47033b01ec243964b6e334c6743f/lxml-6.0.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9", size = 5157087, upload-time = "2025-09-22T04:00:19.868Z" }, - { url = "https://files.pythonhosted.org/packages/62/38/3073cd7e3e8dfc3ba3c3a139e33bee3a82de2bfb0925714351ad3d255c13/lxml-6.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8", size = 5067620, upload-time = "2025-09-22T04:00:21.877Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d3/1e001588c5e2205637b08985597827d3827dbaaece16348c8822bfe61c29/lxml-6.0.2-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba", size = 5406664, upload-time = "2025-09-22T04:00:23.714Z" }, - { url = "https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c", size = 5289397, upload-time = "2025-09-22T04:00:25.544Z" }, - { url = "https://files.pythonhosted.org/packages/a3/84/02a2d0c38ac9a8b9f9e5e1bbd3f24b3f426044ad618b552e9549ee91bd63/lxml-6.0.2-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c", size = 4772178, upload-time = "2025-09-22T04:00:27.602Z" }, - { url = "https://files.pythonhosted.org/packages/56/87/e1ceadcc031ec4aa605fe95476892d0b0ba3b7f8c7dcdf88fdeff59a9c86/lxml-6.0.2-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321", size = 5358148, upload-time = "2025-09-22T04:00:29.323Z" }, - { url = "https://files.pythonhosted.org/packages/fe/13/5bb6cf42bb228353fd4ac5f162c6a84fd68a4d6f67c1031c8cf97e131fc6/lxml-6.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1", size = 5112035, upload-time = "2025-09-22T04:00:31.061Z" }, - { url = "https://files.pythonhosted.org/packages/e4/e2/ea0498552102e59834e297c5c6dff8d8ded3db72ed5e8aad77871476f073/lxml-6.0.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34", size = 4799111, upload-time = "2025-09-22T04:00:33.11Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9e/8de42b52a73abb8af86c66c969b3b4c2a96567b6ac74637c037d2e3baa60/lxml-6.0.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a", size = 5351662, upload-time = "2025-09-22T04:00:35.237Z" }, - { url = "https://files.pythonhosted.org/packages/28/a2/de776a573dfb15114509a37351937c367530865edb10a90189d0b4b9b70a/lxml-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c", size = 5314973, upload-time = "2025-09-22T04:00:37.086Z" }, - { url = "https://files.pythonhosted.org/packages/50/a0/3ae1b1f8964c271b5eec91db2043cf8c6c0bce101ebb2a633b51b044db6c/lxml-6.0.2-cp310-cp310-win32.whl", hash = "sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b", size = 3611953, upload-time = "2025-09-22T04:00:39.224Z" }, - { url = "https://files.pythonhosted.org/packages/d1/70/bd42491f0634aad41bdfc1e46f5cff98825fb6185688dc82baa35d509f1a/lxml-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0", size = 4032695, upload-time = "2025-09-22T04:00:41.402Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d0/05c6a72299f54c2c561a6c6cbb2f512e047fca20ea97a05e57931f194ac4/lxml-6.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5", size = 3680051, upload-time = "2025-09-22T04:00:43.525Z" }, - { url = "https://files.pythonhosted.org/packages/11/84/549098ffea39dfd167e3f174b4ce983d0eed61f9d8d25b7bf2a57c3247fc/lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d", size = 4944362, upload-time = "2025-09-22T04:00:49.845Z" }, - { url = "https://files.pythonhosted.org/packages/ac/bd/f207f16abf9749d2037453d56b643a7471d8fde855a231a12d1e095c4f01/lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438", size = 5083152, upload-time = "2025-09-22T04:00:51.709Z" }, - { url = "https://files.pythonhosted.org/packages/15/ae/bd813e87d8941d52ad5b65071b1affb48da01c4ed3c9c99e40abb266fbff/lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964", size = 5023539, upload-time = "2025-09-22T04:00:53.593Z" }, - { url = "https://files.pythonhosted.org/packages/02/cd/9bfef16bd1d874fbe0cb51afb00329540f30a3283beb9f0780adbb7eec03/lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d", size = 5344853, upload-time = "2025-09-22T04:00:55.524Z" }, - { url = "https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7", size = 5225133, upload-time = "2025-09-22T04:00:57.269Z" }, - { url = "https://files.pythonhosted.org/packages/b9/37/9c735274f5dbec726b2db99b98a43950395ba3d4a1043083dba2ad814170/lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178", size = 4677944, upload-time = "2025-09-22T04:00:59.052Z" }, - { url = "https://files.pythonhosted.org/packages/20/28/7dfe1ba3475d8bfca3878365075abe002e05d40dfaaeb7ec01b4c587d533/lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553", size = 5284535, upload-time = "2025-09-22T04:01:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/e7/cf/5f14bc0de763498fc29510e3532bf2b4b3a1c1d5d0dff2e900c16ba021ef/lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb", size = 5067343, upload-time = "2025-09-22T04:01:03.13Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/bb8275ab5472f32b28cfbbcc6db7c9d092482d3439ca279d8d6fa02f7025/lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a", size = 4725419, upload-time = "2025-09-22T04:01:05.013Z" }, - { url = "https://files.pythonhosted.org/packages/25/4c/7c222753bc72edca3b99dbadba1b064209bc8ed4ad448af990e60dcce462/lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c", size = 5275008, upload-time = "2025-09-22T04:01:07.327Z" }, - { url = "https://files.pythonhosted.org/packages/6c/8c/478a0dc6b6ed661451379447cdbec77c05741a75736d97e5b2b729687828/lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7", size = 5248906, upload-time = "2025-09-22T04:01:09.452Z" }, - { url = "https://files.pythonhosted.org/packages/2d/d9/5be3a6ab2784cdf9accb0703b65e1b64fcdd9311c9f007630c7db0cfcce1/lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46", size = 3610357, upload-time = "2025-09-22T04:01:11.102Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7d/ca6fb13349b473d5732fb0ee3eec8f6c80fc0688e76b7d79c1008481bf1f/lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078", size = 4036583, upload-time = "2025-09-22T04:01:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a2/51363b5ecd3eab46563645f3a2c3836a2fc67d01a1b87c5017040f39f567/lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285", size = 3680591, upload-time = "2025-09-22T04:01:14.874Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807, upload-time = "2025-09-22T04:01:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179, upload-time = "2025-09-22T04:01:23.32Z" }, - { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044, upload-time = "2025-09-22T04:01:25.118Z" }, - { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685, upload-time = "2025-09-22T04:01:27.398Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127, upload-time = "2025-09-22T04:01:29.629Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958, upload-time = "2025-09-22T04:01:31.535Z" }, - { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541, upload-time = "2025-09-22T04:01:33.801Z" }, - { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426, upload-time = "2025-09-22T04:01:35.639Z" }, - { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917, upload-time = "2025-09-22T04:01:37.448Z" }, - { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795, upload-time = "2025-09-22T04:01:39.165Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759, upload-time = "2025-09-22T04:01:41.506Z" }, - { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666, upload-time = "2025-09-22T04:01:43.363Z" }, - { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989, upload-time = "2025-09-22T04:01:45.215Z" }, - { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload-time = "2025-09-22T04:01:48.243Z" }, - { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload-time = "2025-09-22T04:01:50.042Z" }, - { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload-time = "2025-09-22T04:01:52.145Z" }, - { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload-time = "2025-09-22T04:01:58.989Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload-time = "2025-09-22T04:02:00.812Z" }, - { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload-time = "2025-09-22T04:02:02.671Z" }, - { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload-time = "2025-09-22T04:02:04.904Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload-time = "2025-09-22T04:02:06.689Z" }, - { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload-time = "2025-09-22T04:02:08.587Z" }, - { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload-time = "2025-09-22T04:02:10.783Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload-time = "2025-09-22T04:02:12.631Z" }, - { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload-time = "2025-09-22T04:02:14.718Z" }, - { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload-time = "2025-09-22T04:02:16.957Z" }, - { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload-time = "2025-09-22T04:02:18.815Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload-time = "2025-09-22T04:02:20.593Z" }, - { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload-time = "2025-09-22T04:02:22.489Z" }, - { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload-time = "2025-09-22T04:02:24.465Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload-time = "2025-09-22T04:02:26.286Z" }, - { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload-time = "2025-09-22T04:02:27.918Z" }, - { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, - { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, - { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, - { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, - { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, - { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, - { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, - { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, - { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, - { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, - { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, - { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, - { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, - { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, - { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, - { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, - { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, - { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, - { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, - { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5a/1ab260c00adf645d8bf7dec7f920f744b032f69130c681302821d5debea6/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba", size = 4216435, upload-time = "2025-09-22T04:04:34.907Z" }, - { url = "https://files.pythonhosted.org/packages/f2/37/565f3b3d7ffede22874b6d86be1a1763d00f4ea9fc5b9b6ccb11e4ec8612/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5", size = 4325913, upload-time = "2025-09-22T04:04:37.205Z" }, - { url = "https://files.pythonhosted.org/packages/22/ec/f3a1b169b2fb9d03467e2e3c0c752ea30e993be440a068b125fc7dd248b0/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4", size = 4269357, upload-time = "2025-09-22T04:04:39.322Z" }, - { url = "https://files.pythonhosted.org/packages/77/a2/585a28fe3e67daa1cf2f06f34490d556d121c25d500b10082a7db96e3bcd/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d", size = 4412295, upload-time = "2025-09-22T04:04:41.647Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d9/a57dd8bcebd7c69386c20263830d4fa72d27e6b72a229ef7a48e88952d9a/lxml-6.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d", size = 3516913, upload-time = "2025-09-22T04:04:43.602Z" }, - { url = "https://files.pythonhosted.org/packages/12/b3/52ab9a3b31e5ab8238da241baa19eec44d2ab426532441ee607165aebb52/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee", size = 4226277, upload-time = "2025-09-22T04:04:47.754Z" }, - { url = "https://files.pythonhosted.org/packages/a0/33/1eaf780c1baad88224611df13b1c2a9dfa460b526cacfe769103ff50d845/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f", size = 4330433, upload-time = "2025-09-22T04:04:49.907Z" }, - { url = "https://files.pythonhosted.org/packages/7a/c1/27428a2ff348e994ab4f8777d3a0ad510b6b92d37718e5887d2da99952a2/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9", size = 4272119, upload-time = "2025-09-22T04:04:51.801Z" }, - { url = "https://files.pythonhosted.org/packages/f0/d0/3020fa12bcec4ab62f97aab026d57c2f0cfd480a558758d9ca233bb6a79d/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a", size = 4417314, upload-time = "2025-09-22T04:04:55.024Z" }, - { url = "https://files.pythonhosted.org/packages/6c/77/d7f491cbc05303ac6801651aabeb262d43f319288c1ea96c66b1d2692ff3/lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e", size = 3518768, upload-time = "2025-09-22T04:04:57.097Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/5a/a7d53b3291c324e0b6e48f3c797be63836cc52156ddf8f33cd72aac78866/lxml-6.0.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31", size = 4999961 }, + { url = "https://files.pythonhosted.org/packages/f5/55/d465e9b89df1761674d8672bb3e4ae2c47033b01ec243964b6e334c6743f/lxml-6.0.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9", size = 5157087 }, + { url = "https://files.pythonhosted.org/packages/62/38/3073cd7e3e8dfc3ba3c3a139e33bee3a82de2bfb0925714351ad3d255c13/lxml-6.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8", size = 5067620 }, + { url = "https://files.pythonhosted.org/packages/4a/d3/1e001588c5e2205637b08985597827d3827dbaaece16348c8822bfe61c29/lxml-6.0.2-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba", size = 5406664 }, + { url = "https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c", size = 5289397 }, + { url = "https://files.pythonhosted.org/packages/a3/84/02a2d0c38ac9a8b9f9e5e1bbd3f24b3f426044ad618b552e9549ee91bd63/lxml-6.0.2-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c", size = 4772178 }, + { url = "https://files.pythonhosted.org/packages/56/87/e1ceadcc031ec4aa605fe95476892d0b0ba3b7f8c7dcdf88fdeff59a9c86/lxml-6.0.2-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321", size = 5358148 }, + { url = "https://files.pythonhosted.org/packages/fe/13/5bb6cf42bb228353fd4ac5f162c6a84fd68a4d6f67c1031c8cf97e131fc6/lxml-6.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1", size = 5112035 }, + { url = "https://files.pythonhosted.org/packages/e4/e2/ea0498552102e59834e297c5c6dff8d8ded3db72ed5e8aad77871476f073/lxml-6.0.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34", size = 4799111 }, + { url = "https://files.pythonhosted.org/packages/6a/9e/8de42b52a73abb8af86c66c969b3b4c2a96567b6ac74637c037d2e3baa60/lxml-6.0.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a", size = 5351662 }, + { url = "https://files.pythonhosted.org/packages/28/a2/de776a573dfb15114509a37351937c367530865edb10a90189d0b4b9b70a/lxml-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c", size = 5314973 }, + { url = "https://files.pythonhosted.org/packages/50/a0/3ae1b1f8964c271b5eec91db2043cf8c6c0bce101ebb2a633b51b044db6c/lxml-6.0.2-cp310-cp310-win32.whl", hash = "sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b", size = 3611953 }, + { url = "https://files.pythonhosted.org/packages/d1/70/bd42491f0634aad41bdfc1e46f5cff98825fb6185688dc82baa35d509f1a/lxml-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0", size = 4032695 }, + { url = "https://files.pythonhosted.org/packages/d2/d0/05c6a72299f54c2c561a6c6cbb2f512e047fca20ea97a05e57931f194ac4/lxml-6.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5", size = 3680051 }, + { url = "https://files.pythonhosted.org/packages/11/84/549098ffea39dfd167e3f174b4ce983d0eed61f9d8d25b7bf2a57c3247fc/lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d", size = 4944362 }, + { url = "https://files.pythonhosted.org/packages/ac/bd/f207f16abf9749d2037453d56b643a7471d8fde855a231a12d1e095c4f01/lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438", size = 5083152 }, + { url = "https://files.pythonhosted.org/packages/15/ae/bd813e87d8941d52ad5b65071b1affb48da01c4ed3c9c99e40abb266fbff/lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964", size = 5023539 }, + { url = "https://files.pythonhosted.org/packages/02/cd/9bfef16bd1d874fbe0cb51afb00329540f30a3283beb9f0780adbb7eec03/lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d", size = 5344853 }, + { url = "https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7", size = 5225133 }, + { url = "https://files.pythonhosted.org/packages/b9/37/9c735274f5dbec726b2db99b98a43950395ba3d4a1043083dba2ad814170/lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178", size = 4677944 }, + { url = "https://files.pythonhosted.org/packages/20/28/7dfe1ba3475d8bfca3878365075abe002e05d40dfaaeb7ec01b4c587d533/lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553", size = 5284535 }, + { url = "https://files.pythonhosted.org/packages/e7/cf/5f14bc0de763498fc29510e3532bf2b4b3a1c1d5d0dff2e900c16ba021ef/lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb", size = 5067343 }, + { url = "https://files.pythonhosted.org/packages/1c/b0/bb8275ab5472f32b28cfbbcc6db7c9d092482d3439ca279d8d6fa02f7025/lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a", size = 4725419 }, + { url = "https://files.pythonhosted.org/packages/25/4c/7c222753bc72edca3b99dbadba1b064209bc8ed4ad448af990e60dcce462/lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c", size = 5275008 }, + { url = "https://files.pythonhosted.org/packages/6c/8c/478a0dc6b6ed661451379447cdbec77c05741a75736d97e5b2b729687828/lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7", size = 5248906 }, + { url = "https://files.pythonhosted.org/packages/2d/d9/5be3a6ab2784cdf9accb0703b65e1b64fcdd9311c9f007630c7db0cfcce1/lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46", size = 3610357 }, + { url = "https://files.pythonhosted.org/packages/e2/7d/ca6fb13349b473d5732fb0ee3eec8f6c80fc0688e76b7d79c1008481bf1f/lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078", size = 4036583 }, + { url = "https://files.pythonhosted.org/packages/ab/a2/51363b5ecd3eab46563645f3a2c3836a2fc67d01a1b87c5017040f39f567/lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285", size = 3680591 }, + { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807 }, + { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179 }, + { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044 }, + { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685 }, + { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127 }, + { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958 }, + { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541 }, + { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426 }, + { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917 }, + { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795 }, + { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759 }, + { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666 }, + { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989 }, + { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456 }, + { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793 }, + { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836 }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932 }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060 }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000 }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496 }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779 }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072 }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171 }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175 }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688 }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655 }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695 }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841 }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700 }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347 }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248 }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974 }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953 }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054 }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421 }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684 }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463 }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437 }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890 }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185 }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895 }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246 }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797 }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404 }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072 }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617 }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930 }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171 }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109 }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061 }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233 }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739 }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119 }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665 }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997 }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957 }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372 }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653 }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795 }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023 }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420 }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837 }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205 }, + { url = "https://files.pythonhosted.org/packages/f5/5a/1ab260c00adf645d8bf7dec7f920f744b032f69130c681302821d5debea6/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba", size = 4216435 }, + { url = "https://files.pythonhosted.org/packages/f2/37/565f3b3d7ffede22874b6d86be1a1763d00f4ea9fc5b9b6ccb11e4ec8612/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5", size = 4325913 }, + { url = "https://files.pythonhosted.org/packages/22/ec/f3a1b169b2fb9d03467e2e3c0c752ea30e993be440a068b125fc7dd248b0/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4", size = 4269357 }, + { url = "https://files.pythonhosted.org/packages/77/a2/585a28fe3e67daa1cf2f06f34490d556d121c25d500b10082a7db96e3bcd/lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d", size = 4412295 }, + { url = "https://files.pythonhosted.org/packages/7b/d9/a57dd8bcebd7c69386c20263830d4fa72d27e6b72a229ef7a48e88952d9a/lxml-6.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d", size = 3516913 }, + { url = "https://files.pythonhosted.org/packages/12/b3/52ab9a3b31e5ab8238da241baa19eec44d2ab426532441ee607165aebb52/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee", size = 4226277 }, + { url = "https://files.pythonhosted.org/packages/a0/33/1eaf780c1baad88224611df13b1c2a9dfa460b526cacfe769103ff50d845/lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f", size = 4330433 }, + { url = "https://files.pythonhosted.org/packages/7a/c1/27428a2ff348e994ab4f8777d3a0ad510b6b92d37718e5887d2da99952a2/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9", size = 4272119 }, + { url = "https://files.pythonhosted.org/packages/f0/d0/3020fa12bcec4ab62f97aab026d57c2f0cfd480a558758d9ca233bb6a79d/lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a", size = 4417314 }, + { url = "https://files.pythonhosted.org/packages/6c/77/d7f491cbc05303ac6801651aabeb262d43f319288c1ea96c66b1d2692ff3/lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e", size = 3518768 }, ] [[package]] name = "markdown" version = "3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585, upload-time = "2025-09-04T20:25:22.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585 } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441, upload-time = "2025-09-04T20:25:21.784Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441 }, ] [[package]] @@ -1935,94 +1934,94 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321 }, ] [[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" }, +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572 }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077 }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, ] [[package]] @@ -2032,9 +2031,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825 } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" }, + { url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878 }, ] [[package]] @@ -2054,44 +2053,44 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/59/c3e6453a9676ffba145309a73c462bb407f4400de7de3f2b41af70720a3c/matplotlib-3.10.6.tar.gz", hash = "sha256:ec01b645840dd1996df21ee37f208cd8ba57644779fa20464010638013d3203c", size = 34804264, upload-time = "2025-08-30T00:14:25.137Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/5b/a53f69bb0522db352b1135bb57cd9fe00fd7252072409392d991d3a755d0/matplotlib-3.10.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fa4c43d6bfdbfec09c733bca8667de11bfa4970e8324c471f3a3632a0301c15", size = 8680518, upload-time = "2025-08-30T00:12:34.387Z" }, - { url = "https://files.pythonhosted.org/packages/5f/31/e059ddce95f68819b005a2d6820b2d6ed0307827a04598891f00649bed2d/matplotlib-3.10.6-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea117a9c1627acaa04dbf36265691921b999cbf515a015298e54e1a12c3af837", size = 9514997, upload-time = "2025-08-30T00:12:36.272Z" }, - { url = "https://files.pythonhosted.org/packages/66/d5/28b408a7c0f07b41577ee27e4454fe329e78ca21fe46ae7a27d279165fb5/matplotlib-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08fc803293b4e1694ee325896030de97f74c141ccff0be886bb5915269247676", size = 9566440, upload-time = "2025-08-30T00:12:41.675Z" }, - { url = "https://files.pythonhosted.org/packages/2d/99/8325b3386b479b1d182ab1a7fd588fd393ff00a99dc04b7cf7d06668cf0f/matplotlib-3.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:2adf92d9b7527fbfb8818e050260f0ebaa460f79d61546374ce73506c9421d09", size = 8108186, upload-time = "2025-08-30T00:12:43.621Z" }, - { url = "https://files.pythonhosted.org/packages/d3/29/4a8650a3dcae97fa4f375d46efcb25920d67b512186f8a6788b896062a81/matplotlib-3.10.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:942a8de2b5bfff1de31d95722f702e2966b8a7e31f4e68f7cd963c7cd8861cf6", size = 8692682, upload-time = "2025-08-30T00:12:48.781Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d3/b793b9cb061cfd5d42ff0f69d1822f8d5dbc94e004618e48a97a8373179a/matplotlib-3.10.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3276c85370bc0dfca051ec65c5817d1e0f8f5ce1b7787528ec8ed2d524bbc2f", size = 9521065, upload-time = "2025-08-30T00:12:50.602Z" }, - { url = "https://files.pythonhosted.org/packages/f7/c5/53de5629f223c1c66668d46ac2621961970d21916a4bc3862b174eb2a88f/matplotlib-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9df5851b219225731f564e4b9e7f2ac1e13c9e6481f941b5631a0f8e2d9387ce", size = 9576888, upload-time = "2025-08-30T00:12:52.92Z" }, - { url = "https://files.pythonhosted.org/packages/fc/8e/0a18d6d7d2d0a2e66585032a760d13662e5250c784d53ad50434e9560991/matplotlib-3.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:abb5d9478625dd9c9eb51a06d39aae71eda749ae9b3138afb23eb38824026c7e", size = 8115158, upload-time = "2025-08-30T00:12:54.863Z" }, - { url = "https://files.pythonhosted.org/packages/07/b3/1a5107bb66c261e23b9338070702597a2d374e5aa7004b7adfc754fbed02/matplotlib-3.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:886f989ccfae63659183173bb3fced7fd65e9eb793c3cc21c273add368536951", size = 7992444, upload-time = "2025-08-30T00:12:57.067Z" }, - { url = "https://files.pythonhosted.org/packages/67/c3/135fdbbbf84e0979712df58e5e22b4f257b3f5e52a3c4aacf1b8abec0d09/matplotlib-3.10.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:56cd2d20842f58c03d2d6e6c1f1cf5548ad6f66b91e1e48f814e4fb5abd1cb95", size = 8697008, upload-time = "2025-08-30T00:13:03.24Z" }, - { url = "https://files.pythonhosted.org/packages/9c/be/c443ea428fb2488a3ea7608714b1bd85a82738c45da21b447dc49e2f8e5d/matplotlib-3.10.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:662df55604a2f9a45435566d6e2660e41efe83cd94f4288dfbf1e6d1eae4b0bb", size = 9530166, upload-time = "2025-08-30T00:13:05.951Z" }, - { url = "https://files.pythonhosted.org/packages/a9/35/48441422b044d74034aea2a3e0d1a49023f12150ebc58f16600132b9bbaf/matplotlib-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08f141d55148cd1fc870c3387d70ca4df16dee10e909b3b038782bd4bda6ea07", size = 9593105, upload-time = "2025-08-30T00:13:08.356Z" }, - { url = "https://files.pythonhosted.org/packages/45/c3/994ef20eb4154ab84cc08d033834555319e4af970165e6c8894050af0b3c/matplotlib-3.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:590f5925c2d650b5c9d813c5b3b5fc53f2929c3f8ef463e4ecfa7e052044fb2b", size = 8122784, upload-time = "2025-08-30T00:13:10.367Z" }, - { url = "https://files.pythonhosted.org/packages/57/b8/5c85d9ae0e40f04e71bedb053aada5d6bab1f9b5399a0937afb5d6b02d98/matplotlib-3.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:f44c8d264a71609c79a78d50349e724f5d5fc3684ead7c2a473665ee63d868aa", size = 7992823, upload-time = "2025-08-30T00:13:12.24Z" }, - { url = "https://files.pythonhosted.org/packages/e5/b8/9eea6630198cb303d131d95d285a024b3b8645b1763a2916fddb44ca8760/matplotlib-3.10.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84e82d9e0fd70c70bc55739defbd8055c54300750cbacf4740c9673a24d6933a", size = 8698539, upload-time = "2025-08-30T00:13:17.297Z" }, - { url = "https://files.pythonhosted.org/packages/71/34/44c7b1f075e1ea398f88aeabcc2907c01b9cc99e2afd560c1d49845a1227/matplotlib-3.10.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25f7a3eb42d6c1c56e89eacd495661fc815ffc08d9da750bca766771c0fd9110", size = 9529702, upload-time = "2025-08-30T00:13:19.248Z" }, - { url = "https://files.pythonhosted.org/packages/b5/7f/e5c2dc9950c7facaf8b461858d1b92c09dd0cf174fe14e21953b3dda06f7/matplotlib-3.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9c862d91ec0b7842920a4cfdaaec29662195301914ea54c33e01f1a28d014b2", size = 9593742, upload-time = "2025-08-30T00:13:21.181Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1d/70c28528794f6410ee2856cd729fa1f1756498b8d3126443b0a94e1a8695/matplotlib-3.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:1b53bd6337eba483e2e7d29c5ab10eee644bc3a2491ec67cc55f7b44583ffb18", size = 8122753, upload-time = "2025-08-30T00:13:23.44Z" }, - { url = "https://files.pythonhosted.org/packages/e8/74/0e1670501fc7d02d981564caf7c4df42974464625935424ca9654040077c/matplotlib-3.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:cbd5eb50b7058b2892ce45c2f4e92557f395c9991f5c886d1bb74a1582e70fd6", size = 7992973, upload-time = "2025-08-30T00:13:26.632Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3f/3c38e78d2aafdb8829fcd0857d25aaf9e7dd2dfcf7ec742765b585774931/matplotlib-3.10.6-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:658bc91894adeab669cf4bb4a186d049948262987e80f0857216387d7435d833", size = 8711719, upload-time = "2025-08-30T00:13:31.72Z" }, - { url = "https://files.pythonhosted.org/packages/96/4b/2ec2bbf8cefaa53207cc56118d1fa8a0f9b80642713ea9390235d331ede4/matplotlib-3.10.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8913b7474f6dd83ac444c9459c91f7f0f2859e839f41d642691b104e0af056aa", size = 9541422, upload-time = "2025-08-30T00:13:33.611Z" }, - { url = "https://files.pythonhosted.org/packages/83/7d/40255e89b3ef11c7871020563b2dd85f6cb1b4eff17c0f62b6eb14c8fa80/matplotlib-3.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:091cea22e059b89f6d7d1a18e2c33a7376c26eee60e401d92a4d6726c4e12706", size = 9594068, upload-time = "2025-08-30T00:13:35.833Z" }, - { url = "https://files.pythonhosted.org/packages/f0/a9/0213748d69dc842537a113493e1c27daf9f96bd7cc316f933dc8ec4de985/matplotlib-3.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:491e25e02a23d7207629d942c666924a6b61e007a48177fdd231a0097b7f507e", size = 8200100, upload-time = "2025-08-30T00:13:37.668Z" }, - { url = "https://files.pythonhosted.org/packages/be/15/79f9988066ce40b8a6f1759a934ea0cde8dc4adc2262255ee1bc98de6ad0/matplotlib-3.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3d80d60d4e54cda462e2cd9a086d85cd9f20943ead92f575ce86885a43a565d5", size = 8042142, upload-time = "2025-08-30T00:13:39.426Z" }, - { url = "https://files.pythonhosted.org/packages/94/bf/ff32f6ed76e78514e98775a53715eca4804b12bdcf35902cdd1cf759d324/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3b23315a01981689aa4e1a179dbf6ef9fbd17143c3eea77548c2ecfb0499438", size = 9533961, upload-time = "2025-08-30T00:13:44.372Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c3/6bf88c2fc2da7708a2ff8d2eeb5d68943130f50e636d5d3dcf9d4252e971/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:30fdd37edf41a4e6785f9b37969de57aea770696cb637d9946eb37470c94a453", size = 9804262, upload-time = "2025-08-30T00:13:46.614Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7a/e05e6d9446d2d577b459427ad060cd2de5742d0e435db3191fea4fcc7e8b/matplotlib-3.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bc31e693da1c08012c764b053e702c1855378e04102238e6a5ee6a7117c53a47", size = 9595508, upload-time = "2025-08-30T00:13:48.731Z" }, - { url = "https://files.pythonhosted.org/packages/39/fb/af09c463ced80b801629fd73b96f726c9f6124c3603aa2e480a061d6705b/matplotlib-3.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:05be9bdaa8b242bc6ff96330d18c52f1fc59c6fb3a4dd411d953d67e7e1baf98", size = 8252742, upload-time = "2025-08-30T00:13:50.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f9/b682f6db9396d9ab8f050c0a3bfbb5f14fb0f6518f08507c04cc02f8f229/matplotlib-3.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:f56a0d1ab05d34c628592435781d185cd99630bdfd76822cd686fb5a0aecd43a", size = 8124237, upload-time = "2025-08-30T00:13:54.3Z" }, - { url = "https://files.pythonhosted.org/packages/c4/89/1fbd5ad611802c34d1c7ad04607e64a1350b7fb9c567c4ec2c19e066ed35/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee1d607b3fb1590deb04b69f02ea1d53ed0b0bf75b2b1a5745f269afcbd3cdd3", size = 9541422, upload-time = "2025-08-30T00:14:02.664Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3b/65fec8716025b22c1d72d5a82ea079934c76a547696eaa55be6866bc89b1/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:376a624a218116461696b27b2bbf7a8945053e6d799f6502fc03226d077807bf", size = 9803678, upload-time = "2025-08-30T00:14:04.741Z" }, - { url = "https://files.pythonhosted.org/packages/c7/b0/40fb2b3a1ab9381bb39a952e8390357c8be3bdadcf6d5055d9c31e1b35ae/matplotlib-3.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:83847b47f6524c34b4f2d3ce726bb0541c48c8e7692729865c3df75bfa0f495a", size = 9594077, upload-time = "2025-08-30T00:14:07.012Z" }, - { url = "https://files.pythonhosted.org/packages/76/34/c4b71b69edf5b06e635eee1ed10bfc73cf8df058b66e63e30e6a55e231d5/matplotlib-3.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c7e0518e0d223683532a07f4b512e2e0729b62674f1b3a1a69869f98e6b1c7e3", size = 8342822, upload-time = "2025-08-30T00:14:09.041Z" }, - { url = "https://files.pythonhosted.org/packages/e8/62/aeabeef1a842b6226a30d49dd13e8a7a1e81e9ec98212c0b5169f0a12d83/matplotlib-3.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:4dd83e029f5b4801eeb87c64efd80e732452781c16a9cf7415b7b63ec8f374d7", size = 8172588, upload-time = "2025-08-30T00:14:11.166Z" }, - { url = "https://files.pythonhosted.org/packages/27/27/c29696702b9317a6ade1ba6f8861e02d7423f18501729203d7a80b686f23/matplotlib-3.10.6-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f7173f8551b88f4ef810a94adae3128c2530e0d07529f7141be7f8d8c365f051", size = 8682271, upload-time = "2025-08-30T00:14:17.273Z" }, - { url = "https://files.pythonhosted.org/packages/16/53/8d8fa0ea32a8c8239e04d022f6c059ee5e1b77517769feccd50f1df43d6d/matplotlib-3.10.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d6ca6ef03dfd269f4ead566ec6f3fb9becf8dab146fb999022ed85ee9f6b3eb", size = 8693933, upload-time = "2025-08-30T00:14:22.942Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a0/59/c3e6453a9676ffba145309a73c462bb407f4400de7de3f2b41af70720a3c/matplotlib-3.10.6.tar.gz", hash = "sha256:ec01b645840dd1996df21ee37f208cd8ba57644779fa20464010638013d3203c", size = 34804264 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/5b/a53f69bb0522db352b1135bb57cd9fe00fd7252072409392d991d3a755d0/matplotlib-3.10.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fa4c43d6bfdbfec09c733bca8667de11bfa4970e8324c471f3a3632a0301c15", size = 8680518 }, + { url = "https://files.pythonhosted.org/packages/5f/31/e059ddce95f68819b005a2d6820b2d6ed0307827a04598891f00649bed2d/matplotlib-3.10.6-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea117a9c1627acaa04dbf36265691921b999cbf515a015298e54e1a12c3af837", size = 9514997 }, + { url = "https://files.pythonhosted.org/packages/66/d5/28b408a7c0f07b41577ee27e4454fe329e78ca21fe46ae7a27d279165fb5/matplotlib-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08fc803293b4e1694ee325896030de97f74c141ccff0be886bb5915269247676", size = 9566440 }, + { url = "https://files.pythonhosted.org/packages/2d/99/8325b3386b479b1d182ab1a7fd588fd393ff00a99dc04b7cf7d06668cf0f/matplotlib-3.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:2adf92d9b7527fbfb8818e050260f0ebaa460f79d61546374ce73506c9421d09", size = 8108186 }, + { url = "https://files.pythonhosted.org/packages/d3/29/4a8650a3dcae97fa4f375d46efcb25920d67b512186f8a6788b896062a81/matplotlib-3.10.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:942a8de2b5bfff1de31d95722f702e2966b8a7e31f4e68f7cd963c7cd8861cf6", size = 8692682 }, + { url = "https://files.pythonhosted.org/packages/aa/d3/b793b9cb061cfd5d42ff0f69d1822f8d5dbc94e004618e48a97a8373179a/matplotlib-3.10.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3276c85370bc0dfca051ec65c5817d1e0f8f5ce1b7787528ec8ed2d524bbc2f", size = 9521065 }, + { url = "https://files.pythonhosted.org/packages/f7/c5/53de5629f223c1c66668d46ac2621961970d21916a4bc3862b174eb2a88f/matplotlib-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9df5851b219225731f564e4b9e7f2ac1e13c9e6481f941b5631a0f8e2d9387ce", size = 9576888 }, + { url = "https://files.pythonhosted.org/packages/fc/8e/0a18d6d7d2d0a2e66585032a760d13662e5250c784d53ad50434e9560991/matplotlib-3.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:abb5d9478625dd9c9eb51a06d39aae71eda749ae9b3138afb23eb38824026c7e", size = 8115158 }, + { url = "https://files.pythonhosted.org/packages/07/b3/1a5107bb66c261e23b9338070702597a2d374e5aa7004b7adfc754fbed02/matplotlib-3.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:886f989ccfae63659183173bb3fced7fd65e9eb793c3cc21c273add368536951", size = 7992444 }, + { url = "https://files.pythonhosted.org/packages/67/c3/135fdbbbf84e0979712df58e5e22b4f257b3f5e52a3c4aacf1b8abec0d09/matplotlib-3.10.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:56cd2d20842f58c03d2d6e6c1f1cf5548ad6f66b91e1e48f814e4fb5abd1cb95", size = 8697008 }, + { url = "https://files.pythonhosted.org/packages/9c/be/c443ea428fb2488a3ea7608714b1bd85a82738c45da21b447dc49e2f8e5d/matplotlib-3.10.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:662df55604a2f9a45435566d6e2660e41efe83cd94f4288dfbf1e6d1eae4b0bb", size = 9530166 }, + { url = "https://files.pythonhosted.org/packages/a9/35/48441422b044d74034aea2a3e0d1a49023f12150ebc58f16600132b9bbaf/matplotlib-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:08f141d55148cd1fc870c3387d70ca4df16dee10e909b3b038782bd4bda6ea07", size = 9593105 }, + { url = "https://files.pythonhosted.org/packages/45/c3/994ef20eb4154ab84cc08d033834555319e4af970165e6c8894050af0b3c/matplotlib-3.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:590f5925c2d650b5c9d813c5b3b5fc53f2929c3f8ef463e4ecfa7e052044fb2b", size = 8122784 }, + { url = "https://files.pythonhosted.org/packages/57/b8/5c85d9ae0e40f04e71bedb053aada5d6bab1f9b5399a0937afb5d6b02d98/matplotlib-3.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:f44c8d264a71609c79a78d50349e724f5d5fc3684ead7c2a473665ee63d868aa", size = 7992823 }, + { url = "https://files.pythonhosted.org/packages/e5/b8/9eea6630198cb303d131d95d285a024b3b8645b1763a2916fddb44ca8760/matplotlib-3.10.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84e82d9e0fd70c70bc55739defbd8055c54300750cbacf4740c9673a24d6933a", size = 8698539 }, + { url = "https://files.pythonhosted.org/packages/71/34/44c7b1f075e1ea398f88aeabcc2907c01b9cc99e2afd560c1d49845a1227/matplotlib-3.10.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25f7a3eb42d6c1c56e89eacd495661fc815ffc08d9da750bca766771c0fd9110", size = 9529702 }, + { url = "https://files.pythonhosted.org/packages/b5/7f/e5c2dc9950c7facaf8b461858d1b92c09dd0cf174fe14e21953b3dda06f7/matplotlib-3.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9c862d91ec0b7842920a4cfdaaec29662195301914ea54c33e01f1a28d014b2", size = 9593742 }, + { url = "https://files.pythonhosted.org/packages/ff/1d/70c28528794f6410ee2856cd729fa1f1756498b8d3126443b0a94e1a8695/matplotlib-3.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:1b53bd6337eba483e2e7d29c5ab10eee644bc3a2491ec67cc55f7b44583ffb18", size = 8122753 }, + { url = "https://files.pythonhosted.org/packages/e8/74/0e1670501fc7d02d981564caf7c4df42974464625935424ca9654040077c/matplotlib-3.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:cbd5eb50b7058b2892ce45c2f4e92557f395c9991f5c886d1bb74a1582e70fd6", size = 7992973 }, + { url = "https://files.pythonhosted.org/packages/c6/3f/3c38e78d2aafdb8829fcd0857d25aaf9e7dd2dfcf7ec742765b585774931/matplotlib-3.10.6-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:658bc91894adeab669cf4bb4a186d049948262987e80f0857216387d7435d833", size = 8711719 }, + { url = "https://files.pythonhosted.org/packages/96/4b/2ec2bbf8cefaa53207cc56118d1fa8a0f9b80642713ea9390235d331ede4/matplotlib-3.10.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8913b7474f6dd83ac444c9459c91f7f0f2859e839f41d642691b104e0af056aa", size = 9541422 }, + { url = "https://files.pythonhosted.org/packages/83/7d/40255e89b3ef11c7871020563b2dd85f6cb1b4eff17c0f62b6eb14c8fa80/matplotlib-3.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:091cea22e059b89f6d7d1a18e2c33a7376c26eee60e401d92a4d6726c4e12706", size = 9594068 }, + { url = "https://files.pythonhosted.org/packages/f0/a9/0213748d69dc842537a113493e1c27daf9f96bd7cc316f933dc8ec4de985/matplotlib-3.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:491e25e02a23d7207629d942c666924a6b61e007a48177fdd231a0097b7f507e", size = 8200100 }, + { url = "https://files.pythonhosted.org/packages/be/15/79f9988066ce40b8a6f1759a934ea0cde8dc4adc2262255ee1bc98de6ad0/matplotlib-3.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3d80d60d4e54cda462e2cd9a086d85cd9f20943ead92f575ce86885a43a565d5", size = 8042142 }, + { url = "https://files.pythonhosted.org/packages/94/bf/ff32f6ed76e78514e98775a53715eca4804b12bdcf35902cdd1cf759d324/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3b23315a01981689aa4e1a179dbf6ef9fbd17143c3eea77548c2ecfb0499438", size = 9533961 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/6bf88c2fc2da7708a2ff8d2eeb5d68943130f50e636d5d3dcf9d4252e971/matplotlib-3.10.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:30fdd37edf41a4e6785f9b37969de57aea770696cb637d9946eb37470c94a453", size = 9804262 }, + { url = "https://files.pythonhosted.org/packages/0f/7a/e05e6d9446d2d577b459427ad060cd2de5742d0e435db3191fea4fcc7e8b/matplotlib-3.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bc31e693da1c08012c764b053e702c1855378e04102238e6a5ee6a7117c53a47", size = 9595508 }, + { url = "https://files.pythonhosted.org/packages/39/fb/af09c463ced80b801629fd73b96f726c9f6124c3603aa2e480a061d6705b/matplotlib-3.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:05be9bdaa8b242bc6ff96330d18c52f1fc59c6fb3a4dd411d953d67e7e1baf98", size = 8252742 }, + { url = "https://files.pythonhosted.org/packages/b1/f9/b682f6db9396d9ab8f050c0a3bfbb5f14fb0f6518f08507c04cc02f8f229/matplotlib-3.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:f56a0d1ab05d34c628592435781d185cd99630bdfd76822cd686fb5a0aecd43a", size = 8124237 }, + { url = "https://files.pythonhosted.org/packages/c4/89/1fbd5ad611802c34d1c7ad04607e64a1350b7fb9c567c4ec2c19e066ed35/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee1d607b3fb1590deb04b69f02ea1d53ed0b0bf75b2b1a5745f269afcbd3cdd3", size = 9541422 }, + { url = "https://files.pythonhosted.org/packages/b0/3b/65fec8716025b22c1d72d5a82ea079934c76a547696eaa55be6866bc89b1/matplotlib-3.10.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:376a624a218116461696b27b2bbf7a8945053e6d799f6502fc03226d077807bf", size = 9803678 }, + { url = "https://files.pythonhosted.org/packages/c7/b0/40fb2b3a1ab9381bb39a952e8390357c8be3bdadcf6d5055d9c31e1b35ae/matplotlib-3.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:83847b47f6524c34b4f2d3ce726bb0541c48c8e7692729865c3df75bfa0f495a", size = 9594077 }, + { url = "https://files.pythonhosted.org/packages/76/34/c4b71b69edf5b06e635eee1ed10bfc73cf8df058b66e63e30e6a55e231d5/matplotlib-3.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c7e0518e0d223683532a07f4b512e2e0729b62674f1b3a1a69869f98e6b1c7e3", size = 8342822 }, + { url = "https://files.pythonhosted.org/packages/e8/62/aeabeef1a842b6226a30d49dd13e8a7a1e81e9ec98212c0b5169f0a12d83/matplotlib-3.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:4dd83e029f5b4801eeb87c64efd80e732452781c16a9cf7415b7b63ec8f374d7", size = 8172588 }, + { url = "https://files.pythonhosted.org/packages/27/27/c29696702b9317a6ade1ba6f8861e02d7423f18501729203d7a80b686f23/matplotlib-3.10.6-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f7173f8551b88f4ef810a94adae3128c2530e0d07529f7141be7f8d8c365f051", size = 8682271 }, + { url = "https://files.pythonhosted.org/packages/16/53/8d8fa0ea32a8c8239e04d022f6c059ee5e1b77517769feccd50f1df43d6d/matplotlib-3.10.6-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d6ca6ef03dfd269f4ead566ec6f3fb9becf8dab146fb999022ed85ee9f6b3eb", size = 8693933 }, ] [[package]] @@ -2101,27 +2100,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, ] [[package]] name = "mergedeep" version = "1.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, ] [[package]] @@ -2131,9 +2130,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wirerope" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/13/3b/c21b74ac17befdf17b286494b02221b7a84affb1d410ff86e38ba0e14b13/methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba", size = 3586, upload-time = "2023-02-05T13:17:54.473Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/3b/c21b74ac17befdf17b286494b02221b7a84affb1d410ff86e38ba0e14b13/methodtools-0.4.7.tar.gz", hash = "sha256:e213439dd64cfe60213f7015da6efe5dd4003fd89376db3baa09fe13ec2bb0ba", size = 3586 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/4b/6497ffb463b1b75e04b348ef31070606d43e3c503fa295383538ded999c9/methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11", size = 4038, upload-time = "2024-08-23T09:18:03.631Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4b/6497ffb463b1b75e04b348ef31070606d43e3c503fa295383538ded999c9/methodtools-0.4.7-py2.py3-none-any.whl", hash = "sha256:5e188c780b236adc12e75b5f078c5afb419ef99eb648569fc6d7071f053a1f11", size = 4038 }, ] [[package]] @@ -2150,9 +2149,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "verspec" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/f7/2933f1a1fb0e0f077d5d6a92c6c7f8a54e6128241f116dff4df8b6050bbf/mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810", size = 38119, upload-time = "2024-08-13T05:02:14.167Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/f7/2933f1a1fb0e0f077d5d6a92c6c7f8a54e6128241f116dff4df8b6050bbf/mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810", size = 38119 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a", size = 33754, upload-time = "2024-08-13T05:02:12.515Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a", size = 33754 }, ] [[package]] @@ -2162,9 +2161,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588, upload-time = "2025-08-29T07:20:43.594Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/02/a7fb8b21d4d55ac93cdcde9d3638da5dd0ebdd3a4fed76c7725e10b81cbe/mistune-3.1.4.tar.gz", hash = "sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164", size = 94588 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481 }, ] [[package]] @@ -2186,9 +2185,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451 }, ] [[package]] @@ -2200,9 +2199,9 @@ dependencies = [ { name = "markupsafe" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425, upload-time = "2025-08-26T14:23:17.223Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034, upload-time = "2025-08-26T14:23:15.906Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034 }, ] [[package]] @@ -2213,9 +2212,9 @@ dependencies = [ { name = "httplib2" }, { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/09/e2a651a1b98aa2685b8dcd1c8b65e6082254e584d51c9f9cddfb86223159/mkdocs-build-plantuml-plugin-1.9.0.tar.gz", hash = "sha256:b0468a2024741ff5c39d5307e34e54e11225ee0da378ef2bc35ed0e0f1cfc99d", size = 8728, upload-time = "2023-11-10T19:24:38.534Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/09/e2a651a1b98aa2685b8dcd1c8b65e6082254e584d51c9f9cddfb86223159/mkdocs-build-plantuml-plugin-1.9.0.tar.gz", hash = "sha256:b0468a2024741ff5c39d5307e34e54e11225ee0da378ef2bc35ed0e0f1cfc99d", size = 8728 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/2d/31e3941ccc1cb7acb5df12f536658b03e07c0f44ace7067f5e71aedd0189/mkdocs_build_plantuml_plugin-1.9.0-py3-none-any.whl", hash = "sha256:ba738b698b69dfba8fbd49f92336a17cbe9df16c7b4d384b85528058301ec0c3", size = 9129, upload-time = "2023-11-10T19:24:37.173Z" }, + { url = "https://files.pythonhosted.org/packages/a9/2d/31e3941ccc1cb7acb5df12f536658b03e07c0f44ace7067f5e71aedd0189/mkdocs_build_plantuml_plugin-1.9.0-py3-none-any.whl", hash = "sha256:ba738b698b69dfba8fbd49f92336a17cbe9df16c7b4d384b85528058301ec0c3", size = 9129 }, ] [[package]] @@ -2225,7 +2224,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/b5/3a8e289282c9e8d7003f8a2f53d673d4fdaa81d493dc6966092d9985b6fc/mkdocs-exclude-1.0.2.tar.gz", hash = "sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51", size = 6751, upload-time = "2019-02-20T23:34:12.81Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/b5/3a8e289282c9e8d7003f8a2f53d673d4fdaa81d493dc6966092d9985b6fc/mkdocs-exclude-1.0.2.tar.gz", hash = "sha256:ba6fab3c80ddbe3fd31d3e579861fd3124513708271180a5f81846da8c7e2a51", size = 6751 } [[package]] name = "mkdocs-gen-files" @@ -2234,9 +2233,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/48/85/2d634462fd59136197d3126ca431ffb666f412e3db38fd5ce3a60566303e/mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc", size = 7539, upload-time = "2023-04-27T19:48:04.894Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/85/2d634462fd59136197d3126ca431ffb666f412e3db38fd5ce3a60566303e/mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc", size = 7539 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/0f/1e55b3fd490ad2cecb6e7b31892d27cb9fc4218ec1dab780440ba8579e74/mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea", size = 8380, upload-time = "2023-04-27T19:48:07.059Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0f/1e55b3fd490ad2cecb6e7b31892d27cb9fc4218ec1dab780440ba8579e74/mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea", size = 8380 }, ] [[package]] @@ -2248,9 +2247,9 @@ dependencies = [ { name = "platformdirs" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521 }, ] [[package]] @@ -2260,9 +2259,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "selectolax" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8b/72/c03e9d8d2dbe098d7ce5d51309933a1d3aea268965ed097ab16f4b54de15/mkdocs_glightbox-0.5.1.tar.gz", hash = "sha256:7d78a5b045f2479f61b0bbb17742ba701755c56b013e70ac189c9d87a91e80bf", size = 480028, upload-time = "2025-09-04T13:10:29.679Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/72/c03e9d8d2dbe098d7ce5d51309933a1d3aea268965ed097ab16f4b54de15/mkdocs_glightbox-0.5.1.tar.gz", hash = "sha256:7d78a5b045f2479f61b0bbb17742ba701755c56b013e70ac189c9d87a91e80bf", size = 480028 } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/cf/e9a0ce9da269746906fdc595c030f6df66793dad1487abd1699af2ba44f1/mkdocs_glightbox-0.5.1-py3-none-any.whl", hash = "sha256:f47af0daff164edf8d36e553338425be3aab6e34b987d9cbbc2ae7819a98cb01", size = 26431, upload-time = "2025-09-04T13:10:27.933Z" }, + { url = "https://files.pythonhosted.org/packages/30/cf/e9a0ce9da269746906fdc595c030f6df66793dad1487abd1699af2ba44f1/mkdocs_glightbox-0.5.1-py3-none-any.whl", hash = "sha256:f47af0daff164edf8d36e553338425be3aab6e34b987d9cbbc2ae7819a98cb01", size = 26431 }, ] [[package]] @@ -2272,9 +2271,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f6/5f/99aa379b305cd1c2084d42db3d26f6de0ea9bf2cc1d10ed17f61aff35b9a/mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75", size = 17419, upload-time = "2025-03-18T21:53:09.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/5f/99aa379b305cd1c2084d42db3d26f6de0ea9bf2cc1d10ed17f61aff35b9a/mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75", size = 17419 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/84/b5b14d2745e4dd1a90115186284e9ee1b4d0863104011ab46abb7355a1c3/mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630", size = 13261, upload-time = "2025-03-18T21:53:08.1Z" }, + { url = "https://files.pythonhosted.org/packages/8a/84/b5b14d2745e4dd1a90115186284e9ee1b4d0863104011ab46abb7355a1c3/mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630", size = 13261 }, ] [[package]] @@ -2294,18 +2293,18 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/d5/ab83ca9aa314954b0a9e8849780bdd01866a3cfcb15ffb7e3a61ca06ff0b/mkdocs_material-9.6.21.tar.gz", hash = "sha256:b01aa6d2731322438056f360f0e623d3faae981f8f2d8c68b1b973f4f2657870", size = 4043097, upload-time = "2025-09-30T19:11:27.517Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/d5/ab83ca9aa314954b0a9e8849780bdd01866a3cfcb15ffb7e3a61ca06ff0b/mkdocs_material-9.6.21.tar.gz", hash = "sha256:b01aa6d2731322438056f360f0e623d3faae981f8f2d8c68b1b973f4f2657870", size = 4043097 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/4f/98681c2030375fe9b057dbfb9008b68f46c07dddf583f4df09bf8075e37f/mkdocs_material-9.6.21-py3-none-any.whl", hash = "sha256:aa6a5ab6fb4f6d381588ac51da8782a4d3757cb3d1b174f81a2ec126e1f22c92", size = 9203097, upload-time = "2025-09-30T19:11:24.063Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4f/98681c2030375fe9b057dbfb9008b68f46c07dddf583f4df09bf8075e37f/mkdocs_material-9.6.21-py3-none-any.whl", hash = "sha256:aa6a5ab6fb4f6d381588ac51da8782a4d3757cb3d1b174f81a2ec126e1f22c92", size = 9203097 }, ] [[package]] name = "mkdocs-material-extensions" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728 }, ] [[package]] @@ -2316,7 +2315,7 @@ dependencies = [ { name = "mkdocs" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/de/0b/cf5e4e9529a8068d4b2def4b38540f7a5762283bdd5b652ee083b8a7c9c6/mkdocs_render_swagger_plugin-0.1.2-py3-none-any.whl", hash = "sha256:0340d45e12a0f1633a4b8af2eb99ea75469006ddf418ef0f1acd51ed1e4969e4", size = 5988, upload-time = "2024-05-26T19:34:44.442Z" }, + { url = "https://files.pythonhosted.org/packages/de/0b/cf5e4e9529a8068d4b2def4b38540f7a5762283bdd5b652ee083b8a7c9c6/mkdocs_render_swagger_plugin-0.1.2-py3-none-any.whl", hash = "sha256:0340d45e12a0f1633a4b8af2eb99ea75469006ddf418ef0f1acd51ed1e4969e4", size = 5988 }, ] [[package]] @@ -2331,9 +2330,9 @@ dependencies = [ { name = "mkdocs-autorefs" }, { name = "pymdown-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350, upload-time = "2025-09-19T10:49:26.446Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704, upload-time = "2025-09-19T10:49:24.805Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704 }, ] [package.optional-dependencies] @@ -2351,18 +2350,18 @@ dependencies = [ { name = "mkdocstrings" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972, upload-time = "2025-08-28T16:11:19.847Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215, upload-time = "2025-08-28T16:11:18.176Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215 }, ] [[package]] name = "mpmath" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, ] [[package]] @@ -2375,57 +2374,57 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846, upload-time = "2025-09-19T00:11:10.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/6f/657961a0743cff32e6c0611b63ff1c1970a0b482ace35b069203bf705187/mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c", size = 12807973, upload-time = "2025-09-19T00:10:35.282Z" }, - { url = "https://files.pythonhosted.org/packages/10/e9/420822d4f661f13ca8900f5fa239b40ee3be8b62b32f3357df9a3045a08b/mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e", size = 11896527, upload-time = "2025-09-19T00:10:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/aa/73/a05b2bbaa7005f4642fcfe40fb73f2b4fb6bb44229bd585b5878e9a87ef8/mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b", size = 12507004, upload-time = "2025-09-19T00:11:05.411Z" }, - { url = "https://files.pythonhosted.org/packages/4f/01/f6e4b9f0d031c11ccbd6f17da26564f3a0f3c4155af344006434b0a05a9d/mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66", size = 13245947, upload-time = "2025-09-19T00:10:46.923Z" }, - { url = "https://files.pythonhosted.org/packages/d7/97/19727e7499bfa1ae0773d06afd30ac66a58ed7437d940c70548634b24185/mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428", size = 13499217, upload-time = "2025-09-19T00:09:39.472Z" }, - { url = "https://files.pythonhosted.org/packages/9f/4f/90dc8c15c1441bf31cf0f9918bb077e452618708199e530f4cbd5cede6ff/mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed", size = 9766753, upload-time = "2025-09-19T00:10:49.161Z" }, - { url = "https://files.pythonhosted.org/packages/88/87/cafd3ae563f88f94eec33f35ff722d043e09832ea8530ef149ec1efbaf08/mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f", size = 12731198, upload-time = "2025-09-19T00:09:44.857Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341", size = 11817879, upload-time = "2025-09-19T00:09:47.131Z" }, - { url = "https://files.pythonhosted.org/packages/72/ef/0c9ba89eb03453e76bdac5a78b08260a848c7bfc5d6603634774d9cd9525/mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d", size = 12427292, upload-time = "2025-09-19T00:10:22.472Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86", size = 13163750, upload-time = "2025-09-19T00:09:51.472Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5f/2cf2ceb3b36372d51568f2208c021870fe7834cf3186b653ac6446511839/mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37", size = 13351827, upload-time = "2025-09-19T00:09:58.311Z" }, - { url = "https://files.pythonhosted.org/packages/c8/7d/2697b930179e7277529eaaec1513f8de622818696857f689e4a5432e5e27/mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8", size = 9757983, upload-time = "2025-09-19T00:10:09.071Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273, upload-time = "2025-09-19T00:10:58.321Z" }, - { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910, upload-time = "2025-09-19T00:10:20.043Z" }, - { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585, upload-time = "2025-09-19T00:10:33.005Z" }, - { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562, upload-time = "2025-09-19T00:10:11.51Z" }, - { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296, upload-time = "2025-09-19T00:10:06.568Z" }, - { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828, upload-time = "2025-09-19T00:10:28.203Z" }, - { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728, upload-time = "2025-09-19T00:10:01.33Z" }, - { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758, upload-time = "2025-09-19T00:10:42.607Z" }, - { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342, upload-time = "2025-09-19T00:11:00.371Z" }, - { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709, upload-time = "2025-09-19T00:11:03.358Z" }, - { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806, upload-time = "2025-09-19T00:10:26.073Z" }, - { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262, upload-time = "2025-09-19T00:10:40.035Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775, upload-time = "2025-09-19T00:10:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852, upload-time = "2025-09-19T00:10:51.631Z" }, - { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242, upload-time = "2025-09-19T00:11:07.955Z" }, - { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683, upload-time = "2025-09-19T00:09:55.572Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749, upload-time = "2025-09-19T00:10:44.827Z" }, - { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959, upload-time = "2025-09-19T00:10:37.344Z" }, - { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367, upload-time = "2025-09-19T00:10:15.489Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/c0/77/8f0d0001ffad290cef2f7f216f96c814866248a0b92a722365ed54648e7e/mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b", size = 3448846 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/6f/657961a0743cff32e6c0611b63ff1c1970a0b482ace35b069203bf705187/mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c", size = 12807973 }, + { url = "https://files.pythonhosted.org/packages/10/e9/420822d4f661f13ca8900f5fa239b40ee3be8b62b32f3357df9a3045a08b/mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e", size = 11896527 }, + { url = "https://files.pythonhosted.org/packages/aa/73/a05b2bbaa7005f4642fcfe40fb73f2b4fb6bb44229bd585b5878e9a87ef8/mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b", size = 12507004 }, + { url = "https://files.pythonhosted.org/packages/4f/01/f6e4b9f0d031c11ccbd6f17da26564f3a0f3c4155af344006434b0a05a9d/mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66", size = 13245947 }, + { url = "https://files.pythonhosted.org/packages/d7/97/19727e7499bfa1ae0773d06afd30ac66a58ed7437d940c70548634b24185/mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428", size = 13499217 }, + { url = "https://files.pythonhosted.org/packages/9f/4f/90dc8c15c1441bf31cf0f9918bb077e452618708199e530f4cbd5cede6ff/mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed", size = 9766753 }, + { url = "https://files.pythonhosted.org/packages/88/87/cafd3ae563f88f94eec33f35ff722d043e09832ea8530ef149ec1efbaf08/mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f", size = 12731198 }, + { url = "https://files.pythonhosted.org/packages/0f/e0/1e96c3d4266a06d4b0197ace5356d67d937d8358e2ee3ffac71faa843724/mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341", size = 11817879 }, + { url = "https://files.pythonhosted.org/packages/72/ef/0c9ba89eb03453e76bdac5a78b08260a848c7bfc5d6603634774d9cd9525/mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d", size = 12427292 }, + { url = "https://files.pythonhosted.org/packages/1a/52/ec4a061dd599eb8179d5411d99775bec2a20542505988f40fc2fee781068/mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86", size = 13163750 }, + { url = "https://files.pythonhosted.org/packages/c4/5f/2cf2ceb3b36372d51568f2208c021870fe7834cf3186b653ac6446511839/mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37", size = 13351827 }, + { url = "https://files.pythonhosted.org/packages/c8/7d/2697b930179e7277529eaaec1513f8de622818696857f689e4a5432e5e27/mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8", size = 9757983 }, + { url = "https://files.pythonhosted.org/packages/07/06/dfdd2bc60c66611dd8335f463818514733bc763e4760dee289dcc33df709/mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34", size = 12908273 }, + { url = "https://files.pythonhosted.org/packages/81/14/6a9de6d13a122d5608e1a04130724caf9170333ac5a924e10f670687d3eb/mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764", size = 11920910 }, + { url = "https://files.pythonhosted.org/packages/5f/a9/b29de53e42f18e8cc547e38daa9dfa132ffdc64f7250e353f5c8cdd44bee/mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893", size = 12465585 }, + { url = "https://files.pythonhosted.org/packages/77/ae/6c3d2c7c61ff21f2bee938c917616c92ebf852f015fb55917fd6e2811db2/mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914", size = 13348562 }, + { url = "https://files.pythonhosted.org/packages/4d/31/aec68ab3b4aebdf8f36d191b0685d99faa899ab990753ca0fee60fb99511/mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8", size = 13533296 }, + { url = "https://files.pythonhosted.org/packages/9f/83/abcb3ad9478fca3ebeb6a5358bb0b22c95ea42b43b7789c7fb1297ca44f4/mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074", size = 9828828 }, + { url = "https://files.pythonhosted.org/packages/5f/04/7f462e6fbba87a72bc8097b93f6842499c428a6ff0c81dd46948d175afe8/mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc", size = 12898728 }, + { url = "https://files.pythonhosted.org/packages/99/5b/61ed4efb64f1871b41fd0b82d29a64640f3516078f6c7905b68ab1ad8b13/mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e", size = 11910758 }, + { url = "https://files.pythonhosted.org/packages/3c/46/d297d4b683cc89a6e4108c4250a6a6b717f5fa96e1a30a7944a6da44da35/mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986", size = 12475342 }, + { url = "https://files.pythonhosted.org/packages/83/45/4798f4d00df13eae3bfdf726c9244bcb495ab5bd588c0eed93a2f2dd67f3/mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d", size = 13338709 }, + { url = "https://files.pythonhosted.org/packages/d7/09/479f7358d9625172521a87a9271ddd2441e1dab16a09708f056e97007207/mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba", size = 13529806 }, + { url = "https://files.pythonhosted.org/packages/71/cf/ac0f2c7e9d0ea3c75cd99dff7aec1c9df4a1376537cb90e4c882267ee7e9/mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544", size = 9833262 }, + { url = "https://files.pythonhosted.org/packages/5a/0c/7d5300883da16f0063ae53996358758b2a2df2a09c72a5061fa79a1f5006/mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce", size = 12893775 }, + { url = "https://files.pythonhosted.org/packages/50/df/2cffbf25737bdb236f60c973edf62e3e7b4ee1c25b6878629e88e2cde967/mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d", size = 11936852 }, + { url = "https://files.pythonhosted.org/packages/be/50/34059de13dd269227fb4a03be1faee6e2a4b04a2051c82ac0a0b5a773c9a/mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c", size = 12480242 }, + { url = "https://files.pythonhosted.org/packages/5b/11/040983fad5132d85914c874a2836252bbc57832065548885b5bb5b0d4359/mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb", size = 13326683 }, + { url = "https://files.pythonhosted.org/packages/e9/ba/89b2901dd77414dd7a8c8729985832a5735053be15b744c18e4586e506ef/mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075", size = 13514749 }, + { url = "https://files.pythonhosted.org/packages/25/bc/cc98767cffd6b2928ba680f3e5bc969c4152bf7c2d83f92f5a504b92b0eb/mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf", size = 9982959 }, + { url = "https://files.pythonhosted.org/packages/87/e3/be76d87158ebafa0309946c4a73831974d4d6ab4f4ef40c3b53a385a66fd/mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e", size = 2352367 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } 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" }, + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, ] [[package]] name = "narwhals" -version = "2.6.0" +version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/40ff412dabf90ef6b99266b0b74f217bb88733541733849e0153a108c750/narwhals-2.6.0.tar.gz", hash = "sha256:5c9e2ba923e6a0051017e146184e49fb793548936f978ce130c9f55a9a81240e", size = 561649, upload-time = "2025-09-29T09:08:56.482Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/76/9ca8f4d03f02b8289807d0c91eeb01fa6b7fdd6273769d5bd1f94773b40b/narwhals-2.7.0.tar.gz", hash = "sha256:e3fff7f1610fd3318ede78c969bc5954ce710d585eefdb689586fb69da3da43c", size = 569315, upload-time = "2025-10-06T09:39:37.69Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/3b/0e2c535c3e6970cfc5763b67f6cc31accaab35a7aa3e322fb6a12830450f/narwhals-2.6.0-py3-none-any.whl", hash = "sha256:3215ea42afb452c6c8527e79cefbe542b674aa08d7e2e99d46b2c9708870e0d4", size = 408435, upload-time = "2025-09-29T09:08:54.503Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/bc630dfd34ad2150d40f9392e94d3803980e71a47e10a709ce9bfcd40ffe/narwhals-2.7.0-py3-none-any.whl", hash = "sha256:010791aa0cee86d90bf2b658264aaec3eeea34fb4ddf2e83746ea4940bcffae3", size = 412767, upload-time = "2025-10-06T09:39:35.564Z" }, ] [[package]] @@ -2438,9 +2437,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, ] [[package]] @@ -2463,9 +2462,9 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, ] [[package]] @@ -2478,18 +2477,18 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, ] [[package]] @@ -2502,7 +2501,7 @@ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/ed/4d27fcfa40ebfdad3d2088a3de7ee48dbff7f35163e815ec1870d2a7398c/netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce", size = 835064, upload-time = "2024-10-22T19:01:25.521Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/ed/4d27fcfa40ebfdad3d2088a3de7ee48dbff7f35163e815ec1870d2a7398c/netcdf4-1.7.2.tar.gz", hash = "sha256:a4c6375540b19989896136943abb6d44850ff6f1fa7d3f063253b1ad3f8b7fce", size = 835064 } wheels = [ { url = "https://files.pythonhosted.org/packages/da/33/ecb4790d053c58ec03f940ab55aacb59a207e356e57792cfd4b4eedbcc4d/netCDF4-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe5b1837ff209185ecfe50bd71884c866b3ee69691051833e410e57f177e059", size = 9210818, upload-time = "2024-10-22T19:00:33.436Z" }, { url = "https://files.pythonhosted.org/packages/db/a6/54f0f335b28228b89e1598fda950382c83b1d7b1f75d28c5eebbcb7f113e/netCDF4-1.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28021c7e886e5bccf9a8ce504c032d1d7f98d86f67495fb7cf2c9564eba04510", size = 9059470, upload-time = "2024-10-22T19:00:35.394Z" }, @@ -2516,6 +2515,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/71/96/d5d8859a6dac29f8ebc815ff8e75770bd513db9f08d7a711e21ae562a948/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30d20e56b9ba2c48884eb89c91b63e6c0612b4927881707e34402719153ef17f", size = 9378149, upload-time = "2024-10-22T19:01:04.924Z" }, { url = "https://files.pythonhosted.org/packages/d1/80/b9c19f1bb4ac6c5fa6f94a4f278bc68a778473d1814a86a375d7cffa193a/netCDF4-1.7.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6bfd38ba0bde04d56f06c1554714a2ea9dab75811c89450dc3ec57a9d36b80", size = 9254471, upload-time = "2024-10-22T19:01:07.041Z" }, { url = "https://files.pythonhosted.org/packages/66/b5/e04550fd53de57001dbd5a87242da7ff784c80790adc48897977b6ccf891/netCDF4-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:5c5fbee6134ee1246c397e1508e5297d825aa19221fdf3fa8dc9727ad824d7a5", size = 6990521, upload-time = "2024-10-23T15:02:27.549Z" }, + { url = "https://files.pythonhosted.org/packages/50/e4/7238549f0625042f8d94ec2f58977bb186a8e2acf4d65b2ad1de2a58d672/netcdf4-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76cb3bbbbe4cd5fca612578eb105c16217380f7f93af2b549e8f38296bc906bb", size = 9682157, upload-time = "2025-10-13T18:32:17.138Z" }, + { url = "https://files.pythonhosted.org/packages/49/3c/1129ea3943f6f5736be08c2d79ca5965d0a55adbfc38f313a59938a7a62a/netcdf4-1.7.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:835ae7bcef666c967241baeeee9bef9376ddb7527297b24735597131f6f628e2", size = 9520752, upload-time = "2025-10-13T18:32:19.493Z" }, + { url = "https://files.pythonhosted.org/packages/0b/eb/144709b60d89eb8995236f49a4e446be87f15b0d63f05dbda55e1315dba3/netcdf4-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:73bd7eda3cefb04c4076e76911f652f5ed56bf434e0a3958e367932953437557", size = 7215191, upload-time = "2025-10-13T18:32:21.112Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5e/9bf3008a9e45c08f4c9fedce4d6f722ef5d970f56a9c5eb375a200dd2b66/netcdf4-1.7.2-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf11480f6b8a5b246818ffff6b4d90481e51f8b9555b41af0c372eb0aaf8b65f", size = 9621674, upload-time = "2025-10-13T18:32:29.193Z" }, + { url = "https://files.pythonhosted.org/packages/a1/75/46871e85f2bbfb1efe229623d25d7c9daa17e2e968d5235572b2c8bb53e8/netcdf4-1.7.2-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ccc05328a8ff31921b539821791aeb20b054879f3fdf6d1d505bf6422824fec", size = 9453759, upload-time = "2025-10-13T18:32:31.136Z" }, + { url = "https://files.pythonhosted.org/packages/cd/10/c52f12297965938d9b9be666ea1f9d8340c2aea31d6909d90aa650847248/netcdf4-1.7.2-cp311-abi3-win_amd64.whl", hash = "sha256:999bfc4acebf400ed724d5e7329e2e768accc7ee1fa1d82d505da782f730301b", size = 7148514, upload-time = "2025-10-13T18:32:33.121Z" }, ] [[package]] @@ -2525,9 +2530,9 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11'", ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, ] [[package]] @@ -2540,9 +2545,9 @@ resolution-markers = [ "python_full_version == '3.12.*'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, ] [[package]] @@ -2556,9 +2561,9 @@ dependencies = [ { name = "notebook-shim" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/09/f6f64ba156842ef68d3ea763fa171a2f7e7224f200a15dd4af5b83c34756/notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a", size = 13937702, upload-time = "2025-09-27T08:00:22.536Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/09/f6f64ba156842ef68d3ea763fa171a2f7e7224f200a15dd4af5b83c34756/notebook-7.4.7.tar.gz", hash = "sha256:3f0a04027dfcee8a876de48fba13ab77ec8c12f72f848a222ed7f5081b9e342a", size = 13937702 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/d7/06d13087e20388926e7423d2489e728d2e59f2453039cdb0574a7c070e76/notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6", size = 14342894, upload-time = "2025-09-27T08:00:18.496Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d7/06d13087e20388926e7423d2489e728d2e59f2453039cdb0574a7c070e76/notebook-7.4.7-py3-none-any.whl", hash = "sha256:362b7c95527f7dd3c4c84d410b782872fd9c734fb2524c11dd92758527b6eda6", size = 14342894 }, ] [[package]] @@ -2568,9 +2573,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167, upload-time = "2024-02-14T23:35:18.353Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, ] [[package]] @@ -2583,16 +2588,16 @@ resolution-markers = [ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/56/8895a76abe4ec94ebd01eeb6d74f587bc4cddd46569670e1402852a5da13/numcodecs-0.13.1.tar.gz", hash = "sha256:a3cf37881df0898f3a9c0d4477df88133fe85185bffe57ba31bcc2fa207709bc", size = 5955215, upload-time = "2024-10-09T16:28:00.188Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/56/8895a76abe4ec94ebd01eeb6d74f587bc4cddd46569670e1402852a5da13/numcodecs-0.13.1.tar.gz", hash = "sha256:a3cf37881df0898f3a9c0d4477df88133fe85185bffe57ba31bcc2fa207709bc", size = 5955215 } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/e4/b9ec2f4dfc34ecf724bc1beb96a9f6fa9b91801645688ffadacd485089da/numcodecs-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96e42f73c31b8c24259c5fac6adba0c3ebf95536e37749dc6c62ade2989dca28", size = 8625842, upload-time = "2024-10-09T16:27:24.168Z" }, - { url = "https://files.pythonhosted.org/packages/fe/90/299952e1477954ec4f92813fa03e743945e3ff711bb4f6c9aace431cb3da/numcodecs-0.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:eda7d7823c9282e65234731fd6bd3986b1f9e035755f7fed248d7d366bb291ab", size = 828638, upload-time = "2024-10-09T16:27:27.063Z" }, - { url = "https://files.pythonhosted.org/packages/a8/b5/d14ad69b63fde041153dfd05d7181a49c0d4864de31a7a1093c8370da957/numcodecs-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233bc7f26abce24d57e44ea8ebeb5cd17084690b4e7409dd470fdb75528d615f", size = 8868743, upload-time = "2024-10-09T16:27:32.833Z" }, - { url = "https://files.pythonhosted.org/packages/13/d4/27a7b5af0b33f6d61e198faf177fbbf3cb83ff10d9d1a6857b7efc525ad5/numcodecs-0.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:796b3e6740107e4fa624cc636248a1580138b3f1c579160f260f76ff13a4261b", size = 829603, upload-time = "2024-10-09T16:27:35.415Z" }, - { url = "https://files.pythonhosted.org/packages/d4/ce/434e8e3970b8e92ae9ab6d9db16cb9bc7aa1cd02e17c11de6848224100a1/numcodecs-0.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2230484e6102e5fa3cc1a5dd37ca1f92dfbd183d91662074d6f7574e3e8f53", size = 8857827, upload-time = "2024-10-09T16:27:42.743Z" }, - { url = "https://files.pythonhosted.org/packages/83/e7/1d8b1b266a92f9013c755b1c146c5ad71a2bff147ecbc67f86546a2e4d6a/numcodecs-0.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5db4824ebd5389ea30e54bc8aeccb82d514d28b6b68da6c536b8fa4596f4bca", size = 826539, upload-time = "2024-10-09T16:27:44.808Z" }, - { url = "https://files.pythonhosted.org/packages/0f/d6/643a3839d571d8e439a2c77dc4b0b8cab18d96ac808e4a81dbe88e959ab6/numcodecs-0.13.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80d3071465f03522e776a31045ddf2cfee7f52df468b977ed3afdd7fe5869701", size = 8814257, upload-time = "2024-10-09T16:27:52.059Z" }, - { url = "https://files.pythonhosted.org/packages/a6/c5/f3e56bc9b4e438a287fff738993d6d11abef368c0328a612ac2842ba9fca/numcodecs-0.13.1-cp313-cp313-win_amd64.whl", hash = "sha256:90d3065ae74c9342048ae0046006f99dcb1388b7288da5a19b3bddf9c30c3176", size = 821887, upload-time = "2024-10-09T16:27:55.039Z" }, + { url = "https://files.pythonhosted.org/packages/16/e4/b9ec2f4dfc34ecf724bc1beb96a9f6fa9b91801645688ffadacd485089da/numcodecs-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96e42f73c31b8c24259c5fac6adba0c3ebf95536e37749dc6c62ade2989dca28", size = 8625842 }, + { url = "https://files.pythonhosted.org/packages/fe/90/299952e1477954ec4f92813fa03e743945e3ff711bb4f6c9aace431cb3da/numcodecs-0.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:eda7d7823c9282e65234731fd6bd3986b1f9e035755f7fed248d7d366bb291ab", size = 828638 }, + { url = "https://files.pythonhosted.org/packages/a8/b5/d14ad69b63fde041153dfd05d7181a49c0d4864de31a7a1093c8370da957/numcodecs-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233bc7f26abce24d57e44ea8ebeb5cd17084690b4e7409dd470fdb75528d615f", size = 8868743 }, + { url = "https://files.pythonhosted.org/packages/13/d4/27a7b5af0b33f6d61e198faf177fbbf3cb83ff10d9d1a6857b7efc525ad5/numcodecs-0.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:796b3e6740107e4fa624cc636248a1580138b3f1c579160f260f76ff13a4261b", size = 829603 }, + { url = "https://files.pythonhosted.org/packages/d4/ce/434e8e3970b8e92ae9ab6d9db16cb9bc7aa1cd02e17c11de6848224100a1/numcodecs-0.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2230484e6102e5fa3cc1a5dd37ca1f92dfbd183d91662074d6f7574e3e8f53", size = 8857827 }, + { url = "https://files.pythonhosted.org/packages/83/e7/1d8b1b266a92f9013c755b1c146c5ad71a2bff147ecbc67f86546a2e4d6a/numcodecs-0.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5db4824ebd5389ea30e54bc8aeccb82d514d28b6b68da6c536b8fa4596f4bca", size = 826539 }, + { url = "https://files.pythonhosted.org/packages/0f/d6/643a3839d571d8e439a2c77dc4b0b8cab18d96ac808e4a81dbe88e959ab6/numcodecs-0.13.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80d3071465f03522e776a31045ddf2cfee7f52df468b977ed3afdd7fe5869701", size = 8814257 }, + { url = "https://files.pythonhosted.org/packages/a6/c5/f3e56bc9b4e438a287fff738993d6d11abef368c0328a612ac2842ba9fca/numcodecs-0.13.1-cp313-cp313-win_amd64.whl", hash = "sha256:90d3065ae74c9342048ae0046006f99dcb1388b7288da5a19b3bddf9c30c3176", size = 821887 }, ] [[package]] @@ -2609,17 +2614,17 @@ dependencies = [ { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f6/48/6188e359b90a9d8a1850f2bc888c023e66f4a8b2b496820babbea414f008/numcodecs-0.16.3.tar.gz", hash = "sha256:53d705865faaf0a7927c973af3777532001c8fbb653de119c1e844608614d799", size = 6275704, upload-time = "2025-09-18T18:54:57.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/48/6188e359b90a9d8a1850f2bc888c023e66f4a8b2b496820babbea414f008/numcodecs-0.16.3.tar.gz", hash = "sha256:53d705865faaf0a7927c973af3777532001c8fbb653de119c1e844608614d799", size = 6275704 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/a0/0de627baeb43e2045a3d4b3de99bf8b69af329a33df1ed4cda468d70c1fb/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913f08194d82dcb37594e6705e6d4ae6ccd4b6571500b832fb3e4a155de1dfe8", size = 8341668, upload-time = "2025-09-18T18:54:39.444Z" }, - { url = "https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a7f1cae9eb18b85709af46570bf9c60056e7155c4c8f610e8080c68124d0e5", size = 8866611, upload-time = "2025-09-18T18:54:41.168Z" }, - { url = "https://files.pythonhosted.org/packages/aa/51/03aece765108fe247717105b5131856546e5428f22a56a14ffdebd017424/numcodecs-0.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7bb7f2c46eb7ec8a1c5f8d8fe1a72c222256dd6d6df5af9eaac7a6b905f3575", size = 806787, upload-time = "2025-09-18T18:54:42.78Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ae/670260c3c4b5ed34a0674561355f3d4ce7fcbdf09a667e5bc841526d271c/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f43fa4a347d1dba775c4506a1c9b15b90144c258433b81f79f1c1b1a990db5", size = 8316365, upload-time = "2025-09-18T18:54:46.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/fa/94e022419c751a60ff0f53642ebae5ef81ed3cc3640f958588e3ad3dc18d/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44869ef564a50aa545215c6a0d42ba5bbc34e9715523fb2336ada3d1fb2b331d", size = 8846228, upload-time = "2025-09-18T18:54:47.858Z" }, - { url = "https://files.pythonhosted.org/packages/71/60/f23733589f3e059bf8589508acd23ffeec230bdf179f138a54f5ab16e0a6/numcodecs-0.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:9aae6996172ba10c5f5111b2998709071b5aeba6b58b1ee0b26b61ed6aa7f2f4", size = 806260, upload-time = "2025-09-18T18:54:49.41Z" }, - { url = "https://files.pythonhosted.org/packages/98/05/b7c127283cfb154a97abb284363825401b69302d71a28608af66f73257cc/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7938502fcc060ed9543814f38ca67048b33d7bd2667756e36e6b1060455b17e", size = 8260987, upload-time = "2025-09-18T18:54:52.883Z" }, - { url = "https://files.pythonhosted.org/packages/ff/46/320d960aff884bc63abaaf846ffa3de4803e83e8070b6f84c5688464839c/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010d628c95be1214536fb22c0df4ced58da954b404b1fcb25ddebf64e4a3f7f3", size = 8805295, upload-time = "2025-09-18T18:54:54.698Z" }, - { url = "https://files.pythonhosted.org/packages/31/ae/acc2e0f1f49ba32afa2174578f170673139248ef86f77e334f2619133867/numcodecs-0.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:e83115e3c32de798c7b7164503e06aae9f9746c1cef564d029616eb44bd6cd90", size = 803204, upload-time = "2025-09-18T18:54:56.192Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a0/0de627baeb43e2045a3d4b3de99bf8b69af329a33df1ed4cda468d70c1fb/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:913f08194d82dcb37594e6705e6d4ae6ccd4b6571500b832fb3e4a155de1dfe8", size = 8341668 }, + { url = "https://files.pythonhosted.org/packages/b6/0f/49d1f74a216149240c4b9403218111f11670bd11af0919fda357bb056bf2/numcodecs-0.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a7f1cae9eb18b85709af46570bf9c60056e7155c4c8f610e8080c68124d0e5", size = 8866611 }, + { url = "https://files.pythonhosted.org/packages/aa/51/03aece765108fe247717105b5131856546e5428f22a56a14ffdebd017424/numcodecs-0.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7bb7f2c46eb7ec8a1c5f8d8fe1a72c222256dd6d6df5af9eaac7a6b905f3575", size = 806787 }, + { url = "https://files.pythonhosted.org/packages/ed/ae/670260c3c4b5ed34a0674561355f3d4ce7fcbdf09a667e5bc841526d271c/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f43fa4a347d1dba775c4506a1c9b15b90144c258433b81f79f1c1b1a990db5", size = 8316365 }, + { url = "https://files.pythonhosted.org/packages/bb/fa/94e022419c751a60ff0f53642ebae5ef81ed3cc3640f958588e3ad3dc18d/numcodecs-0.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44869ef564a50aa545215c6a0d42ba5bbc34e9715523fb2336ada3d1fb2b331d", size = 8846228 }, + { url = "https://files.pythonhosted.org/packages/71/60/f23733589f3e059bf8589508acd23ffeec230bdf179f138a54f5ab16e0a6/numcodecs-0.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:9aae6996172ba10c5f5111b2998709071b5aeba6b58b1ee0b26b61ed6aa7f2f4", size = 806260 }, + { url = "https://files.pythonhosted.org/packages/98/05/b7c127283cfb154a97abb284363825401b69302d71a28608af66f73257cc/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7938502fcc060ed9543814f38ca67048b33d7bd2667756e36e6b1060455b17e", size = 8260987 }, + { url = "https://files.pythonhosted.org/packages/ff/46/320d960aff884bc63abaaf846ffa3de4803e83e8070b6f84c5688464839c/numcodecs-0.16.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010d628c95be1214536fb22c0df4ced58da954b404b1fcb25ddebf64e4a3f7f3", size = 8805295 }, + { url = "https://files.pythonhosted.org/packages/31/ae/acc2e0f1f49ba32afa2174578f170673139248ef86f77e334f2619133867/numcodecs-0.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:e83115e3c32de798c7b7164503e06aae9f9746c1cef564d029616eb44bd6cd90", size = 803204 }, ] [package.optional-dependencies] @@ -2634,62 +2639,62 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, ] [[package]] @@ -2702,86 +2707,86 @@ resolution-markers = [ "python_full_version == '3.12.*'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648, upload-time = "2025-09-09T16:54:12.543Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/45/e80d203ef6b267aa29b22714fb558930b27960a0c5ce3c19c999232bb3eb/numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d", size = 21259253, upload-time = "2025-09-09T15:56:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/52/18/cf2c648fccf339e59302e00e5f2bc87725a3ce1992f30f3f78c9044d7c43/numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569", size = 14450980, upload-time = "2025-09-09T15:56:05.926Z" }, - { url = "https://files.pythonhosted.org/packages/93/fb/9af1082bec870188c42a1c239839915b74a5099c392389ff04215dcee812/numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f", size = 5379709, upload-time = "2025-09-09T15:56:07.95Z" }, - { url = "https://files.pythonhosted.org/packages/75/0f/bfd7abca52bcbf9a4a65abc83fe18ef01ccdeb37bfb28bbd6ad613447c79/numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125", size = 6913923, upload-time = "2025-09-09T15:56:09.443Z" }, - { url = "https://files.pythonhosted.org/packages/79/55/d69adad255e87ab7afda1caf93ca997859092afeb697703e2f010f7c2e55/numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48", size = 14589591, upload-time = "2025-09-09T15:56:11.234Z" }, - { url = "https://files.pythonhosted.org/packages/10/a2/010b0e27ddeacab7839957d7a8f00e91206e0c2c47abbb5f35a2630e5387/numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6", size = 16938714, upload-time = "2025-09-09T15:56:14.637Z" }, - { url = "https://files.pythonhosted.org/packages/1c/6b/12ce8ede632c7126eb2762b9e15e18e204b81725b81f35176eac14dc5b82/numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa", size = 16370592, upload-time = "2025-09-09T15:56:17.285Z" }, - { url = "https://files.pythonhosted.org/packages/b4/35/aba8568b2593067bb6a8fe4c52babb23b4c3b9c80e1b49dff03a09925e4a/numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30", size = 18884474, upload-time = "2025-09-09T15:56:20.943Z" }, - { url = "https://files.pythonhosted.org/packages/45/fa/7f43ba10c77575e8be7b0138d107e4f44ca4a1ef322cd16980ea3e8b8222/numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57", size = 6599794, upload-time = "2025-09-09T15:56:23.258Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a2/a4f78cb2241fe5664a22a10332f2be886dcdea8784c9f6a01c272da9b426/numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa", size = 13088104, upload-time = "2025-09-09T15:56:25.476Z" }, - { url = "https://files.pythonhosted.org/packages/79/64/e424e975adbd38282ebcd4891661965b78783de893b381cbc4832fb9beb2/numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7", size = 10460772, upload-time = "2025-09-09T15:56:27.679Z" }, - { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014, upload-time = "2025-09-09T15:56:29.966Z" }, - { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220, upload-time = "2025-09-09T15:56:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918, upload-time = "2025-09-09T15:56:34.175Z" }, - { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922, upload-time = "2025-09-09T15:56:36.149Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991, upload-time = "2025-09-09T15:56:40.548Z" }, - { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643, upload-time = "2025-09-09T15:56:43.343Z" }, - { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787, upload-time = "2025-09-09T15:56:46.141Z" }, - { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598, upload-time = "2025-09-09T15:56:49.844Z" }, - { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800, upload-time = "2025-09-09T15:56:52.499Z" }, - { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615, upload-time = "2025-09-09T15:56:54.422Z" }, - { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936, upload-time = "2025-09-09T15:56:56.541Z" }, - { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588, upload-time = "2025-09-09T15:56:59.087Z" }, - { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802, upload-time = "2025-09-09T15:57:01.73Z" }, - { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537, upload-time = "2025-09-09T15:57:03.765Z" }, - { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743, upload-time = "2025-09-09T15:57:07.921Z" }, - { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881, upload-time = "2025-09-09T15:57:11.349Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301, upload-time = "2025-09-09T15:57:14.245Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645, upload-time = "2025-09-09T15:57:16.534Z" }, - { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179, upload-time = "2025-09-09T15:57:18.883Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250, upload-time = "2025-09-09T15:57:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269, upload-time = "2025-09-09T15:57:23.034Z" }, - { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314, upload-time = "2025-09-09T15:57:25.045Z" }, - { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025, upload-time = "2025-09-09T15:57:27.257Z" }, - { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053, upload-time = "2025-09-09T15:57:30.077Z" }, - { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444, upload-time = "2025-09-09T15:57:32.733Z" }, - { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039, upload-time = "2025-09-09T15:57:34.328Z" }, - { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314, upload-time = "2025-09-09T15:57:36.255Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722, upload-time = "2025-09-09T15:57:38.622Z" }, - { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755, upload-time = "2025-09-09T15:57:41.16Z" }, - { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560, upload-time = "2025-09-09T15:57:43.459Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776, upload-time = "2025-09-09T15:57:45.793Z" }, - { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281, upload-time = "2025-09-09T15:57:47.492Z" }, - { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275, upload-time = "2025-09-09T15:57:49.647Z" }, - { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527, upload-time = "2025-09-09T15:57:52.006Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159, upload-time = "2025-09-09T15:57:54.407Z" }, - { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624, upload-time = "2025-09-09T15:57:56.5Z" }, - { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627, upload-time = "2025-09-09T15:57:58.206Z" }, - { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926, upload-time = "2025-09-09T15:58:00.035Z" }, - { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958, upload-time = "2025-09-09T15:58:02.738Z" }, - { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920, upload-time = "2025-09-09T15:58:05.029Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076, upload-time = "2025-09-09T15:58:07.745Z" }, - { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952, upload-time = "2025-09-09T15:58:10.096Z" }, - { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322, upload-time = "2025-09-09T15:58:12.138Z" }, - { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630, upload-time = "2025-09-09T15:58:14.64Z" }, - { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987, upload-time = "2025-09-09T15:58:16.889Z" }, - { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076, upload-time = "2025-09-09T15:58:20.343Z" }, - { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491, upload-time = "2025-09-09T15:58:22.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913, upload-time = "2025-09-09T15:58:24.569Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811, upload-time = "2025-09-09T15:58:26.416Z" }, - { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689, upload-time = "2025-09-09T15:58:28.831Z" }, - { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855, upload-time = "2025-09-09T15:58:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520, upload-time = "2025-09-09T15:58:33.762Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371, upload-time = "2025-09-09T15:58:36.04Z" }, - { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576, upload-time = "2025-09-09T15:58:37.927Z" }, - { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953, upload-time = "2025-09-09T15:58:40.576Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f2/7e0a37cfced2644c9563c529f29fa28acbd0960dde32ece683aafa6f4949/numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e", size = 21131019, upload-time = "2025-09-09T15:58:42.838Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/3291f505297ed63831135a6cc0f474da0c868a1f31b0dd9a9f03a7a0d2ed/numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150", size = 14376288, upload-time = "2025-09-09T15:58:45.425Z" }, - { url = "https://files.pythonhosted.org/packages/bf/4b/ae02e985bdeee73d7b5abdefeb98aef1207e96d4c0621ee0cf228ddfac3c/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3", size = 5305425, upload-time = "2025-09-09T15:58:48.6Z" }, - { url = "https://files.pythonhosted.org/packages/8b/eb/9df215d6d7250db32007941500dc51c48190be25f2401d5b2b564e467247/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0", size = 6819053, upload-time = "2025-09-09T15:58:50.401Z" }, - { url = "https://files.pythonhosted.org/packages/57/62/208293d7d6b2a8998a4a1f23ac758648c3c32182d4ce4346062018362e29/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e", size = 14420354, upload-time = "2025-09-09T15:58:52.704Z" }, - { url = "https://files.pythonhosted.org/packages/ed/0c/8e86e0ff7072e14a71b4c6af63175e40d1e7e933ce9b9e9f765a95b4e0c3/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db", size = 16760413, upload-time = "2025-09-09T15:58:55.027Z" }, - { url = "https://files.pythonhosted.org/packages/af/11/0cc63f9f321ccf63886ac203336777140011fb669e739da36d8db3c53b98/numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc", size = 12971844, upload-time = "2025-09-09T15:58:57.359Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/45/e80d203ef6b267aa29b22714fb558930b27960a0c5ce3c19c999232bb3eb/numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d", size = 21259253 }, + { url = "https://files.pythonhosted.org/packages/52/18/cf2c648fccf339e59302e00e5f2bc87725a3ce1992f30f3f78c9044d7c43/numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569", size = 14450980 }, + { url = "https://files.pythonhosted.org/packages/93/fb/9af1082bec870188c42a1c239839915b74a5099c392389ff04215dcee812/numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f", size = 5379709 }, + { url = "https://files.pythonhosted.org/packages/75/0f/bfd7abca52bcbf9a4a65abc83fe18ef01ccdeb37bfb28bbd6ad613447c79/numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125", size = 6913923 }, + { url = "https://files.pythonhosted.org/packages/79/55/d69adad255e87ab7afda1caf93ca997859092afeb697703e2f010f7c2e55/numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48", size = 14589591 }, + { url = "https://files.pythonhosted.org/packages/10/a2/010b0e27ddeacab7839957d7a8f00e91206e0c2c47abbb5f35a2630e5387/numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6", size = 16938714 }, + { url = "https://files.pythonhosted.org/packages/1c/6b/12ce8ede632c7126eb2762b9e15e18e204b81725b81f35176eac14dc5b82/numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa", size = 16370592 }, + { url = "https://files.pythonhosted.org/packages/b4/35/aba8568b2593067bb6a8fe4c52babb23b4c3b9c80e1b49dff03a09925e4a/numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30", size = 18884474 }, + { url = "https://files.pythonhosted.org/packages/45/fa/7f43ba10c77575e8be7b0138d107e4f44ca4a1ef322cd16980ea3e8b8222/numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57", size = 6599794 }, + { url = "https://files.pythonhosted.org/packages/0a/a2/a4f78cb2241fe5664a22a10332f2be886dcdea8784c9f6a01c272da9b426/numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa", size = 13088104 }, + { url = "https://files.pythonhosted.org/packages/79/64/e424e975adbd38282ebcd4891661965b78783de893b381cbc4832fb9beb2/numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7", size = 10460772 }, + { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014 }, + { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220 }, + { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918 }, + { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922 }, + { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991 }, + { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643 }, + { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787 }, + { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598 }, + { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800 }, + { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615 }, + { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936 }, + { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588 }, + { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802 }, + { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537 }, + { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743 }, + { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881 }, + { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301 }, + { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645 }, + { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179 }, + { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250 }, + { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269 }, + { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314 }, + { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025 }, + { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053 }, + { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444 }, + { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039 }, + { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314 }, + { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722 }, + { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755 }, + { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560 }, + { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776 }, + { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281 }, + { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275 }, + { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527 }, + { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159 }, + { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624 }, + { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627 }, + { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926 }, + { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958 }, + { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920 }, + { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076 }, + { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952 }, + { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322 }, + { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630 }, + { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987 }, + { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076 }, + { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491 }, + { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913 }, + { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811 }, + { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689 }, + { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855 }, + { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520 }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371 }, + { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576 }, + { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953 }, + { url = "https://files.pythonhosted.org/packages/b8/f2/7e0a37cfced2644c9563c529f29fa28acbd0960dde32ece683aafa6f4949/numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e", size = 21131019 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/3291f505297ed63831135a6cc0f474da0c868a1f31b0dd9a9f03a7a0d2ed/numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150", size = 14376288 }, + { url = "https://files.pythonhosted.org/packages/bf/4b/ae02e985bdeee73d7b5abdefeb98aef1207e96d4c0621ee0cf228ddfac3c/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3", size = 5305425 }, + { url = "https://files.pythonhosted.org/packages/8b/eb/9df215d6d7250db32007941500dc51c48190be25f2401d5b2b564e467247/numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0", size = 6819053 }, + { url = "https://files.pythonhosted.org/packages/57/62/208293d7d6b2a8998a4a1f23ac758648c3c32182d4ce4346062018362e29/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e", size = 14420354 }, + { url = "https://files.pythonhosted.org/packages/ed/0c/8e86e0ff7072e14a71b4c6af63175e40d1e7e933ce9b9e9f765a95b4e0c3/numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db", size = 16760413 }, + { url = "https://files.pythonhosted.org/packages/af/11/0cc63f9f321ccf63886ac203336777140011fb669e739da36d8db3c53b98/numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc", size = 12971844 }, ] [[package]] name = "opensquirrel" -version = "0.6.1" +version = "0.7.0" source = { editable = "." } dependencies = [ { name = "libqasm" }, @@ -2841,7 +2846,7 @@ dev = [ { name = "mypy", specifier = ">=1.18.2,<2" }, { name = "pytest", specifier = ">=8.4.2,<9" }, { name = "pytest-cov", specifier = ">=4.1,<8.0" }, - { name = "ruff", specifier = ">=0.13.2,<0.14" }, + { name = "ruff", specifier = ">=0.13.2,<0.15" }, { name = "sympy", specifier = ">=1.14.0,<2" }, { name = "tox", specifier = ">=4.30.2,<5" }, ] @@ -2862,7 +2867,7 @@ docs = [ examples = [{ name = "jupyter", specifier = ">=1.0.0,<2" }] export = [ { name = "pyqt5-qt5", marker = "sys_platform != 'darwin'", specifier = "==5.15.2" }, - { name = "quantify-scheduler", marker = "sys_platform != 'darwin'", specifier = "==0.23.1" }, + { name = "quantify-scheduler", marker = "sys_platform != 'darwin'", specifier = "==0.25.1" }, ] [[package]] @@ -2873,45 +2878,45 @@ dependencies = [ { name = "importlib-metadata" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/04/05040d7ce33a907a2a02257e601992f0cdf11c73b33f13c4492bf6c3d6d5/opentelemetry_api-1.37.0.tar.gz", hash = "sha256:540735b120355bd5112738ea53621f8d5edb35ebcd6fe21ada3ab1c61d1cd9a7", size = 64923, upload-time = "2025-09-11T10:29:01.662Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/04/05040d7ce33a907a2a02257e601992f0cdf11c73b33f13c4492bf6c3d6d5/opentelemetry_api-1.37.0.tar.gz", hash = "sha256:540735b120355bd5112738ea53621f8d5edb35ebcd6fe21ada3ab1c61d1cd9a7", size = 64923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/48/28ed9e55dcf2f453128df738210a980e09f4e468a456fa3c763dbc8be70a/opentelemetry_api-1.37.0-py3-none-any.whl", hash = "sha256:accf2024d3e89faec14302213bc39550ec0f4095d1cf5ca688e1bfb1c8612f47", size = 65732, upload-time = "2025-09-11T10:28:41.826Z" }, + { url = "https://files.pythonhosted.org/packages/91/48/28ed9e55dcf2f453128df738210a980e09f4e468a456fa3c763dbc8be70a/opentelemetry_api-1.37.0-py3-none-any.whl", hash = "sha256:accf2024d3e89faec14302213bc39550ec0f4095d1cf5ca688e1bfb1c8612f47", size = 65732 }, ] [[package]] name = "orderly-set" version = "5.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/88/39c83c35d5e97cc203e9e77a4f93bf87ec89cf6a22ac4818fdcc65d66584/orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce", size = 27414, upload-time = "2025-07-10T20:10:55.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/88/39c83c35d5e97cc203e9e77a4f93bf87ec89cf6a22ac4818fdcc65d66584/orderly_set-5.5.0.tar.gz", hash = "sha256:e87185c8e4d8afa64e7f8160ee2c542a475b738bc891dc3f58102e654125e6ce", size = 27414 } wheels = [ - { url = "https://files.pythonhosted.org/packages/12/27/fb8d7338b4d551900fa3e580acbe7a0cf655d940e164cb5c00ec31961094/orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7", size = 13068, upload-time = "2025-07-10T20:10:54.377Z" }, + { url = "https://files.pythonhosted.org/packages/12/27/fb8d7338b4d551900fa3e580acbe7a0cf655d940e164cb5c00ec31961094/orderly_set-5.5.0-py3-none-any.whl", hash = "sha256:46f0b801948e98f427b412fcabb831677194c05c3b699b80de260374baa0b1e7", size = 13068 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } 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" }, + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, ] [[package]] name = "packaging" version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] name = "paginate" version = "0.5.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746 }, ] [[package]] @@ -2925,41 +2930,41 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, - { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, - { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, - { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, - { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, - { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, - { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, - { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, ] [package.optional-dependencies] @@ -2972,18 +2977,18 @@ output-formatting = [ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } 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" }, + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, ] [[package]] name = "parso" version = "0.8.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205 } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668 }, ] [[package]] @@ -2994,27 +2999,27 @@ dependencies = [ { name = "locket" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, ] [[package]] name = "pathvalidate" version = "3.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262, upload-time = "2025-06-15T09:07:20.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305, upload-time = "2025-06-15T09:07:19.117Z" }, + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305 }, ] [[package]] @@ -3024,102 +3029,102 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } 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" }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, ] [[package]] name = "pillow" version = "11.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742, upload-time = "2025-07-03T13:09:47.439Z" }, - { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087, upload-time = "2025-07-03T13:09:51.796Z" }, - { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350, upload-time = "2025-07-01T09:13:43.865Z" }, - { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840, upload-time = "2025-07-01T09:13:46.161Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005, upload-time = "2025-07-01T09:13:47.829Z" }, - { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372, upload-time = "2025-07-01T09:13:52.145Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090, upload-time = "2025-07-01T09:13:53.915Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988, upload-time = "2025-07-01T09:13:55.699Z" }, - { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899, upload-time = "2025-07-01T09:13:57.497Z" }, - { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, - { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, - { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, - { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, - { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, - { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, - { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, - { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, - { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" }, - { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" }, - { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482, upload-time = "2025-07-01T09:16:16.107Z" }, - { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596, upload-time = "2025-07-01T09:16:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, - { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, - { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, - { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, - { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742 }, + { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087 }, + { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350 }, + { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840 }, + { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005 }, + { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372 }, + { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090 }, + { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988 }, + { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899 }, + { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978 }, + { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168 }, + { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053 }, + { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273 }, + { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043 }, + { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516 }, + { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768 }, + { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055 }, + { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079 }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726 }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652 }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787 }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236 }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950 }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358 }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079 }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324 }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067 }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328 }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652 }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443 }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407 }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094 }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503 }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574 }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060 }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407 }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841 }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450 }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055 }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554 }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132 }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001 }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814 }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124 }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186 }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546 }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102 }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803 }, + { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597 }, + { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246 }, + { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336 }, + { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699 }, + { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789 }, + { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386 }, + { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911 }, + { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383 }, + { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385 }, + { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860 }, + { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694 }, + { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888 }, + { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089 }, + { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206 }, + { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370 }, + { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500 }, + { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835 }, + { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207 }, + { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939 }, + { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166 }, + { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482 }, + { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596 }, + { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248 }, + { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963 }, + { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170 }, + { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505 }, + { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598 }, ] [[package]] name = "platformdirs" version = "4.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, + { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654 }, ] [[package]] @@ -3130,18 +3135,18 @@ dependencies = [ { name = "narwhals" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0c/63/961d47c9ffd592a575495891cdcf7875dc0903ebb33ac238935714213789/plotly-6.3.1.tar.gz", hash = "sha256:dd896e3d940e653a7ce0470087e82c2bd903969a55e30d1b01bb389319461bb0", size = 6956460, upload-time = "2025-10-02T16:10:34.16Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/63/961d47c9ffd592a575495891cdcf7875dc0903ebb33ac238935714213789/plotly-6.3.1.tar.gz", hash = "sha256:dd896e3d940e653a7ce0470087e82c2bd903969a55e30d1b01bb389319461bb0", size = 6956460 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/93/023955c26b0ce614342d11cc0652f1e45e32393b6ab9d11a664a60e9b7b7/plotly-6.3.1-py3-none-any.whl", hash = "sha256:8b4420d1dcf2b040f5983eed433f95732ed24930e496d36eb70d211923532e64", size = 9833698, upload-time = "2025-10-02T16:10:22.584Z" }, + { url = "https://files.pythonhosted.org/packages/3f/93/023955c26b0ce614342d11cc0652f1e45e32393b6ab9d11a664a60e9b7b7/plotly-6.3.1-py3-none-any.whl", hash = "sha256:8b4420d1dcf2b040f5983eed433f95732ed24930e496d36eb70d211923532e64", size = 9833698 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } 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" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] [[package]] @@ -3153,18 +3158,18 @@ dependencies = [ { name = "platformdirs" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353, upload-time = "2024-06-06T16:53:46.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/77/b3d3e00c696c16cf99af81ef7b1f5fe73bd2a307abca41bd7605429fe6e5/pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10", size = 59353 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574, upload-time = "2024-06-06T16:53:44.343Z" }, + { url = "https://files.pythonhosted.org/packages/a8/87/77cc11c7a9ea9fd05503def69e3d18605852cd0d4b0d3b8f15bbeb3ef1d1/pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47", size = 64574 }, ] [[package]] name = "prometheus-client" version = "0.23.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/53/3edb5d68ecf6b38fcbcc1ad28391117d2a322d9a1a3eff04bfdb184d8c3b/prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce", size = 80481, upload-time = "2025-09-18T20:47:25.043Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/53/3edb5d68ecf6b38fcbcc1ad28391117d2a322d9a1a3eff04bfdb184d8c3b/prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce", size = 80481 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99", size = 61145, upload-time = "2025-09-18T20:47:23.875Z" }, + { url = "https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99", size = 61145 }, ] [[package]] @@ -3174,90 +3179,90 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198 } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431 }, ] [[package]] name = "psutil" version = "7.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660, upload-time = "2025-09-17T20:14:52.902Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660 } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242, upload-time = "2025-09-17T20:14:56.126Z" }, - { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682, upload-time = "2025-09-17T20:14:58.25Z" }, - { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994, upload-time = "2025-09-17T20:14:59.901Z" }, - { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163, upload-time = "2025-09-17T20:15:01.481Z" }, - { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625, upload-time = "2025-09-17T20:15:04.492Z" }, - { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812, upload-time = "2025-09-17T20:15:07.462Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965, upload-time = "2025-09-17T20:15:09.673Z" }, - { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971, upload-time = "2025-09-17T20:15:12.262Z" }, + { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242 }, + { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682 }, + { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994 }, + { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163 }, + { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625 }, + { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812 }, + { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965 }, + { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } 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" }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } 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" }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, ] [[package]] name = "pyarrow" version = "21.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/ed/b1589a777816ee33ba123ba1e4f8f02243a844fed0deec97bde9fb21a5cf/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb", size = 41055619, upload-time = "2025-07-18T00:54:42.172Z" }, - { url = "https://files.pythonhosted.org/packages/44/28/b6672962639e85dc0ac36f71ab3a8f5f38e01b51343d7aa372a6b56fa3f3/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51", size = 42733488, upload-time = "2025-07-18T00:54:47.132Z" }, - { url = "https://files.pythonhosted.org/packages/f8/cc/de02c3614874b9089c94eac093f90ca5dfa6d5afe45de3ba847fd950fdf1/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a", size = 43329159, upload-time = "2025-07-18T00:54:51.686Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3e/99473332ac40278f196e105ce30b79ab8affab12f6194802f2593d6b0be2/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594", size = 45050567, upload-time = "2025-07-18T00:54:56.679Z" }, - { url = "https://files.pythonhosted.org/packages/7b/f5/c372ef60593d713e8bfbb7e0c743501605f0ad00719146dc075faf11172b/pyarrow-21.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634", size = 26217959, upload-time = "2025-07-18T00:55:00.482Z" }, - { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" }, - { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" }, - { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" }, - { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" }, - { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload-time = "2025-07-18T00:55:42.889Z" }, - { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload-time = "2025-07-18T00:55:47.069Z" }, - { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload-time = "2025-07-18T00:55:53.069Z" }, - { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload-time = "2025-07-18T00:55:57.714Z" }, - { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload-time = "2025-07-18T00:56:01.364Z" }, - { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" }, - { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" }, - { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" }, - { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" }, - { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" }, - { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" }, - { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, - { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/ed/b1589a777816ee33ba123ba1e4f8f02243a844fed0deec97bde9fb21a5cf/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb", size = 41055619 }, + { url = "https://files.pythonhosted.org/packages/44/28/b6672962639e85dc0ac36f71ab3a8f5f38e01b51343d7aa372a6b56fa3f3/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51", size = 42733488 }, + { url = "https://files.pythonhosted.org/packages/f8/cc/de02c3614874b9089c94eac093f90ca5dfa6d5afe45de3ba847fd950fdf1/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a", size = 43329159 }, + { url = "https://files.pythonhosted.org/packages/a6/3e/99473332ac40278f196e105ce30b79ab8affab12f6194802f2593d6b0be2/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594", size = 45050567 }, + { url = "https://files.pythonhosted.org/packages/7b/f5/c372ef60593d713e8bfbb7e0c743501605f0ad00719146dc075faf11172b/pyarrow-21.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634", size = 26217959 }, + { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424 }, + { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810 }, + { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538 }, + { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056 }, + { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568 }, + { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099 }, + { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529 }, + { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883 }, + { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802 }, + { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175 }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094 }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576 }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342 }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218 }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551 }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158 }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885 }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625 }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890 }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006 }, ] [[package]] name = "pycparser" version = "2.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, ] [[package]] name = "pydantic" -version = "2.11.9" +version = "2.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -3265,88 +3270,104 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload-time = "2025-09-13T11:26:39.325Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/da/b8a7ee04378a53f6fefefc0c5e05570a3ebfdfa0523a878bcd3b475683ee/pydantic-2.12.0.tar.gz", hash = "sha256:c1a077e6270dbfb37bfd8b498b3981e2bb18f68103720e51fa6c306a5a9af563", size = 814760, upload-time = "2025-10-07T15:58:03.467Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload-time = "2025-09-13T11:26:36.909Z" }, + { url = "https://files.pythonhosted.org/packages/f4/9d/d5c855424e2e5b6b626fbc6ec514d8e655a600377ce283008b115abb7445/pydantic-2.12.0-py3-none-any.whl", hash = "sha256:f6a1da352d42790537e95e83a8bdfb91c7efbae63ffd0b86fa823899e807116f", size = 459730, upload-time = "2025-10-07T15:58:01.576Z" }, ] [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.41.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" }, - { url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" }, - { url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" }, - { url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" }, - { url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" }, - { url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/7d/14/12b4a0d2b0b10d8e1d9a24ad94e7bbb43335eaf29c0c4e57860e8a30734a/pydantic_core-2.41.1.tar.gz", hash = "sha256:1ad375859a6d8c356b7704ec0f547a58e82ee80bb41baa811ad710e124bc8f2f", size = 454870, upload-time = "2025-10-07T10:50:45.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/58/29f12e65b19c1877a0269eb4f23c5d2267eded6120a7d6762501ab843dc9/pydantic_core-2.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab7e594a2a5c24ab8013a7dc8cfe5f2260e80e490685814122081705c2cf2b0", size = 1975071, upload-time = "2025-10-06T21:09:54.009Z" }, + { url = "https://files.pythonhosted.org/packages/98/26/4e677f2b7ec3fbdd10be6b586a82a814c8ebe3e474024c8df2d4260e564e/pydantic_core-2.41.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b054ef1a78519cb934b58e9c90c09e93b837c935dcd907b891f2b265b129eb6e", size = 2067271, upload-time = "2025-10-06T21:09:55.175Z" }, + { url = "https://files.pythonhosted.org/packages/29/50/50614bd906089904d7ca1be3b9ecf08c00a327143d48f1decfdc21b3c302/pydantic_core-2.41.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f2ab7d10d0ab2ed6da54c757233eb0f48ebfb4f86e9b88ccecb3f92bbd61a538", size = 2253207, upload-time = "2025-10-06T21:09:56.709Z" }, + { url = "https://files.pythonhosted.org/packages/ea/58/b1e640b4ca559273cca7c28e0fe8891d5d8e9a600f5ab4882670ec107549/pydantic_core-2.41.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2757606b7948bb853a27e4040820306eaa0ccb9e8f9f8a0fa40cb674e170f350", size = 2375052, upload-time = "2025-10-06T21:09:57.97Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/cd47df3bfb24350e03835f0950288d1054f1cc9a8023401dabe6d4ff2834/pydantic_core-2.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cec0e75eb61f606bad0a32f2be87507087514e26e8c73db6cbdb8371ccd27917", size = 2076834, upload-time = "2025-10-06T21:09:59.58Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b4/71b2c77e5df527fbbc1a03e72c3fd96c44cd10d4241a81befef8c12b9fc4/pydantic_core-2.41.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0234236514f44a5bf552105cfe2543a12f48203397d9d0f866affa569345a5b5", size = 2195374, upload-time = "2025-10-06T21:10:01.18Z" }, + { url = "https://files.pythonhosted.org/packages/aa/08/4b8a50733005865efde284fec45da75fe16a258f706e16323c5ace4004eb/pydantic_core-2.41.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1b974e41adfbb4ebb0f65fc4ca951347b17463d60893ba7d5f7b9bb087c83897", size = 2156060, upload-time = "2025-10-06T21:10:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/83/c3/1037cb603ef2130c210150a51b1710d86825b5c28df54a55750099f91196/pydantic_core-2.41.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:248dafb3204136113c383e91a4d815269f51562b6659b756cf3df14eefc7d0bb", size = 2331640, upload-time = "2025-10-06T21:10:04.39Z" }, + { url = "https://files.pythonhosted.org/packages/56/4c/52d111869610e6b1a46e1f1035abcdc94d0655587e39104433a290e9f377/pydantic_core-2.41.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:678f9d76a91d6bcedd7568bbf6beb77ae8447f85d1aeebaab7e2f0829cfc3a13", size = 2329844, upload-time = "2025-10-06T21:10:05.68Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/4b435f0b52ab543967761aca66b84ad3f0026e491e57de47693d15d0a8db/pydantic_core-2.41.1-cp310-cp310-win32.whl", hash = "sha256:dff5bee1d21ee58277900692a641925d2dddfde65182c972569b1a276d2ac8fb", size = 1991289, upload-time = "2025-10-06T21:10:07.199Z" }, + { url = "https://files.pythonhosted.org/packages/88/52/31b4deafc1d3cb96d0e7c0af70f0dc05454982d135d07f5117e6336153e8/pydantic_core-2.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:5042da12e5d97d215f91567110fdfa2e2595a25f17c19b9ff024f31c34f9b53e", size = 2027747, upload-time = "2025-10-06T21:10:08.503Z" }, + { url = "https://files.pythonhosted.org/packages/38/8a/d9edcdcdfe80bade17bed424284427c08bea892aaec11438fa52eaeaf79c/pydantic_core-2.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28527e4b53400cd60ffbd9812ccb2b5135d042129716d71afd7e45bf42b855c0", size = 1973762, upload-time = "2025-10-06T21:10:13.154Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b3/ff225c6d49fba4279de04677c1c876fc3dc6562fd0c53e9bfd66f58c51a8/pydantic_core-2.41.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46a1c935c9228bad738c8a41de06478770927baedf581d172494ab36a6b96575", size = 2065386, upload-time = "2025-10-06T21:10:14.436Z" }, + { url = "https://files.pythonhosted.org/packages/47/ba/183e8c0be4321314af3fd1ae6bfc7eafdd7a49bdea5da81c56044a207316/pydantic_core-2.41.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:447ddf56e2b7d28d200d3e9eafa936fe40485744b5a824b67039937580b3cb20", size = 2252317, upload-time = "2025-10-06T21:10:15.719Z" }, + { url = "https://files.pythonhosted.org/packages/57/c5/aab61e94fd02f45c65f1f8c9ec38bb3b33fbf001a1837c74870e97462572/pydantic_core-2.41.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63892ead40c1160ac860b5debcc95c95c5a0035e543a8b5a4eac70dd22e995f4", size = 2373405, upload-time = "2025-10-06T21:10:17.017Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4f/3aaa3bd1ea420a15acc42d7d3ccb3b0bbc5444ae2f9dbc1959f8173e16b8/pydantic_core-2.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4a9543ca355e6df8fbe9c83e9faab707701e9103ae857ecb40f1c0cf8b0e94d", size = 2073794, upload-time = "2025-10-06T21:10:18.383Z" }, + { url = "https://files.pythonhosted.org/packages/58/bd/e3975cdebe03ec080ef881648de316c73f2a6be95c14fc4efb2f7bdd0d41/pydantic_core-2.41.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2611bdb694116c31e551ed82e20e39a90bea9b7ad9e54aaf2d045ad621aa7a1", size = 2194430, upload-time = "2025-10-06T21:10:19.638Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/6b7e7217f147d3b3105b57fb1caec3c4f667581affdfaab6d1d277e1f749/pydantic_core-2.41.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fecc130893a9b5f7bfe230be1bb8c61fe66a19db8ab704f808cb25a82aad0bc9", size = 2154611, upload-time = "2025-10-06T21:10:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/fe/7b/239c2fe76bd8b7eef9ae2140d737368a3c6fea4fd27f8f6b4cde6baa3ce9/pydantic_core-2.41.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:1e2df5f8344c99b6ea5219f00fdc8950b8e6f2c422fbc1cc122ec8641fac85a1", size = 2329809, upload-time = "2025-10-06T21:10:22.678Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2e/77a821a67ff0786f2f14856d6bd1348992f695ee90136a145d7a445c1ff6/pydantic_core-2.41.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:35291331e9d8ed94c257bab6be1cb3a380b5eee570a2784bffc055e18040a2ea", size = 2327907, upload-time = "2025-10-06T21:10:24.447Z" }, + { url = "https://files.pythonhosted.org/packages/fd/9a/b54512bb9df7f64c586b369328c30481229b70ca6a5fcbb90b715e15facf/pydantic_core-2.41.1-cp311-cp311-win32.whl", hash = "sha256:2876a095292668d753f1a868c4a57c4ac9f6acbd8edda8debe4218d5848cf42f", size = 1989964, upload-time = "2025-10-06T21:10:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/9d/72/63c9a4f1a5c950e65dd522d7dd67f167681f9d4f6ece3b80085a0329f08f/pydantic_core-2.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:b92d6c628e9a338846a28dfe3fcdc1a3279388624597898b105e078cdfc59298", size = 2025158, upload-time = "2025-10-06T21:10:27.522Z" }, + { url = "https://files.pythonhosted.org/packages/d8/16/4e2706184209f61b50c231529257c12eb6bd9eb36e99ea1272e4815d2200/pydantic_core-2.41.1-cp311-cp311-win_arm64.whl", hash = "sha256:7d82ae99409eb69d507a89835488fb657faa03ff9968a9379567b0d2e2e56bc5", size = 1972297, upload-time = "2025-10-06T21:10:28.814Z" }, + { url = "https://files.pythonhosted.org/packages/8e/2e/23fc2a8a93efad52df302fdade0a60f471ecc0c7aac889801ac24b4c07d6/pydantic_core-2.41.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e9decce94daf47baf9e9d392f5f2557e783085f7c5e522011545d9d6858e00", size = 1957225, upload-time = "2025-10-06T21:10:33.11Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b6/6db08b2725b2432b9390844852e11d320281e5cea8a859c52c68001975fa/pydantic_core-2.41.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab0adafdf2b89c8b84f847780a119437a0931eca469f7b44d356f2b426dd9741", size = 2053315, upload-time = "2025-10-06T21:10:34.87Z" }, + { url = "https://files.pythonhosted.org/packages/61/d9/4de44600f2d4514b44f3f3aeeda2e14931214b6b5bf52479339e801ce748/pydantic_core-2.41.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5da98cc81873f39fd56882e1569c4677940fbc12bce6213fad1ead784192d7c8", size = 2224298, upload-time = "2025-10-06T21:10:36.233Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ae/dbe51187a7f35fc21b283c5250571a94e36373eb557c1cba9f29a9806dcf/pydantic_core-2.41.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:209910e88afb01fd0fd403947b809ba8dba0e08a095e1f703294fda0a8fdca51", size = 2351797, upload-time = "2025-10-06T21:10:37.601Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a7/975585147457c2e9fb951c7c8dab56deeb6aa313f3aa72c2fc0df3f74a49/pydantic_core-2.41.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365109d1165d78d98e33c5bfd815a9b5d7d070f578caefaabcc5771825b4ecb5", size = 2074921, upload-time = "2025-10-06T21:10:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/62/37/ea94d1d0c01dec1b7d236c7cec9103baab0021f42500975de3d42522104b/pydantic_core-2.41.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:706abf21e60a2857acdb09502bc853ee5bce732955e7b723b10311114f033115", size = 2187767, upload-time = "2025-10-06T21:10:40.651Z" }, + { url = "https://files.pythonhosted.org/packages/d3/fe/694cf9fdd3a777a618c3afd210dba7b414cb8a72b1bd29b199c2e5765fee/pydantic_core-2.41.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bf0bd5417acf7f6a7ec3b53f2109f587be176cb35f9cf016da87e6017437a72d", size = 2136062, upload-time = "2025-10-06T21:10:42.09Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/174aeabd89916fbd2988cc37b81a59e1186e952afd2a7ed92018c22f31ca/pydantic_core-2.41.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2e71b1c6ceb9c78424ae9f63a07292fb769fb890a4e7efca5554c47f33a60ea5", size = 2317819, upload-time = "2025-10-06T21:10:43.974Z" }, + { url = "https://files.pythonhosted.org/packages/65/e8/e9aecafaebf53fc456314f72886068725d6fba66f11b013532dc21259343/pydantic_core-2.41.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:80745b9770b4a38c25015b517451c817799bfb9d6499b0d13d8227ec941cb513", size = 2312267, upload-time = "2025-10-06T21:10:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/35/2f/1c2e71d2a052f9bb2f2df5a6a05464a0eb800f9e8d9dd800202fe31219e1/pydantic_core-2.41.1-cp312-cp312-win32.whl", hash = "sha256:83b64d70520e7890453f1aa21d66fda44e7b35f1cfea95adf7b4289a51e2b479", size = 1990927, upload-time = "2025-10-06T21:10:46.738Z" }, + { url = "https://files.pythonhosted.org/packages/b1/78/562998301ff2588b9c6dcc5cb21f52fa919d6e1decc75a35055feb973594/pydantic_core-2.41.1-cp312-cp312-win_amd64.whl", hash = "sha256:377defd66ee2003748ee93c52bcef2d14fde48fe28a0b156f88c3dbf9bc49a50", size = 2034703, upload-time = "2025-10-06T21:10:48.524Z" }, + { url = "https://files.pythonhosted.org/packages/b2/53/d95699ce5a5cdb44bb470bd818b848b9beadf51459fd4ea06667e8ede862/pydantic_core-2.41.1-cp312-cp312-win_arm64.whl", hash = "sha256:c95caff279d49c1d6cdfe2996e6c2ad712571d3b9caaa209a404426c326c4bde", size = 1972719, upload-time = "2025-10-06T21:10:50.256Z" }, + { url = "https://files.pythonhosted.org/packages/f3/92/31eb0748059ba5bd0aa708fb4bab9fcb211461ddcf9e90702a6542f22d0d/pydantic_core-2.41.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:170406a37a5bc82c22c3274616bf6f17cc7df9c4a0a0a50449e559cb755db669", size = 1961472, upload-time = "2025-10-06T21:10:55.754Z" }, + { url = "https://files.pythonhosted.org/packages/ab/91/946527792275b5c4c7dde4cfa3e81241bf6900e9fee74fb1ba43e0c0f1ab/pydantic_core-2.41.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12d4257fc9187a0ccd41b8b327d6a4e57281ab75e11dda66a9148ef2e1fb712f", size = 2063230, upload-time = "2025-10-06T21:10:57.179Z" }, + { url = "https://files.pythonhosted.org/packages/31/5d/a35c5d7b414e5c0749f1d9f0d159ee2ef4bab313f499692896b918014ee3/pydantic_core-2.41.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a75a33b4db105dd1c8d57839e17ee12db8d5ad18209e792fa325dbb4baeb00f4", size = 2229469, upload-time = "2025-10-06T21:10:59.409Z" }, + { url = "https://files.pythonhosted.org/packages/21/4d/8713737c689afa57ecfefe38db78259d4484c97aa494979e6a9d19662584/pydantic_core-2.41.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08a589f850803a74e0fcb16a72081cafb0d72a3cdda500106942b07e76b7bf62", size = 2347986, upload-time = "2025-10-06T21:11:00.847Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ec/929f9a3a5ed5cda767081494bacd32f783e707a690ce6eeb5e0730ec4986/pydantic_core-2.41.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a97939d6ea44763c456bd8a617ceada2c9b96bb5b8ab3dfa0d0827df7619014", size = 2072216, upload-time = "2025-10-06T21:11:02.43Z" }, + { url = "https://files.pythonhosted.org/packages/26/55/a33f459d4f9cc8786d9db42795dbecc84fa724b290d7d71ddc3d7155d46a/pydantic_core-2.41.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2ae423c65c556f09569524b80ffd11babff61f33055ef9773d7c9fabc11ed8d", size = 2193047, upload-time = "2025-10-06T21:11:03.787Z" }, + { url = "https://files.pythonhosted.org/packages/77/af/d5c6959f8b089f2185760a2779079e3c2c411bfc70ea6111f58367851629/pydantic_core-2.41.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:4dc703015fbf8764d6a8001c327a87f1823b7328d40b47ce6000c65918ad2b4f", size = 2140613, upload-time = "2025-10-06T21:11:05.607Z" }, + { url = "https://files.pythonhosted.org/packages/58/e5/2c19bd2a14bffe7fabcf00efbfbd3ac430aaec5271b504a938ff019ac7be/pydantic_core-2.41.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:968e4ffdfd35698a5fe659e5e44c508b53664870a8e61c8f9d24d3d145d30257", size = 2327641, upload-time = "2025-10-06T21:11:07.143Z" }, + { url = "https://files.pythonhosted.org/packages/93/ef/e0870ccda798c54e6b100aff3c4d49df5458fd64217e860cb9c3b0a403f4/pydantic_core-2.41.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:fff2b76c8e172d34771cd4d4f0ade08072385310f214f823b5a6ad4006890d32", size = 2318229, upload-time = "2025-10-06T21:11:08.73Z" }, + { url = "https://files.pythonhosted.org/packages/b1/4b/c3b991d95f5deb24d0bd52e47bcf716098fa1afe0ce2d4bd3125b38566ba/pydantic_core-2.41.1-cp313-cp313-win32.whl", hash = "sha256:a38a5263185407ceb599f2f035faf4589d57e73c7146d64f10577f6449e8171d", size = 1997911, upload-time = "2025-10-06T21:11:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ce/5c316fd62e01f8d6be1b7ee6b54273214e871772997dc2c95e204997a055/pydantic_core-2.41.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42ae7fd6760782c975897e1fdc810f483b021b32245b0105d40f6e7a3803e4b", size = 2034301, upload-time = "2025-10-06T21:11:12.113Z" }, + { url = "https://files.pythonhosted.org/packages/29/41/902640cfd6a6523194123e2c3373c60f19006447f2fb06f76de4e8466c5b/pydantic_core-2.41.1-cp313-cp313-win_arm64.whl", hash = "sha256:ad4111acc63b7384e205c27a2f15e23ac0ee21a9d77ad6f2e9cb516ec90965fb", size = 1977238, upload-time = "2025-10-06T21:11:14.1Z" }, + { url = "https://files.pythonhosted.org/packages/d6/58/b41dd3087505220bb58bc81be8c3e8cbc037f5710cd3c838f44f90bdd704/pydantic_core-2.41.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71eaa38d342099405dae6484216dcf1e8e4b0bebd9b44a4e08c9b43db6a2ab67", size = 2045708, upload-time = "2025-10-06T21:11:17.258Z" }, + { url = "https://files.pythonhosted.org/packages/d7/b8/760f23754e40bf6c65b94a69b22c394c24058a0ef7e2aa471d2e39219c1a/pydantic_core-2.41.1-cp313-cp313t-win_amd64.whl", hash = "sha256:555ecf7e50f1161d3f693bc49f23c82cf6cdeafc71fa37a06120772a09a38795", size = 1997171, upload-time = "2025-10-06T21:11:18.822Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/9a3d87cae2c75a5178334b10358d631bd094b916a00a5993382222dbfd92/pydantic_core-2.41.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47f1f642a205687d59b52dc1a9a607f45e588f5a2e9eeae05edd80c7a8c47674", size = 1961750, upload-time = "2025-10-06T21:11:24.348Z" }, + { url = "https://files.pythonhosted.org/packages/27/42/a96c9d793a04cf2a9773bff98003bb154087b94f5530a2ce6063ecfec583/pydantic_core-2.41.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df11c24e138876ace5ec6043e5cae925e34cf38af1a1b3d63589e8f7b5f5cdc4", size = 2063305, upload-time = "2025-10-06T21:11:26.556Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8d/028c4b7d157a005b1f52c086e2d4b0067886b213c86220c1153398dbdf8f/pydantic_core-2.41.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f0bf7f5c8f7bf345c527e8a0d72d6b26eda99c1227b0c34e7e59e181260de31", size = 2228959, upload-time = "2025-10-06T21:11:28.426Z" }, + { url = "https://files.pythonhosted.org/packages/08/f7/ee64cda8fcc9ca3f4716e6357144f9ee71166775df582a1b6b738bf6da57/pydantic_core-2.41.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82b887a711d341c2c47352375d73b029418f55b20bd7815446d175a70effa706", size = 2345421, upload-time = "2025-10-06T21:11:30.226Z" }, + { url = "https://files.pythonhosted.org/packages/13/c0/e8ec05f0f5ee7a3656973ad9cd3bc73204af99f6512c1a4562f6fb4b3f7d/pydantic_core-2.41.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5f1d5d6bbba484bdf220c72d8ecd0be460f4bd4c5e534a541bb2cd57589fb8b", size = 2065288, upload-time = "2025-10-06T21:11:32.019Z" }, + { url = "https://files.pythonhosted.org/packages/0a/25/d77a73ff24e2e4fcea64472f5e39b0402d836da9b08b5361a734d0153023/pydantic_core-2.41.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bf1917385ebe0f968dc5c6ab1375886d56992b93ddfe6bf52bff575d03662be", size = 2189759, upload-time = "2025-10-06T21:11:33.753Z" }, + { url = "https://files.pythonhosted.org/packages/66/45/4a4ebaaae12a740552278d06fe71418c0f2869537a369a89c0e6723b341d/pydantic_core-2.41.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:4f94f3ab188f44b9a73f7295663f3ecb8f2e2dd03a69c8f2ead50d37785ecb04", size = 2140747, upload-time = "2025-10-06T21:11:35.781Z" }, + { url = "https://files.pythonhosted.org/packages/da/6d/b727ce1022f143194a36593243ff244ed5a1eb3c9122296bf7e716aa37ba/pydantic_core-2.41.1-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:3925446673641d37c30bd84a9d597e49f72eacee8b43322c8999fa17d5ae5bc4", size = 2327416, upload-time = "2025-10-06T21:11:37.75Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8c/02df9d8506c427787059f87c6c7253435c6895e12472a652d9616ee0fc95/pydantic_core-2.41.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:49bd51cc27adb980c7b97357ae036ce9b3c4d0bb406e84fbe16fb2d368b602a8", size = 2318138, upload-time = "2025-10-06T21:11:39.463Z" }, + { url = "https://files.pythonhosted.org/packages/98/67/0cf429a7d6802536941f430e6e3243f6d4b68f41eeea4b242372f1901794/pydantic_core-2.41.1-cp314-cp314-win32.whl", hash = "sha256:a31ca0cd0e4d12ea0df0077df2d487fc3eb9d7f96bbb13c3c5b88dcc21d05159", size = 1998429, upload-time = "2025-10-06T21:11:41.989Z" }, + { url = "https://files.pythonhosted.org/packages/38/60/742fef93de5d085022d2302a6317a2b34dbfe15258e9396a535c8a100ae7/pydantic_core-2.41.1-cp314-cp314-win_amd64.whl", hash = "sha256:1b5c4374a152e10a22175d7790e644fbd8ff58418890e07e2073ff9d4414efae", size = 2028870, upload-time = "2025-10-06T21:11:43.66Z" }, + { url = "https://files.pythonhosted.org/packages/31/38/cdd8ccb8555ef7720bd7715899bd6cfbe3c29198332710e1b61b8f5dd8b8/pydantic_core-2.41.1-cp314-cp314-win_arm64.whl", hash = "sha256:4fee76d757639b493eb600fba668f1e17475af34c17dd61db7a47e824d464ca9", size = 1974275, upload-time = "2025-10-06T21:11:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e4/7d9791efeb9c7d97e7268f8d20e0da24d03438a7fa7163ab58f1073ba968/pydantic_core-2.41.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ebc7ab67b856384aba09ed74e3e977dded40e693de18a4f197c67d0d4e6d8e", size = 2043075, upload-time = "2025-10-06T21:11:49.542Z" }, + { url = "https://files.pythonhosted.org/packages/2d/c3/3f6e6b2342ac11ac8cd5cb56e24c7b14afa27c010e82a765ffa5f771884a/pydantic_core-2.41.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8ae0dc57b62a762985bc7fbf636be3412394acc0ddb4ade07fe104230f1b9762", size = 1995341, upload-time = "2025-10-06T21:11:51.497Z" }, + { url = "https://files.pythonhosted.org/packages/2a/43/94a4877094e5fe19a3f37e7e817772263e2c573c94f1e3fa2b1eee56ef3b/pydantic_core-2.41.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2896510fce8f4725ec518f8b9d7f015a00db249d2fd40788f442af303480063d", size = 1961129, upload-time = "2025-10-07T10:49:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/a2/30/23a224d7e25260eb5f69783a63667453037e07eb91ff0e62dabaadd47128/pydantic_core-2.41.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ced20e62cfa0f496ba68fa5d6c7ee71114ea67e2a5da3114d6450d7f4683572a", size = 2148770, upload-time = "2025-10-07T10:49:59.959Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9c/5111c6b128861cb792a4c082677e90dac4f2e090bb2e2fe06aa5b2d39027/pydantic_core-2.41.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eec83fc6abef04c7f9bec616e2d76ee9a6a4ae2a359b10c21d0f680e24a247ca", size = 1959394, upload-time = "2025-10-07T10:50:06.335Z" }, + { url = "https://files.pythonhosted.org/packages/14/3f/cfec8b9a0c48ce5d64409ec5e1903cb0b7363da38f14b41de2fcb3712700/pydantic_core-2.41.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6771a2d9f83c4038dfad5970a3eef215940682b2175e32bcc817bdc639019b28", size = 2147365, upload-time = "2025-10-07T10:50:07.978Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5e/45513e4dc621f47397cfa5fef12ba8fa5e8b1c4c07f2ff2a5fef8ff81b25/pydantic_core-2.41.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34df1fe8fea5d332484a763702e8b6a54048a9d4fe6ccf41e34a128238e01f52", size = 1971995, upload-time = "2025-10-07T10:50:14.071Z" }, + { url = "https://files.pythonhosted.org/packages/22/e3/f1797c168e5f52b973bed1c585e99827a22d5e579d1ed57d51bc15b14633/pydantic_core-2.41.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:421b5595f845842fc093f7250e24ee395f54ca62d494fdde96f43ecf9228ae01", size = 2191264, upload-time = "2025-10-07T10:50:15.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e1/24ef4c3b4ab91c21c3a09a966c7d2cffe101058a7bfe5cc8b2c7c7d574e2/pydantic_core-2.41.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dce8b22663c134583aaad24827863306a933f576c79da450be3984924e2031d1", size = 2152430, upload-time = "2025-10-07T10:50:18.018Z" }, + { url = "https://files.pythonhosted.org/packages/35/74/70c1e225d67f7ef3fdba02c506d9011efaf734020914920b2aa3d1a45e61/pydantic_core-2.41.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:300a9c162fea9906cc5c103893ca2602afd84f0ec90d3be36f4cc360125d22e1", size = 2324691, upload-time = "2025-10-07T10:50:19.801Z" }, + { url = "https://files.pythonhosted.org/packages/c8/bf/dd4d21037c8bef0d8cce90a86a3f2dcb011c30086db2a10113c3eea23eba/pydantic_core-2.41.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e019167628f6e6161ae7ab9fb70f6d076a0bf0d55aa9b20833f86a320c70dd65", size = 2324493, upload-time = "2025-10-07T10:50:21.568Z" }, + { url = "https://files.pythonhosted.org/packages/7e/78/3093b334e9c9796c8236a4701cd2ddef1c56fb0928fe282a10c797644380/pydantic_core-2.41.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:13ab9cc2de6f9d4ab645a050ae5aee61a2424ac4d3a16ba23d4c2027705e0301", size = 2146156, upload-time = "2025-10-07T10:50:23.475Z" }, + { url = "https://files.pythonhosted.org/packages/2b/00/9fe640194a1717a464ab861d43595c268830f98cb1e2705aa134b3544b70/pydantic_core-2.41.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc17b6ecf4983d298686014c92ebc955a9f9baf9f57dad4065e7906e7bee6222", size = 1970417, upload-time = "2025-10-07T10:50:29.573Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ad/f4cdfaf483b78ee65362363e73b6b40c48e067078d7b146e8816d5945ad6/pydantic_core-2.41.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42ae9352cf211f08b04ea110563d6b1e415878eea5b4c70f6bdb17dca3b932d2", size = 2190745, upload-time = "2025-10-07T10:50:31.48Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c1/18f416d40a10f44e9387497ba449f40fdb1478c61ba05c4b6bdb82300362/pydantic_core-2.41.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e82947de92068b0a21681a13dd2102387197092fbe7defcfb8453e0913866506", size = 2150888, upload-time = "2025-10-07T10:50:33.477Z" }, + { url = "https://files.pythonhosted.org/packages/42/30/134c8a921630d8a88d6f905a562495a6421e959a23c19b0f49b660801d67/pydantic_core-2.41.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e244c37d5471c9acdcd282890c6c4c83747b77238bfa19429b8473586c907656", size = 2324489, upload-time = "2025-10-07T10:50:36.48Z" }, + { url = "https://files.pythonhosted.org/packages/9c/48/a9263aeaebdec81e941198525b43edb3b44f27cfa4cb8005b8d3eb8dec72/pydantic_core-2.41.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1e798b4b304a995110d41ec93653e57975620ccb2842ba9420037985e7d7284e", size = 2322763, upload-time = "2025-10-07T10:50:38.751Z" }, + { url = "https://files.pythonhosted.org/packages/1d/62/755d2bd2593f701c5839fc084e9c2c5e2418f460383ad04e3b5d0befc3ca/pydantic_core-2.41.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f1fc716c0eb1663c59699b024428ad5ec2bcc6b928527b8fe28de6cb89f47efb", size = 2144046, upload-time = "2025-10-07T10:50:40.686Z" }, ] [[package]] name = "pydap" -version = "3.5.7" +version = "3.5.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4", marker = "python_full_version >= '3.11'" }, @@ -3357,18 +3378,18 @@ dependencies = [ { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "webob", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/31/db/ac93329f396d32a111370195ff6cf25e1f30e7d3c050ad119eadc0e092b4/pydap-3.5.7.tar.gz", hash = "sha256:1e2ae9a87ee980564bff7da34b2e51fdf1629d6e74ae8ed52bc6fdf96a6c4a21", size = 12112901, upload-time = "2025-09-26T05:18:20.082Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/aa/8dd622677cb0436e0b84993f0bda2331612bab88995691653af9ddc889ee/pydap-3.5.8.tar.gz", hash = "sha256:0dc3c7f28fd456e17ed1c789ccfd119938a2bd1d73828cdf5319c69a213df560", size = 12126573, upload-time = "2025-10-03T19:19:55.206Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/61/df917dc9e5190fc3498741710e2143c02aef458f232c69c6a790107a4beb/pydap-3.5.7-py3-none-any.whl", hash = "sha256:2792772c46e0dc4cfcc8d42fbe022aee82fd55bda09ec46e193ba1f92900bf92", size = 2423125, upload-time = "2025-09-26T05:18:18.007Z" }, + { url = "https://files.pythonhosted.org/packages/b8/20/e989ab34f456f2f86a8d1e9013d09cc022e7508868e452084f49210b912e/pydap-3.5.8-py3-none-any.whl", hash = "sha256:7e18b224e8b93d53b9505dc8de34bcb9b1d121169403a836461d758dc998ca5c", size = 2429178, upload-time = "2025-10-03T19:19:53.38Z" }, ] [[package]] name = "pygments" version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, ] [[package]] @@ -3379,18 +3400,18 @@ dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277, upload-time = "2025-07-28T16:19:34.167Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178, upload-time = "2025-07-28T16:19:31.401Z" }, + { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178 }, ] [[package]] name = "pyparsing" version = "3.2.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, + { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890 }, ] [[package]] @@ -3401,9 +3422,9 @@ dependencies = [ { name = "packaging" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710, upload-time = "2025-05-12T14:41:58.025Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/fd/437901c891f58a7b9096511750247535e891d2d5a5a6eefbc9386a2b41d5/pyproject_api-1.9.1.tar.gz", hash = "sha256:43c9918f49daab37e302038fc1aed54a8c7a91a9fa935d00b9a485f37e0f5335", size = 22710 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158, upload-time = "2025-05-12T14:41:56.217Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e6/c293c06695d4a3ab0260ef124a74ebadba5f4c511ce3a4259e976902c00b/pyproject_api-1.9.1-py3-none-any.whl", hash = "sha256:7d6238d92f8962773dd75b5f0c4a6a27cce092a14b623b811dba656f3b628948", size = 13158 }, ] [[package]] @@ -3414,11 +3435,11 @@ dependencies = [ { name = "pyqt5-qt5" }, { name = "pyqt5-sip" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103, upload-time = "2024-07-19T08:39:40.561Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308, upload-time = "2024-07-19T08:39:46.932Z" }, - { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864, upload-time = "2024-07-19T08:39:53.572Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308 }, + { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864 }, ] [[package]] @@ -3426,29 +3447,32 @@ name = "pyqt5-qt5" version = "5.15.2" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716, upload-time = "2021-03-10T13:57:39.485Z" }, - { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358, upload-time = "2021-03-10T14:01:17.827Z" }, - { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158, upload-time = "2021-03-10T14:05:20.868Z" }, + { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716 }, + { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358 }, + { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158 }, ] [[package]] name = "pyqt5-sip" -version = "12.17.0" +version = "12.17.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/79/086b50414bafa71df494398ad277d72e58229a3d1c1b1c766d12b14c2e6d/pyqt5_sip-12.17.0.tar.gz", hash = "sha256:682dadcdbd2239af9fdc0c0628e2776b820e128bec88b49b8d692fe682f90b4f", size = 104042, upload-time = "2025-02-02T17:13:11.268Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/08/88a20c862f40b5c178c517cdc7e93767967dec5ac1b994e226d517991c9b/pyqt5_sip-12.17.1.tar.gz", hash = "sha256:0eab72bcb628f1926bf5b9ac51259d4fa18e8b2a81d199071135458f7d087ea8", size = 104136, upload-time = "2025-10-08T09:04:19.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/d5/506b1c3ad06268c601276572f1cde1c0dffd074b44e023f4d80f5ea49265/PyQt5_sip-12.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2f2a8dcc7626fe0da73a0918e05ce2460c7a14ddc946049310e6e35052105434", size = 270932, upload-time = "2025-02-02T17:12:38.175Z" }, - { url = "https://files.pythonhosted.org/packages/0b/9b/46159d8038374b076244a1930ead460e723453ec73f9b0330390ddfdd0ea/PyQt5_sip-12.17.0-cp310-cp310-win32.whl", hash = "sha256:0c75d28b8282be3c1d7dbc76950d6e6eba1e334783224e9b9835ce1a9c64f482", size = 49085, upload-time = "2025-02-02T17:12:40.146Z" }, - { url = "https://files.pythonhosted.org/packages/fe/66/b3eb937a620ce2a5db5c377beeca870d60fafd87aecc1bcca6921bbcf553/PyQt5_sip-12.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c4bc535bae0dfa764e8534e893619fe843ce5a2e25f901c439bcb960114f686", size = 59040, upload-time = "2025-02-02T17:12:41.962Z" }, - { url = "https://files.pythonhosted.org/packages/29/4d/e5981cde03b091fd83a1ef4ef6a4ca99ce6921d61b80c0222fc8eafdc99a/PyQt5_sip-12.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:71514a7d43b44faa1d65a74ad2c5da92c03a251bdc749f009c313f06cceacc9a", size = 276401, upload-time = "2025-02-02T17:12:45.705Z" }, - { url = "https://files.pythonhosted.org/packages/5f/30/4c282896b1e8841639cf2aca59acf57d8b261ed834ae976c959f25fa4a35/PyQt5_sip-12.17.0-cp311-cp311-win32.whl", hash = "sha256:023466ae96f72fbb8419b44c3f97475de6642fa5632520d0f50fc1a52a3e8200", size = 49091, upload-time = "2025-02-02T17:12:47.688Z" }, - { url = "https://files.pythonhosted.org/packages/24/c1/50fc7301aa39a50f451fc1b6b219e778c540a823fe9533a57b4793c859fd/PyQt5_sip-12.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb565469d08dcb0a427def0c45e722323beb62db79454260482b6948bfd52d47", size = 59036, upload-time = "2025-02-02T17:12:49.535Z" }, - { url = "https://files.pythonhosted.org/packages/64/3b/e6d1f772b41d8445d6faf86cc9da65910484ebd9f7df83abc5d4955437d0/PyQt5_sip-12.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a92478d6808040fbe614bb61500fbb3f19f72714b99369ec28d26a7e3494115", size = 281893, upload-time = "2025-02-02T17:12:51.966Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c5/d17fc2ddb9156a593710c88afd98abcf4055a2224b772f8bec2c6eea879c/PyQt5_sip-12.17.0-cp312-cp312-win32.whl", hash = "sha256:b0ff280b28813e9bfd3a4de99490739fc29b776dc48f1c849caca7239a10fc8b", size = 49438, upload-time = "2025-02-02T17:12:54.426Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c5/1174988d52c732d07033cf9a5067142b01d76be7731c6394a64d5c3ef65c/PyQt5_sip-12.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:54c31de7706d8a9a8c0fc3ea2c70468aba54b027d4974803f8eace9c22aad41c", size = 58017, upload-time = "2025-02-02T17:12:56.31Z" }, - { url = "https://files.pythonhosted.org/packages/cd/cb/3b2050e9644d0021bdf25ddf7e4c3526e1edd0198879e76ba308e5d44faf/PyQt5_sip-12.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:419b9027e92b0b707632c370cfc6dc1f3b43c6313242fc4db57a537029bd179c", size = 281563, upload-time = "2025-02-02T17:12:59.421Z" }, - { url = "https://files.pythonhosted.org/packages/51/61/b8ebde7e0b32d0de44c521a0ace31439885b0423d7d45d010a2f7d92808c/PyQt5_sip-12.17.0-cp313-cp313-win32.whl", hash = "sha256:351beab964a19f5671b2a3e816ecf4d3543a99a7e0650f88a947fea251a7589f", size = 49383, upload-time = "2025-02-02T17:13:00.597Z" }, - { url = "https://files.pythonhosted.org/packages/15/ed/ff94d6b2910e7627380cb1fc9a518ff966e6d78285c8e54c9422b68305db/PyQt5_sip-12.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:672c209d05661fab8e17607c193bf43991d268a1eefbc2c4551fbf30fd8bb2ca", size = 58022, upload-time = "2025-02-02T17:13:01.738Z" }, + { url = "https://files.pythonhosted.org/packages/08/92/5aa38d8c17ee857fc3f7866dc84d4f4e7ab2180b5026e4f6ffd594ed2432/pyqt5_sip-12.17.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b52e85520dbfe5c3d0c0c47aa2c10fc1853d892ae60ebebfe8154b052394da50", size = 271388, upload-time = "2025-10-08T09:15:32.369Z" }, + { url = "https://files.pythonhosted.org/packages/58/5c/0990f3a9a07346417a6728102cbe3d97b13786bce974b24a8d649a49db59/pyqt5_sip-12.17.1-cp310-cp310-win32.whl", hash = "sha256:71a67e2c9b77a74e943e220db0a341c702fd9bcf83c4a2e07342dfce691742ae", size = 49092, upload-time = "2025-10-08T09:11:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/07/ad/f101338acf81cbd562362741aee9d0ee3c9242a6127c12ca698a15c851c6/pyqt5_sip-12.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:2710effb921bf6955b902779c763d890bb593da6325f0e128a0e3991cc855e9f", size = 58989, upload-time = "2025-10-08T09:08:33.535Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b2/330f97434b21fbc99ab16f6ce71358ff5ea1bf1f09ed14dfe6b28b5ed8f5/pyqt5_sip-12.17.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:155cf755266c8bf64428916e2ff720d5efa1aec003d4ccc40c003b147dbdac03", size = 276844, upload-time = "2025-10-08T09:15:33.713Z" }, + { url = "https://files.pythonhosted.org/packages/3b/fd/53925099d0fc8aaf7adee613b6cebfb3fdfcd1238add64ff9edf6711e5f8/pyqt5_sip-12.17.1-cp311-cp311-win32.whl", hash = "sha256:9dfa7fe4ac93b60004430699c4bf56fef842a356d64dfea7cbc6d580d0427d6d", size = 49099, upload-time = "2025-10-08T09:11:23.928Z" }, + { url = "https://files.pythonhosted.org/packages/33/f8/f47a849c17676557c4220fbce9fcc24e15736af247c4dddcaf9ff0124b57/pyqt5_sip-12.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:2ddd214cf40119b86942a5da2da5a7345334955ab00026d8dcc56326b30e6d3c", size = 58988, upload-time = "2025-10-08T09:08:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/45/85/ea1ae099260fd1859d71b31f51760b4226abfa778d5796b76d92c8fe6dcd/pyqt5_sip-12.17.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:140cc582151456103ebb149fefc678f3cae803e7720733db51212af5219cd45c", size = 282182, upload-time = "2025-10-08T09:15:35.752Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b3/d5b50c721651a0f2ccbef6f8db3dabf3db296b9ec239ba007f5615f57dd7/pyqt5_sip-12.17.1-cp312-cp312-win32.whl", hash = "sha256:9dc1f1525d4d42c080f6cfdfc70d78239f8f67b0a48ea0745497251d8d848b1d", size = 49447, upload-time = "2025-10-08T09:11:24.843Z" }, + { url = "https://files.pythonhosted.org/packages/14/b6/474d8b17763683ab45fb364f3a44f25fdc25d97b47b29ad8819b95a15ac8/pyqt5_sip-12.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:d5e2e9e175559017cd161d661e0ee0b551684f824bb90800c5a8c8a3bea9355e", size = 57946, upload-time = "2025-10-08T09:08:35.775Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9f/ae691360a9f18e3e06fd297e854d7ad175367e35ea184fd2fcf6c79b8c25/pyqt5_sip-12.17.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b023da906a70af2cf5e6fc1932f441ede07530f3e164dd52c6c2bb5ab7c6f424", size = 281923, upload-time = "2025-10-08T09:15:37.004Z" }, + { url = "https://files.pythonhosted.org/packages/d7/31/491c45423174a359a4b8a8d84a7b541c453f48497ae928cbe4006bcd3e01/pyqt5_sip-12.17.1-cp313-cp313-win32.whl", hash = "sha256:36dbef482bd638786b909f3bda65b7b3d5cbd6cbf16797496de38bae542da307", size = 49400, upload-time = "2025-10-08T09:11:25.769Z" }, + { url = "https://files.pythonhosted.org/packages/64/61/e28681dd5200094f7b2e6671e85c02a4d6693da36d23ad7d39ffbc70b15c/pyqt5_sip-12.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:d04e5551bbc3bcec98acc63b3b0618ddcbf31ff107349225b516fe7e7c0a7c8b", size = 57979, upload-time = "2025-10-08T09:08:37.036Z" }, + { url = "https://files.pythonhosted.org/packages/40/ae/be6e338ea427deac5cd81a93f51ae3fb6505d99d6d5e5d5341bcc099327e/pyqt5_sip-12.17.1-cp314-cp314-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:944a4bf1e1ee18ad03a54964c1c6433fb6de582313a1f0b17673e7203e22fc83", size = 282291, upload-time = "2025-10-08T08:38:25.735Z" }, + { url = "https://files.pythonhosted.org/packages/fc/a3/8b758518bd0dd5d1581f7a6d522c9b4d9b58d05087b1d0b4dfaad5376434/pyqt5_sip-12.17.1-cp314-cp314-win32.whl", hash = "sha256:99a2935fd662a67748625b1e6ffa0a2d1f2da068b9df6db04fa59a4a5d4ee613", size = 50578, upload-time = "2025-10-08T08:38:28.72Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/e96f9877548810b1e537f46fc21ba74552dd4e8c498658114a8353bdf659/pyqt5_sip-12.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:aaa33232cc80793d14fdb3b149b27eec0855612ed66aad480add5ac49b9cee63", size = 59763, upload-time = "2025-10-08T08:38:27.443Z" }, ] [[package]] @@ -3459,18 +3483,18 @@ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/d9/b62d5cddb3caa6e5145664bee5ed90223dee23ca887ed3ee479f2609e40a/pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3", size = 2343380, upload-time = "2024-04-29T02:18:58.467Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/d9/b62d5cddb3caa6e5145664bee5ed90223dee23ca887ed3ee479f2609e40a/pyqtgraph-0.13.7.tar.gz", hash = "sha256:64f84f1935c6996d0e09b1ee66fe478a7771e3ca6f3aaa05f00f6e068321d9e3", size = 2343380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/34/5702b3b7cafe99be1d94b42f100e8cc5e6957b761fcb1cf5f72d492851da/pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a", size = 1925473, upload-time = "2024-04-29T02:18:56.206Z" }, + { url = "https://files.pythonhosted.org/packages/7b/34/5702b3b7cafe99be1d94b42f100e8cc5e6957b761fcb1cf5f72d492851da/pyqtgraph-0.13.7-py3-none-any.whl", hash = "sha256:7754edbefb6c367fa0dfb176e2d0610da3ada20aa7a5318516c74af5fb72bf7a", size = 1925473 }, ] [[package]] name = "pyserial" version = "3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125, upload-time = "2020-11-23T03:59:15.045Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7d/ae3f0a63f41e4d2f6cb66a5b57197850f919f59e558159a4dd3a818f5082/pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb", size = 159125 } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, + { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585 }, ] [[package]] @@ -3486,9 +3510,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, ] [[package]] @@ -3500,9 +3524,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424 }, ] [[package]] @@ -3512,27 +3536,27 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } 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" }, + { 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 }, ] [[package]] name = "python-json-logger" -version = "3.3.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } +sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683, upload-time = "2025-10-06T04:15:18.984Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, + { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548, upload-time = "2025-10-06T04:15:17.553Z" }, ] [[package]] name = "pytz" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, ] [[package]] @@ -3542,9 +3566,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/04/1833acfa4ddefc5cdcfd76607f1bf494e7b7b658d890626e23026655d599/pyvisa-1.15.0.tar.gz", hash = "sha256:cec3cb91703a2849f6faa42b1ecd7689a0175baabff8ca33fce9f45934ce45e6", size = 236289, upload-time = "2025-04-01T15:52:25.377Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/04/1833acfa4ddefc5cdcfd76607f1bf494e7b7b658d890626e23026655d599/pyvisa-1.15.0.tar.gz", hash = "sha256:cec3cb91703a2849f6faa42b1ecd7689a0175baabff8ca33fce9f45934ce45e6", size = 236289 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/12/4979772f36acceb57664bde282fc7bd3e67f8d0ce85f2a521a05e90baaa5/pyvisa-1.15.0-py3-none-any.whl", hash = "sha256:e3ac8d9e863fbdbbe7e6d4d91401bceb7914d1c4a558a89b2cc755789f1e8309", size = 179199, upload-time = "2025-04-01T15:52:23.631Z" }, + { url = "https://files.pythonhosted.org/packages/a1/12/4979772f36acceb57664bde282fc7bd3e67f8d0ce85f2a521a05e90baaa5/pyvisa-1.15.0-py3-none-any.whl", hash = "sha256:e3ac8d9e863fbdbbe7e6d4d91401bceb7914d1c4a558a89b2cc755789f1e8309", size = 179199 }, ] [[package]] @@ -3552,98 +3576,100 @@ name = "pywin32" version = "311" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, - { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, - { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, - { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, - { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432 }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103 }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557 }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031 }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308 }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930 }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 }, ] [[package]] name = "pywinpty" -version = "3.0.0" +version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/df/429cc505dc5f77ab0612c4b60bca2e3dcc81f6c321844ee017d6dc0f4a95/pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1", size = 28551, upload-time = "2025-08-12T20:33:46.506Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/bb/a7cc2967c5c4eceb6cc49cfe39447d4bfc56e6c865e7c2249b6eb978935f/pywinpty-3.0.2.tar.gz", hash = "sha256:1505cc4cb248af42cb6285a65c9c2086ee9e7e574078ee60933d5d7fa86fb004", size = 30669, upload-time = "2025-10-03T21:16:29.205Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/f9/13d62974debb0c74ce3fa3d96b32cee6fce4f2d634789217e67aebf339f6/pywinpty-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:327b6034e0dc38352c1c99a7c0b3e54941b4e506a5f21acce63609cd2ab6cce2", size = 2050843, upload-time = "2025-08-12T20:36:11.134Z" }, - { url = "https://files.pythonhosted.org/packages/d6/34/30727e8a97709f5033277457df9a293ccddf34d6eb7528e6a1e910265307/pywinpty-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:29daa71ac5dcbe1496ef99f4cde85a732b1f0a3b71405d42177dbcf9ee405e5a", size = 2051048, upload-time = "2025-08-12T20:37:18.488Z" }, - { url = "https://files.pythonhosted.org/packages/76/d9/bd2249815c305ef8f879b326db1fe1effc8e5f22bd88e522b4b55231aa6f/pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3", size = 2051564, upload-time = "2025-08-12T20:37:09.128Z" }, - { url = "https://files.pythonhosted.org/packages/e2/77/358b1a97c1d0714f288949372ec64a70884a7eceb3f887042b9ae0bea388/pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1", size = 2050856, upload-time = "2025-08-12T20:36:09.117Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6c/4249cfb4eb4fdad2c76bc96db0642a40111847c375b92e5b9f4bf289ddd6/pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69", size = 2050082, upload-time = "2025-08-12T20:36:28.591Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f5/b17ae550841949c217ad557ee445b4a14e9c0b506ae51ee087eff53428a6/pywinpty-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:65db57fd3387d71e8372b6a54269cbcd0f6dfa6d4616a29e0af749ec19f5c558", size = 2050330, upload-time = "2025-10-03T21:20:15.656Z" }, + { url = "https://files.pythonhosted.org/packages/a6/a1/409c1651c9f874d598c10f51ff586c416625601df4bca315d08baec4c3e3/pywinpty-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:327790d70e4c841ebd9d0f295a780177149aeb405bca44c7115a3de5c2054b23", size = 2050304, upload-time = "2025-10-03T21:19:29.466Z" }, + { url = "https://files.pythonhosted.org/packages/02/4e/1098484e042c9485f56f16eb2b69b43b874bd526044ee401512234cf9e04/pywinpty-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:99fdd9b455f0ad6419aba6731a7a0d2f88ced83c3c94a80ff9533d95fa8d8a9e", size = 2050391, upload-time = "2025-10-03T21:19:01.642Z" }, + { url = "https://files.pythonhosted.org/packages/fc/19/b757fe28008236a4a713e813283721b8a40aa60cd7d3f83549f2e25a3155/pywinpty-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:18f78b81e4cfee6aabe7ea8688441d30247b73e52cd9657138015c5f4ee13a51", size = 2050057, upload-time = "2025-10-03T21:19:26.732Z" }, + { url = "https://files.pythonhosted.org/packages/cb/44/cbae12ecf6f4fa4129c36871fd09c6bef4f98d5f625ecefb5e2449765508/pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b", size = 2049874, upload-time = "2025-10-03T21:18:53.923Z" }, + { url = "https://files.pythonhosted.org/packages/ca/15/f12c6055e2d7a617d4d5820e8ac4ceaff849da4cb124640ef5116a230771/pywinpty-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:28297cecc37bee9f24d8889e47231972d6e9e84f7b668909de54f36ca785029a", size = 2050386, upload-time = "2025-10-03T21:18:50.477Z" }, + { url = "https://files.pythonhosted.org/packages/de/24/c6907c5bb06043df98ad6a0a0ff5db2e0affcecbc3b15c42404393a3f72a/pywinpty-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:34b55ae9a1b671fe3eae071d86618110538e8eaad18fcb1531c0830b91a82767", size = 2049834, upload-time = "2025-10-03T21:19:25.688Z" }, ] [[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" }, +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } +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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543 }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, ] [[package]] @@ -3653,9 +3679,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722 }, ] [[package]] @@ -3665,75 +3691,75 @@ 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" }, +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750 } +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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155 }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428 }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184 }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480 }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862 }, ] [[package]] name = "qblox-instruments" -version = "0.16.0" +version = "0.17.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastjsonschema" }, @@ -3744,7 +3770,7 @@ dependencies = [ { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "spirack" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/48/7974ef40f055866a48091477d691b8f85ea5312a60a8f3ced5af6a1edede/qblox_instruments-0.16.0.tar.gz", hash = "sha256:8a9785d916af27a35c0c51a6a870de5ed879cadb56fff1ee47f4a79a2cf0ad62", size = 2289124, upload-time = "2025-03-31T17:30:05.213Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/cc/173afc8210d100c14786664f9dbc3bfdd44eac626d0fbc00f8b1316124df/qblox_instruments-0.17.1.tar.gz", hash = "sha256:8db6fb2606e49bdf03e808205747117543c4815559114977d37cd634431d7f1f", size = 2291457, upload-time = "2025-08-11T10:02:03.62Z" } [[package]] name = "qcodes" @@ -3782,9 +3808,9 @@ dependencies = [ { name = "wrapt", marker = "python_full_version < '3.11'" }, { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/d5/2e8c3b36c6fd4969911ad905814320f7ca2c541bafa8d7199e35d8143002/qcodes-0.52.0.tar.gz", hash = "sha256:add998d3817ff5bbc96665291a615bc230fa39fcac52b19ef315c8f1553c0a6e", size = 800095, upload-time = "2025-04-04T07:33:11.013Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/d5/2e8c3b36c6fd4969911ad905814320f7ca2c541bafa8d7199e35d8143002/qcodes-0.52.0.tar.gz", hash = "sha256:add998d3817ff5bbc96665291a615bc230fa39fcac52b19ef315c8f1553c0a6e", size = 800095 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/30/1525fb29910d159145b873737d0ef54a8d00c6044ed9d5b55712d93e0bda/qcodes-0.52.0-py3-none-any.whl", hash = "sha256:de11fb04626b36503cca19f075bb7d73c4c6c16d78906fa5e4f3e938910b211e", size = 953160, upload-time = "2025-04-04T07:33:08.855Z" }, + { url = "https://files.pythonhosted.org/packages/c0/30/1525fb29910d159145b873737d0ef54a8d00c6044ed9d5b55712d93e0bda/qcodes-0.52.0-py3-none-any.whl", hash = "sha256:de11fb04626b36503cca19f075bb7d73c4c6c16d78906fa5e4f3e938910b211e", size = 953160 }, ] [[package]] @@ -3822,11 +3848,11 @@ dependencies = [ { name = "uncertainties", marker = "python_full_version >= '3.11'" }, { name = "versioningit", marker = "python_full_version >= '3.11'" }, { name = "websockets", marker = "python_full_version >= '3.11'" }, - { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/e1/628a01567051a1cf2fbb9149fc32849c678bced55d6d1d8b6d9ebe4ae406/qcodes-0.54.1.tar.gz", hash = "sha256:98cdb1d643bbfa1e1779c633e64ff1d9927bfb27f7b745c70890e8f0289c78d4", size = 814205, upload-time = "2025-10-02T17:53:51.118Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/e1/628a01567051a1cf2fbb9149fc32849c678bced55d6d1d8b6d9ebe4ae406/qcodes-0.54.1.tar.gz", hash = "sha256:98cdb1d643bbfa1e1779c633e64ff1d9927bfb27f7b745c70890e8f0289c78d4", size = 814205 } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/54/fe64869ca86716fce56d49dc15c5d8114136173092264178bc2b13e6b38f/qcodes-0.54.1-py3-none-any.whl", hash = "sha256:ab42f27652525b2bffc2b85a97d0ba78a1fdc4b3229c393ad7acfb007a20ce6f", size = 973581, upload-time = "2025-10-02T17:53:48.734Z" }, + { url = "https://files.pythonhosted.org/packages/92/54/fe64869ca86716fce56d49dc15c5d8114136173092264178bc2b13e6b38f/qcodes-0.54.1-py3-none-any.whl", hash = "sha256:ab42f27652525b2bffc2b85a97d0ba78a1fdc4b3229c393ad7acfb007a20ce6f", size = 973581 }, ] [[package]] @@ -3846,11 +3872,11 @@ dependencies = [ { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "versioningit" }, { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b6/0b/818b0120ec1d30488f25c5d658ef3a1dd3b9895df621df09c96907e180df/qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c", size = 102955, upload-time = "2024-08-01T12:21:05.54Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/0b/818b0120ec1d30488f25c5d658ef3a1dd3b9895df621df09c96907e180df/qcodes_loop-0.1.3.tar.gz", hash = "sha256:8320fca93962414f7ecc6e85977a9fe7a5ccfb54a15bf94cc803eb72a08f573c", size = 102955 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/9c/d8ef0d68ab157eed180359ebef9cdf8f3037fd1027dd9b296a0a64a5fbfe/qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a", size = 119523, upload-time = "2024-08-01T12:21:03.831Z" }, + { url = "https://files.pythonhosted.org/packages/db/9c/d8ef0d68ab157eed180359ebef9cdf8f3037fd1027dd9b296a0a64a5fbfe/qcodes_loop-0.1.3-py3-none-any.whl", hash = "sha256:88055c40b85b2196f09afa0a06b8734933fea6a70857cadf99b78032dbe2ce2a", size = 119523 }, ] [[package]] @@ -3883,16 +3909,16 @@ dependencies = [ { name = "typing-extensions" }, { name = "uncertainties" }, { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["io"], marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2025.9.1", source = { registry = "https://pypi.org/simple" }, extra = ["io"], marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.10.1", source = { registry = "https://pypi.org/simple" }, extra = ["io"], marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/b3/33232239a59e65d67d158ca6306c4c9131234157d10fb7b39165dafee131/quantify_core-0.9.1.tar.gz", hash = "sha256:7f3dc9677a8ff59cdcfd6311626d10983ea1f585e2adb7ba73e87e636a7fb365", size = 6125832, upload-time = "2025-08-18T11:42:42.362Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/b3/33232239a59e65d67d158ca6306c4c9131234157d10fb7b39165dafee131/quantify_core-0.9.1.tar.gz", hash = "sha256:7f3dc9677a8ff59cdcfd6311626d10983ea1f585e2adb7ba73e87e636a7fb365", size = 6125832 } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/aa/9041e063dce98a73234841623ed190d927b05ac10a599cab78e503f39a09/quantify_core-0.9.1-py3-none-any.whl", hash = "sha256:fad2dd2e8158b351419135e87ca1301b037944f0f101c86957e20866ec70d58c", size = 142244, upload-time = "2025-08-18T11:42:41.029Z" }, + { url = "https://files.pythonhosted.org/packages/36/aa/9041e063dce98a73234841623ed190d927b05ac10a599cab78e503f39a09/quantify_core-0.9.1-py3-none-any.whl", hash = "sha256:fad2dd2e8158b351419135e87ca1301b037944f0f101c86957e20866ec70d58c", size = 142244 }, ] [[package]] name = "quantify-scheduler" -version = "0.23.1" +version = "0.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "columnar" }, @@ -3913,13 +3939,14 @@ dependencies = [ { name = "qcodes", version = "0.54.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "quantify-core" }, { name = "rich", extra = ["jupyter"] }, + { name = "ruamel-yaml" }, { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/09/22/c6123c882db914e3c489a3318cce7d8d5aa871a3c8ab9d559eb2c2f3a043/quantify_scheduler-0.23.1.tar.gz", hash = "sha256:d6ad4360fcaf8f15a03f02250e8289f9b235e2bb8c282e2a17888c4c84f5ddaa", size = 1877505, upload-time = "2025-04-28T11:38:11.903Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/9a/1456696a96a1b7103e3dbf6dd6d146ead2b64435b9f7ea367dd30cfb83c5/quantify_scheduler-0.25.1.tar.gz", hash = "sha256:307bd007130cf3cb8f1b6f300b3bc43dbf659b57937164b542e0950d8a7abb49", size = 1895133, upload-time = "2025-09-26T11:55:20.634Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/de/2ce91f7a3c6372f41f627aa4cf9dc79fa2efdf941dd3841b29bf6dd413ed/quantify_scheduler-0.23.1-py3-none-any.whl", hash = "sha256:545eadeea61781a235c6ea3f3c710f2572e1fe9eb9d4f18a26a6918f2939f06e", size = 431422, upload-time = "2025-04-28T11:38:09.729Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2d/942abd0e61271d78e0af7ae3cce478e303a2626d577aaa542ea1392d5a07/quantify_scheduler-0.25.1-py3-none-any.whl", hash = "sha256:96c10c0e645207f1b43562d2cf64d874ccececef5ade3f7bff82ab3a7a3a5e5c", size = 443912, upload-time = "2025-09-26T11:55:16.858Z" }, ] [[package]] @@ -3931,9 +3958,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, ] [[package]] @@ -3946,9 +3973,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, ] [[package]] @@ -3963,9 +3990,9 @@ dependencies = [ { name = "url-normalize", marker = "python_full_version >= '3.11'" }, { name = "urllib3", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/be/7b2a95a9e7a7c3e774e43d067c51244e61dea8b120ae2deff7089a93fb2b/requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1", size = 3018209, upload-time = "2024-06-18T17:18:03.774Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/be/7b2a95a9e7a7c3e774e43d067c51244e61dea8b120ae2deff7089a93fb2b/requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1", size = 3018209 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/2e/8f4051119f460cfc786aa91f212165bb6e643283b533db572d7b33952bd2/requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603", size = 61425, upload-time = "2024-06-18T17:17:45Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2e/8f4051119f460cfc786aa91f212165bb6e643283b533db572d7b33952bd2/requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603", size = 61425 }, ] [[package]] @@ -3975,18 +4002,18 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } 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" }, + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } 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" }, + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, ] [[package]] @@ -3996,9 +4023,9 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239 } 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" }, + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046 }, ] [[package]] @@ -4009,9 +4036,9 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368 }, ] [package.optional-dependencies] @@ -4023,135 +4050,135 @@ jupyter = [ name = "rpds-py" version = "0.27.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479, upload-time = "2025-08-27T12:16:36.024Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606, upload-time = "2025-08-27T12:12:25.189Z" }, - { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452, upload-time = "2025-08-27T12:12:27.433Z" }, - { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519, upload-time = "2025-08-27T12:12:28.719Z" }, - { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424, upload-time = "2025-08-27T12:12:30.207Z" }, - { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467, upload-time = "2025-08-27T12:12:31.808Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660, upload-time = "2025-08-27T12:12:33.444Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062, upload-time = "2025-08-27T12:12:34.857Z" }, - { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289, upload-time = "2025-08-27T12:12:36.085Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718, upload-time = "2025-08-27T12:12:37.401Z" }, - { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333, upload-time = "2025-08-27T12:12:38.672Z" }, - { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127, upload-time = "2025-08-27T12:12:41.48Z" }, - { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899, upload-time = "2025-08-27T12:12:42.925Z" }, - { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450, upload-time = "2025-08-27T12:12:44.813Z" }, - { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447, upload-time = "2025-08-27T12:12:46.204Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063, upload-time = "2025-08-27T12:12:47.856Z" }, - { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210, upload-time = "2025-08-27T12:12:49.187Z" }, - { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636, upload-time = "2025-08-27T12:12:50.492Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341, upload-time = "2025-08-27T12:12:52.024Z" }, - { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428, upload-time = "2025-08-27T12:12:53.779Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923, upload-time = "2025-08-27T12:12:55.15Z" }, - { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094, upload-time = "2025-08-27T12:12:57.194Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093, upload-time = "2025-08-27T12:12:58.985Z" }, - { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969, upload-time = "2025-08-27T12:13:00.367Z" }, - { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302, upload-time = "2025-08-27T12:13:01.737Z" }, - { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259, upload-time = "2025-08-27T12:13:03.127Z" }, - { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983, upload-time = "2025-08-27T12:13:04.516Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154, upload-time = "2025-08-27T12:13:06.278Z" }, - { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627, upload-time = "2025-08-27T12:13:07.625Z" }, - { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998, upload-time = "2025-08-27T12:13:08.972Z" }, - { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887, upload-time = "2025-08-27T12:13:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795, upload-time = "2025-08-27T12:13:11.65Z" }, - { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121, upload-time = "2025-08-27T12:13:13.008Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976, upload-time = "2025-08-27T12:13:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953, upload-time = "2025-08-27T12:13:15.774Z" }, - { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915, upload-time = "2025-08-27T12:13:17.379Z" }, - { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883, upload-time = "2025-08-27T12:13:18.704Z" }, - { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699, upload-time = "2025-08-27T12:13:20.089Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713, upload-time = "2025-08-27T12:13:21.436Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324, upload-time = "2025-08-27T12:13:22.789Z" }, - { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646, upload-time = "2025-08-27T12:13:24.122Z" }, - { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137, upload-time = "2025-08-27T12:13:25.557Z" }, - { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343, upload-time = "2025-08-27T12:13:26.967Z" }, - { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497, upload-time = "2025-08-27T12:13:28.326Z" }, - { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790, upload-time = "2025-08-27T12:13:29.71Z" }, - { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741, upload-time = "2025-08-27T12:13:31.039Z" }, - { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574, upload-time = "2025-08-27T12:13:32.902Z" }, - { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051, upload-time = "2025-08-27T12:13:34.228Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395, upload-time = "2025-08-27T12:13:36.132Z" }, - { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334, upload-time = "2025-08-27T12:13:37.562Z" }, - { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691, upload-time = "2025-08-27T12:13:38.94Z" }, - { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868, upload-time = "2025-08-27T12:13:40.192Z" }, - { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469, upload-time = "2025-08-27T12:13:41.496Z" }, - { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125, upload-time = "2025-08-27T12:13:42.802Z" }, - { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341, upload-time = "2025-08-27T12:13:44.472Z" }, - { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511, upload-time = "2025-08-27T12:13:45.898Z" }, - { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736, upload-time = "2025-08-27T12:13:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462, upload-time = "2025-08-27T12:13:48.742Z" }, - { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034, upload-time = "2025-08-27T12:13:50.11Z" }, - { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392, upload-time = "2025-08-27T12:13:52.587Z" }, - { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355, upload-time = "2025-08-27T12:13:54.012Z" }, - { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138, upload-time = "2025-08-27T12:13:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247, upload-time = "2025-08-27T12:13:57.683Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699, upload-time = "2025-08-27T12:13:59.137Z" }, - { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852, upload-time = "2025-08-27T12:14:00.583Z" }, - { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582, upload-time = "2025-08-27T12:14:02.034Z" }, - { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126, upload-time = "2025-08-27T12:14:03.437Z" }, - { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486, upload-time = "2025-08-27T12:14:05.443Z" }, - { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832, upload-time = "2025-08-27T12:14:06.902Z" }, - { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249, upload-time = "2025-08-27T12:14:08.37Z" }, - { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356, upload-time = "2025-08-27T12:14:10.034Z" }, - { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300, upload-time = "2025-08-27T12:14:11.783Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714, upload-time = "2025-08-27T12:14:13.629Z" }, - { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943, upload-time = "2025-08-27T12:14:14.937Z" }, - { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472, upload-time = "2025-08-27T12:14:16.333Z" }, - { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676, upload-time = "2025-08-27T12:14:17.764Z" }, - { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313, upload-time = "2025-08-27T12:14:19.829Z" }, - { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080, upload-time = "2025-08-27T12:14:21.531Z" }, - { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868, upload-time = "2025-08-27T12:14:23.485Z" }, - { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750, upload-time = "2025-08-27T12:14:24.924Z" }, - { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688, upload-time = "2025-08-27T12:14:27.537Z" }, - { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225, upload-time = "2025-08-27T12:14:28.981Z" }, - { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361, upload-time = "2025-08-27T12:14:30.469Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493, upload-time = "2025-08-27T12:14:31.987Z" }, - { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623, upload-time = "2025-08-27T12:14:33.543Z" }, - { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800, upload-time = "2025-08-27T12:14:35.436Z" }, - { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943, upload-time = "2025-08-27T12:14:36.898Z" }, - { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739, upload-time = "2025-08-27T12:14:38.386Z" }, - { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120, upload-time = "2025-08-27T12:14:39.82Z" }, - { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944, upload-time = "2025-08-27T12:14:41.199Z" }, - { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283, upload-time = "2025-08-27T12:14:42.699Z" }, - { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320, upload-time = "2025-08-27T12:14:44.157Z" }, - { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760, upload-time = "2025-08-27T12:14:45.845Z" }, - { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476, upload-time = "2025-08-27T12:14:47.364Z" }, - { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418, upload-time = "2025-08-27T12:14:49.991Z" }, - { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771, upload-time = "2025-08-27T12:14:52.159Z" }, - { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022, upload-time = "2025-08-27T12:14:53.859Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787, upload-time = "2025-08-27T12:14:55.673Z" }, - { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538, upload-time = "2025-08-27T12:14:57.245Z" }, - { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512, upload-time = "2025-08-27T12:14:58.728Z" }, - { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813, upload-time = "2025-08-27T12:15:00.334Z" }, - { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385, upload-time = "2025-08-27T12:15:01.937Z" }, - { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097, upload-time = "2025-08-27T12:15:03.961Z" }, - { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360, upload-time = "2025-08-27T12:15:29.218Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933, upload-time = "2025-08-27T12:15:30.837Z" }, - { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962, upload-time = "2025-08-27T12:15:32.348Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412, upload-time = "2025-08-27T12:15:33.839Z" }, - { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972, upload-time = "2025-08-27T12:15:35.377Z" }, - { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273, upload-time = "2025-08-27T12:15:37.051Z" }, - { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278, upload-time = "2025-08-27T12:15:38.571Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084, upload-time = "2025-08-27T12:15:40.529Z" }, - { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041, upload-time = "2025-08-27T12:15:42.191Z" }, - { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084, upload-time = "2025-08-27T12:15:43.839Z" }, - { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115, upload-time = "2025-08-27T12:15:46.647Z" }, - { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561, upload-time = "2025-08-27T12:15:48.219Z" }, - { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125, upload-time = "2025-08-27T12:15:49.956Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402, upload-time = "2025-08-27T12:15:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084, upload-time = "2025-08-27T12:15:53.219Z" }, - { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090, upload-time = "2025-08-27T12:15:55.158Z" }, - { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519, upload-time = "2025-08-27T12:15:57.238Z" }, - { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817, upload-time = "2025-08-27T12:15:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240, upload-time = "2025-08-27T12:16:00.923Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194, upload-time = "2025-08-27T12:16:02.802Z" }, - { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086, upload-time = "2025-08-27T12:16:04.806Z" }, - { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272, upload-time = "2025-08-27T12:16:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003, upload-time = "2025-08-27T12:16:08.06Z" }, - { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482, upload-time = "2025-08-27T12:16:10.137Z" }, - { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523, upload-time = "2025-08-27T12:16:12.188Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606 }, + { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452 }, + { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519 }, + { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424 }, + { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467 }, + { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660 }, + { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062 }, + { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289 }, + { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718 }, + { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333 }, + { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127 }, + { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899 }, + { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450 }, + { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447 }, + { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063 }, + { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210 }, + { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636 }, + { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341 }, + { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428 }, + { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923 }, + { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094 }, + { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093 }, + { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969 }, + { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302 }, + { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259 }, + { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154 }, + { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627 }, + { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998 }, + { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795 }, + { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121 }, + { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976 }, + { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953 }, + { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915 }, + { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883 }, + { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699 }, + { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713 }, + { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324 }, + { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646 }, + { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137 }, + { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343 }, + { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497 }, + { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790 }, + { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741 }, + { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574 }, + { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051 }, + { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395 }, + { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334 }, + { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691 }, + { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868 }, + { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469 }, + { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125 }, + { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341 }, + { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511 }, + { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736 }, + { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462 }, + { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034 }, + { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392 }, + { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355 }, + { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138 }, + { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247 }, + { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699 }, + { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852 }, + { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582 }, + { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126 }, + { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486 }, + { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832 }, + { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249 }, + { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356 }, + { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300 }, + { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714 }, + { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943 }, + { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472 }, + { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676 }, + { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313 }, + { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080 }, + { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868 }, + { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750 }, + { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688 }, + { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225 }, + { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361 }, + { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493 }, + { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623 }, + { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800 }, + { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943 }, + { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739 }, + { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120 }, + { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944 }, + { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283 }, + { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320 }, + { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760 }, + { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476 }, + { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418 }, + { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771 }, + { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787 }, + { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538 }, + { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512 }, + { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813 }, + { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385 }, + { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097 }, + { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360 }, + { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933 }, + { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962 }, + { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412 }, + { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972 }, + { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273 }, + { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278 }, + { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084 }, + { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041 }, + { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084 }, + { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115 }, + { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561 }, + { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125 }, + { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402 }, + { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084 }, + { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090 }, + { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519 }, + { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817 }, + { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240 }, + { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194 }, + { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086 }, + { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272 }, + { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003 }, + { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482 }, + { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523 }, ] [[package]] @@ -4161,86 +4188,86 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload-time = "2025-08-19T11:15:10.694Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702, upload-time = "2025-08-19T11:15:07.696Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702 }, ] [[package]] name = "ruamel-yaml-clib" version = "0.2.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/e9/39ec4d4b3f91188fad1842748f67d4e749c77c37e353c4e545052ee8e893/ruamel.yaml.clib-0.2.14.tar.gz", hash = "sha256:803f5044b13602d58ea378576dd75aa759f52116a0232608e8fdada4da33752e", size = 225394, upload-time = "2025-09-22T19:51:23.753Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/3f/cfed5f088628128a9ec66f46794fd4d165642155c7b78c26d83b16c6bf7b/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a0ac90efbc7a77b0d796c03c8cc4e62fd710b3f1e4c32947713ef2ef52e09543", size = 633768, upload-time = "2025-09-22T19:50:31.228Z" }, - { url = "https://files.pythonhosted.org/packages/3a/d5/5ce2cc156c1da48160171968d91f066d305840fbf930ee955a509d025a44/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bf6b699223afe6c7fe9f2ef76e0bfa6dd892c21e94ce8c957478987ade76cd8", size = 721253, upload-time = "2025-09-22T19:50:28.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/71/d0b56bc902b38ebe4be8e270f730f929eec4edaf8a0fa7028f4ef64fa950/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d73a0187718f6eec5b2f729b0f98e4603f7bd9c48aa65d01227d1a5dcdfbe9e8", size = 683823, upload-time = "2025-09-22T19:50:29.993Z" }, - { url = "https://files.pythonhosted.org/packages/4b/db/1f37449dd89c540218598316ccafc1a0aed60215e72efa315c5367cfd015/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81f6d3b19bc703679a5705c6a16dabdc79823c71d791d73c65949be7f3012c02", size = 690370, upload-time = "2025-09-23T18:42:46.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/53/c498b30f35efcd9f47cb084d7ad9374f2b907470f73913dec6396b81397d/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b28caeaf3e670c08cb7e8de221266df8494c169bd6ed8875493fab45be9607a4", size = 703578, upload-time = "2025-09-22T19:50:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/34/79/492cfad9baed68914840c39e5f3c1cc251f51a897ddb3f532601215cbb12/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94f3efb718f8f49b031f2071ec7a27dd20cbfe511b4dfd54ecee54c956da2b31", size = 722544, upload-time = "2025-09-22T19:50:34.157Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f5/479ebfd5ba396e209ade90f7282d84b90c57b3e07be8dc6fcd02a6df7ffc/ruamel.yaml.clib-0.2.14-cp310-cp310-win32.whl", hash = "sha256:27c070cf3888e90d992be75dd47292ff9aa17dafd36492812a6a304a1aedc182", size = 100375, upload-time = "2025-09-22T19:50:36.832Z" }, - { url = "https://files.pythonhosted.org/packages/57/31/a044520fdb3bd409889f67f1efebda0658033c7ab3f390cee37531cc9a9e/ruamel.yaml.clib-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:4f4a150a737fccae13fb51234d41304ff2222e3b7d4c8e9428ed1a6ab48389b8", size = 118129, upload-time = "2025-09-22T19:50:35.545Z" }, - { url = "https://files.pythonhosted.org/packages/31/c6/fc687cd1b93bff8e40861eea46d6dc1a6a778d9a085684e4045ff26a8e40/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:10d9595b6a19778f3269399eff6bab642608e5966183abc2adbe558a42d4efc9", size = 641590, upload-time = "2025-09-22T19:50:41.978Z" }, - { url = "https://files.pythonhosted.org/packages/45/5d/65a2bc08b709b08576b3f307bf63951ee68a8e047cbbda6f1c9864ecf9a7/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba72975485f2b87b786075e18a6e5d07dc2b4d8973beb2732b9b2816f1bad70", size = 738090, upload-time = "2025-09-22T19:50:39.152Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d0/a70a03614d9a6788a3661ab1538879ed2aae4e84d861f101243116308a37/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29757bdb7c142f9595cc1b62ec49a3d1c83fab9cef92db52b0ccebaad4eafb98", size = 700744, upload-time = "2025-09-22T19:50:40.811Z" }, - { url = "https://files.pythonhosted.org/packages/77/30/c93fa457611f79946d5cb6cc97493ca5425f3f21891d7b1f9b44eaa1b38e/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:557df28dbccf79b152fe2d1b935f6063d9cc431199ea2b0e84892f35c03bb0ee", size = 742321, upload-time = "2025-09-23T18:42:48.916Z" }, - { url = "https://files.pythonhosted.org/packages/40/85/e2c54ad637117cd13244a4649946eaa00f32edcb882d1f92df90e079ab00/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:26a8de280ab0d22b6e3ec745b4a5a07151a0f74aad92dd76ab9c8d8d7087720d", size = 743805, upload-time = "2025-09-22T19:50:43.58Z" }, - { url = "https://files.pythonhosted.org/packages/81/50/f899072c38877d8ef5382e0b3d47f8c4346226c1f52d6945d6f64fec6a2f/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e501c096aa3889133d674605ebd018471bc404a59cbc17da3c5924421c54d97c", size = 769529, upload-time = "2025-09-22T19:50:45.707Z" }, - { url = "https://files.pythonhosted.org/packages/99/7c/96d4b5075e30c65ea2064e40c2d657c7c235d7b6ef18751cf89a935b9041/ruamel.yaml.clib-0.2.14-cp311-cp311-win32.whl", hash = "sha256:915748cfc25b8cfd81b14d00f4bfdb2ab227a30d6d43459034533f4d1c207a2a", size = 100256, upload-time = "2025-09-22T19:50:48.26Z" }, - { url = "https://files.pythonhosted.org/packages/7d/8c/73ee2babd04e8bfcf1fd5c20aa553d18bf0ebc24b592b4f831d12ae46cc0/ruamel.yaml.clib-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:4ccba93c1e5a40af45b2f08e4591969fa4697eae951c708f3f83dcbf9f6c6bb1", size = 118234, upload-time = "2025-09-22T19:50:47.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c5/346c7094344a60419764b4b1334d9e0285031c961176ff88ffb652405b0c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a911aa73588d9a8b08d662b9484bc0567949529824a55d3885b77e8dd62a127a", size = 647404, upload-time = "2025-09-22T19:50:52.921Z" }, - { url = "https://files.pythonhosted.org/packages/df/99/65080c863eb06d4498de3d6c86f3e90595e02e159fd8529f1565f56cfe2c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05ba88adf3d7189a974b2de7a9d56731548d35dc0a822ec3dc669caa7019b29", size = 753141, upload-time = "2025-09-22T19:50:50.294Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e3/0de85f3e3333f8e29e4b10244374a202a87665d1131798946ee22cf05c7c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb04c5650de6668b853623eceadcdb1a9f2fee381f5d7b6bc842ee7c239eeec4", size = 703477, upload-time = "2025-09-22T19:50:51.508Z" }, - { url = "https://files.pythonhosted.org/packages/d9/25/0d2f09d8833c7fd77ab8efeff213093c16856479a9d293180a0d89f6bed9/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df3ec9959241d07bc261f4983d25a1205ff37703faf42b474f15d54d88b4f8c9", size = 741157, upload-time = "2025-09-23T18:42:50.408Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8c/959f10c2e2153cbdab834c46e6954b6dd9e3b109c8f8c0a3cf1618310985/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fbc08c02e9b147a11dfcaa1ac8a83168b699863493e183f7c0c8b12850b7d259", size = 745859, upload-time = "2025-09-22T19:50:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/ed/6b/e580a7c18b485e1a5f30a32cda96b20364b0ba649d9d2baaf72f8bd21f83/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c099cafc1834d3c5dac305865d04235f7c21c167c8dd31ebc3d6bbc357e2f023", size = 770200, upload-time = "2025-09-22T19:50:55.718Z" }, - { url = "https://files.pythonhosted.org/packages/ef/44/3455eebc761dc8e8fdced90f2b0a3fa61e32ba38b50de4130e2d57db0f21/ruamel.yaml.clib-0.2.14-cp312-cp312-win32.whl", hash = "sha256:b5b0f7e294700b615a3bcf6d28b26e6da94e8eba63b079f4ec92e9ba6c0d6b54", size = 98829, upload-time = "2025-09-22T19:50:58.895Z" }, - { url = "https://files.pythonhosted.org/packages/76/ab/5121f7f3b651db93de546f8c982c241397aad0a4765d793aca1dac5eadee/ruamel.yaml.clib-0.2.14-cp312-cp312-win_amd64.whl", hash = "sha256:a37f40a859b503304dd740686359fcf541d6fb3ff7fc10f539af7f7150917c68", size = 115570, upload-time = "2025-09-22T19:50:57.981Z" }, - { url = "https://files.pythonhosted.org/packages/5a/08/b4499234a420ef42960eeb05585df5cc7eb25ccb8c980490b079e6367050/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:1c1acc3a0209ea9042cc3cfc0790edd2eddd431a2ec3f8283d081e4d5018571e", size = 642558, upload-time = "2025-09-22T19:51:03.388Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ba/1975a27dedf1c4c33306ee67c948121be8710b19387aada29e2f139c43ee/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2070bf0ad1540d5c77a664de07ebcc45eebd1ddcab71a7a06f26936920692beb", size = 744087, upload-time = "2025-09-22T19:51:00.897Z" }, - { url = "https://files.pythonhosted.org/packages/20/15/8a19a13d27f3bd09fa18813add8380a29115a47b553845f08802959acbce/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd8fe07f49c170e09d76773fb86ad9135e0beee44f36e1576a201b0676d3d1d", size = 699709, upload-time = "2025-09-22T19:51:02.075Z" }, - { url = "https://files.pythonhosted.org/packages/19/ee/8d6146a079ad21e534b5083c9ee4a4c8bec42f79cf87594b60978286b39a/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ff86876889ea478b1381089e55cf9e345707b312beda4986f823e1d95e8c0f59", size = 708926, upload-time = "2025-09-23T18:42:51.707Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/426b714abdc222392e68f3b8ad323930d05a214a27c7e7a0f06c69126401/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1f118b707eece8cf84ecbc3e3ec94d9db879d85ed608f95870d39b2d2efa5dca", size = 740202, upload-time = "2025-09-22T19:51:04.673Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ac/3c5c2b27a183f4fda8a57c82211721c016bcb689a4a175865f7646db9f94/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b30110b29484adc597df6bd92a37b90e63a8c152ca8136aad100a02f8ba6d1b6", size = 765196, upload-time = "2025-09-22T19:51:05.916Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/06f56a71fd55021c993ed6e848c9b2e5e9cfce180a42179f0ddd28253f7c/ruamel.yaml.clib-0.2.14-cp313-cp313-win32.whl", hash = "sha256:f4e97a1cf0b7a30af9e1d9dad10a5671157b9acee790d9e26996391f49b965a2", size = 98635, upload-time = "2025-09-22T19:51:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/51/79/76aba16a1689b50528224b182f71097ece338e7a4ab55e84c2e73443b78a/ruamel.yaml.clib-0.2.14-cp313-cp313-win_amd64.whl", hash = "sha256:090782b5fb9d98df96509eecdbcaffd037d47389a89492320280d52f91330d78", size = 115238, upload-time = "2025-09-22T19:51:07.081Z" }, - { url = "https://files.pythonhosted.org/packages/ef/ec/4edbf17ac2c87fa0845dd366ef8d5852b96eb58fcd65fc1ecf5fe27b4641/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a0cb71ccc6ef9ce36eecb6272c81afdc2f565950cdcec33ae8e6cd8f7fc86f27", size = 739639, upload-time = "2025-09-22T19:51:10.566Z" }, - { url = "https://files.pythonhosted.org/packages/15/18/b0e1fafe59051de9e79cdd431863b03593ecfa8341c110affad7c8121efc/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7cb9ad1d525d40f7d87b6df7c0ff916a66bc52cb61b66ac1b2a16d0c1b07640", size = 764456, upload-time = "2025-09-22T19:51:11.736Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d8/e9/39ec4d4b3f91188fad1842748f67d4e749c77c37e353c4e545052ee8e893/ruamel.yaml.clib-0.2.14.tar.gz", hash = "sha256:803f5044b13602d58ea378576dd75aa759f52116a0232608e8fdada4da33752e", size = 225394 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/3f/cfed5f088628128a9ec66f46794fd4d165642155c7b78c26d83b16c6bf7b/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a0ac90efbc7a77b0d796c03c8cc4e62fd710b3f1e4c32947713ef2ef52e09543", size = 633768 }, + { url = "https://files.pythonhosted.org/packages/3a/d5/5ce2cc156c1da48160171968d91f066d305840fbf930ee955a509d025a44/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bf6b699223afe6c7fe9f2ef76e0bfa6dd892c21e94ce8c957478987ade76cd8", size = 721253 }, + { url = "https://files.pythonhosted.org/packages/2b/71/d0b56bc902b38ebe4be8e270f730f929eec4edaf8a0fa7028f4ef64fa950/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d73a0187718f6eec5b2f729b0f98e4603f7bd9c48aa65d01227d1a5dcdfbe9e8", size = 683823 }, + { url = "https://files.pythonhosted.org/packages/4b/db/1f37449dd89c540218598316ccafc1a0aed60215e72efa315c5367cfd015/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81f6d3b19bc703679a5705c6a16dabdc79823c71d791d73c65949be7f3012c02", size = 690370 }, + { url = "https://files.pythonhosted.org/packages/5d/53/c498b30f35efcd9f47cb084d7ad9374f2b907470f73913dec6396b81397d/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b28caeaf3e670c08cb7e8de221266df8494c169bd6ed8875493fab45be9607a4", size = 703578 }, + { url = "https://files.pythonhosted.org/packages/34/79/492cfad9baed68914840c39e5f3c1cc251f51a897ddb3f532601215cbb12/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94f3efb718f8f49b031f2071ec7a27dd20cbfe511b4dfd54ecee54c956da2b31", size = 722544 }, + { url = "https://files.pythonhosted.org/packages/ca/f5/479ebfd5ba396e209ade90f7282d84b90c57b3e07be8dc6fcd02a6df7ffc/ruamel.yaml.clib-0.2.14-cp310-cp310-win32.whl", hash = "sha256:27c070cf3888e90d992be75dd47292ff9aa17dafd36492812a6a304a1aedc182", size = 100375 }, + { url = "https://files.pythonhosted.org/packages/57/31/a044520fdb3bd409889f67f1efebda0658033c7ab3f390cee37531cc9a9e/ruamel.yaml.clib-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:4f4a150a737fccae13fb51234d41304ff2222e3b7d4c8e9428ed1a6ab48389b8", size = 118129 }, + { url = "https://files.pythonhosted.org/packages/31/c6/fc687cd1b93bff8e40861eea46d6dc1a6a778d9a085684e4045ff26a8e40/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:10d9595b6a19778f3269399eff6bab642608e5966183abc2adbe558a42d4efc9", size = 641590 }, + { url = "https://files.pythonhosted.org/packages/45/5d/65a2bc08b709b08576b3f307bf63951ee68a8e047cbbda6f1c9864ecf9a7/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba72975485f2b87b786075e18a6e5d07dc2b4d8973beb2732b9b2816f1bad70", size = 738090 }, + { url = "https://files.pythonhosted.org/packages/fb/d0/a70a03614d9a6788a3661ab1538879ed2aae4e84d861f101243116308a37/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29757bdb7c142f9595cc1b62ec49a3d1c83fab9cef92db52b0ccebaad4eafb98", size = 700744 }, + { url = "https://files.pythonhosted.org/packages/77/30/c93fa457611f79946d5cb6cc97493ca5425f3f21891d7b1f9b44eaa1b38e/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:557df28dbccf79b152fe2d1b935f6063d9cc431199ea2b0e84892f35c03bb0ee", size = 742321 }, + { url = "https://files.pythonhosted.org/packages/40/85/e2c54ad637117cd13244a4649946eaa00f32edcb882d1f92df90e079ab00/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:26a8de280ab0d22b6e3ec745b4a5a07151a0f74aad92dd76ab9c8d8d7087720d", size = 743805 }, + { url = "https://files.pythonhosted.org/packages/81/50/f899072c38877d8ef5382e0b3d47f8c4346226c1f52d6945d6f64fec6a2f/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e501c096aa3889133d674605ebd018471bc404a59cbc17da3c5924421c54d97c", size = 769529 }, + { url = "https://files.pythonhosted.org/packages/99/7c/96d4b5075e30c65ea2064e40c2d657c7c235d7b6ef18751cf89a935b9041/ruamel.yaml.clib-0.2.14-cp311-cp311-win32.whl", hash = "sha256:915748cfc25b8cfd81b14d00f4bfdb2ab227a30d6d43459034533f4d1c207a2a", size = 100256 }, + { url = "https://files.pythonhosted.org/packages/7d/8c/73ee2babd04e8bfcf1fd5c20aa553d18bf0ebc24b592b4f831d12ae46cc0/ruamel.yaml.clib-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:4ccba93c1e5a40af45b2f08e4591969fa4697eae951c708f3f83dcbf9f6c6bb1", size = 118234 }, + { url = "https://files.pythonhosted.org/packages/2b/c5/346c7094344a60419764b4b1334d9e0285031c961176ff88ffb652405b0c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a911aa73588d9a8b08d662b9484bc0567949529824a55d3885b77e8dd62a127a", size = 647404 }, + { url = "https://files.pythonhosted.org/packages/df/99/65080c863eb06d4498de3d6c86f3e90595e02e159fd8529f1565f56cfe2c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05ba88adf3d7189a974b2de7a9d56731548d35dc0a822ec3dc669caa7019b29", size = 753141 }, + { url = "https://files.pythonhosted.org/packages/3d/e3/0de85f3e3333f8e29e4b10244374a202a87665d1131798946ee22cf05c7c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb04c5650de6668b853623eceadcdb1a9f2fee381f5d7b6bc842ee7c239eeec4", size = 703477 }, + { url = "https://files.pythonhosted.org/packages/d9/25/0d2f09d8833c7fd77ab8efeff213093c16856479a9d293180a0d89f6bed9/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df3ec9959241d07bc261f4983d25a1205ff37703faf42b474f15d54d88b4f8c9", size = 741157 }, + { url = "https://files.pythonhosted.org/packages/d3/8c/959f10c2e2153cbdab834c46e6954b6dd9e3b109c8f8c0a3cf1618310985/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fbc08c02e9b147a11dfcaa1ac8a83168b699863493e183f7c0c8b12850b7d259", size = 745859 }, + { url = "https://files.pythonhosted.org/packages/ed/6b/e580a7c18b485e1a5f30a32cda96b20364b0ba649d9d2baaf72f8bd21f83/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c099cafc1834d3c5dac305865d04235f7c21c167c8dd31ebc3d6bbc357e2f023", size = 770200 }, + { url = "https://files.pythonhosted.org/packages/ef/44/3455eebc761dc8e8fdced90f2b0a3fa61e32ba38b50de4130e2d57db0f21/ruamel.yaml.clib-0.2.14-cp312-cp312-win32.whl", hash = "sha256:b5b0f7e294700b615a3bcf6d28b26e6da94e8eba63b079f4ec92e9ba6c0d6b54", size = 98829 }, + { url = "https://files.pythonhosted.org/packages/76/ab/5121f7f3b651db93de546f8c982c241397aad0a4765d793aca1dac5eadee/ruamel.yaml.clib-0.2.14-cp312-cp312-win_amd64.whl", hash = "sha256:a37f40a859b503304dd740686359fcf541d6fb3ff7fc10f539af7f7150917c68", size = 115570 }, + { url = "https://files.pythonhosted.org/packages/5a/08/b4499234a420ef42960eeb05585df5cc7eb25ccb8c980490b079e6367050/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:1c1acc3a0209ea9042cc3cfc0790edd2eddd431a2ec3f8283d081e4d5018571e", size = 642558 }, + { url = "https://files.pythonhosted.org/packages/b6/ba/1975a27dedf1c4c33306ee67c948121be8710b19387aada29e2f139c43ee/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2070bf0ad1540d5c77a664de07ebcc45eebd1ddcab71a7a06f26936920692beb", size = 744087 }, + { url = "https://files.pythonhosted.org/packages/20/15/8a19a13d27f3bd09fa18813add8380a29115a47b553845f08802959acbce/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd8fe07f49c170e09d76773fb86ad9135e0beee44f36e1576a201b0676d3d1d", size = 699709 }, + { url = "https://files.pythonhosted.org/packages/19/ee/8d6146a079ad21e534b5083c9ee4a4c8bec42f79cf87594b60978286b39a/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ff86876889ea478b1381089e55cf9e345707b312beda4986f823e1d95e8c0f59", size = 708926 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/426b714abdc222392e68f3b8ad323930d05a214a27c7e7a0f06c69126401/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1f118b707eece8cf84ecbc3e3ec94d9db879d85ed608f95870d39b2d2efa5dca", size = 740202 }, + { url = "https://files.pythonhosted.org/packages/3d/ac/3c5c2b27a183f4fda8a57c82211721c016bcb689a4a175865f7646db9f94/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b30110b29484adc597df6bd92a37b90e63a8c152ca8136aad100a02f8ba6d1b6", size = 765196 }, + { url = "https://files.pythonhosted.org/packages/92/2e/06f56a71fd55021c993ed6e848c9b2e5e9cfce180a42179f0ddd28253f7c/ruamel.yaml.clib-0.2.14-cp313-cp313-win32.whl", hash = "sha256:f4e97a1cf0b7a30af9e1d9dad10a5671157b9acee790d9e26996391f49b965a2", size = 98635 }, + { url = "https://files.pythonhosted.org/packages/51/79/76aba16a1689b50528224b182f71097ece338e7a4ab55e84c2e73443b78a/ruamel.yaml.clib-0.2.14-cp313-cp313-win_amd64.whl", hash = "sha256:090782b5fb9d98df96509eecdbcaffd037d47389a89492320280d52f91330d78", size = 115238 }, + { url = "https://files.pythonhosted.org/packages/ef/ec/4edbf17ac2c87fa0845dd366ef8d5852b96eb58fcd65fc1ecf5fe27b4641/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a0cb71ccc6ef9ce36eecb6272c81afdc2f565950cdcec33ae8e6cd8f7fc86f27", size = 739639 }, + { url = "https://files.pythonhosted.org/packages/15/18/b0e1fafe59051de9e79cdd431863b03593ecfa8341c110affad7c8121efc/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7cb9ad1d525d40f7d87b6df7c0ff916a66bc52cb61b66ac1b2a16d0c1b07640", size = 764456 }, ] [[package]] name = "ruff" version = "0.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/8e/f9f9ca747fea8e3ac954e3690d4698c9737c23b51731d02df999c150b1c9/ruff-0.13.3.tar.gz", hash = "sha256:5b0ba0db740eefdfbcce4299f49e9eaefc643d4d007749d77d047c2bab19908e", size = 5438533, upload-time = "2025-10-02T19:29:31.582Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/33/8f7163553481466a92656d35dea9331095122bb84cf98210bef597dd2ecd/ruff-0.13.3-py3-none-linux_armv6l.whl", hash = "sha256:311860a4c5e19189c89d035638f500c1e191d283d0cc2f1600c8c80d6dcd430c", size = 12484040, upload-time = "2025-10-02T19:28:49.199Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b5/4a21a4922e5dd6845e91896b0d9ef493574cbe061ef7d00a73c61db531af/ruff-0.13.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2bdad6512fb666b40fcadb65e33add2b040fc18a24997d2e47fee7d66f7fcae2", size = 13122975, upload-time = "2025-10-02T19:28:52.446Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/15649af836d88c9f154e5be87e64ae7d2b1baa5a3ef317cb0c8fafcd882d/ruff-0.13.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fc6fa4637284708d6ed4e5e970d52fc3b76a557d7b4e85a53013d9d201d93286", size = 12346621, upload-time = "2025-10-02T19:28:54.712Z" }, - { url = "https://files.pythonhosted.org/packages/a5/42/bcbccb8141305f9a6d3f72549dd82d1134299177cc7eaf832599700f95a7/ruff-0.13.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c9e6469864f94a98f412f20ea143d547e4c652f45e44f369d7b74ee78185838", size = 12574408, upload-time = "2025-10-02T19:28:56.679Z" }, - { url = "https://files.pythonhosted.org/packages/ce/19/0f3681c941cdcfa2d110ce4515624c07a964dc315d3100d889fcad3bfc9e/ruff-0.13.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5bf62b705f319476c78891e0e97e965b21db468b3c999086de8ffb0d40fd2822", size = 12285330, upload-time = "2025-10-02T19:28:58.79Z" }, - { url = "https://files.pythonhosted.org/packages/10/f8/387976bf00d126b907bbd7725219257feea58650e6b055b29b224d8cb731/ruff-0.13.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cc1abed87ce40cb07ee0667ce99dbc766c9f519eabfd948ed87295d8737c60", size = 13980815, upload-time = "2025-10-02T19:29:01.577Z" }, - { url = "https://files.pythonhosted.org/packages/0c/a6/7c8ec09d62d5a406e2b17d159e4817b63c945a8b9188a771193b7e1cc0b5/ruff-0.13.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4fb75e7c402d504f7a9a259e0442b96403fa4a7310ffe3588d11d7e170d2b1e3", size = 14987733, upload-time = "2025-10-02T19:29:04.036Z" }, - { url = "https://files.pythonhosted.org/packages/97/e5/f403a60a12258e0fd0c2195341cfa170726f254c788673495d86ab5a9a9d/ruff-0.13.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b951f9d9afb39330b2bdd2dd144ce1c1335881c277837ac1b50bfd99985ed3", size = 14439848, upload-time = "2025-10-02T19:29:06.684Z" }, - { url = "https://files.pythonhosted.org/packages/39/49/3de381343e89364c2334c9f3268b0349dc734fc18b2d99a302d0935c8345/ruff-0.13.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6052f8088728898e0a449f0dde8fafc7ed47e4d878168b211977e3e7e854f662", size = 13421890, upload-time = "2025-10-02T19:29:08.767Z" }, - { url = "https://files.pythonhosted.org/packages/ab/b5/c0feca27d45ae74185a6bacc399f5d8920ab82df2d732a17213fb86a2c4c/ruff-0.13.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc742c50f4ba72ce2a3be362bd359aef7d0d302bf7637a6f942eaa763bd292af", size = 13444870, upload-time = "2025-10-02T19:29:11.234Z" }, - { url = "https://files.pythonhosted.org/packages/50/a1/b655298a1f3fda4fdc7340c3f671a4b260b009068fbeb3e4e151e9e3e1bf/ruff-0.13.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8e5640349493b378431637019366bbd73c927e515c9c1babfea3e932f5e68e1d", size = 13691599, upload-time = "2025-10-02T19:29:13.353Z" }, - { url = "https://files.pythonhosted.org/packages/32/b0/a8705065b2dafae007bcae21354e6e2e832e03eb077bb6c8e523c2becb92/ruff-0.13.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b139f638a80eae7073c691a5dd8d581e0ba319540be97c343d60fb12949c8d0", size = 12421893, upload-time = "2025-10-02T19:29:15.668Z" }, - { url = "https://files.pythonhosted.org/packages/0d/1e/cbe7082588d025cddbb2f23e6dfef08b1a2ef6d6f8328584ad3015b5cebd/ruff-0.13.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6b547def0a40054825de7cfa341039ebdfa51f3d4bfa6a0772940ed351d2746c", size = 12267220, upload-time = "2025-10-02T19:29:17.583Z" }, - { url = "https://files.pythonhosted.org/packages/a5/99/4086f9c43f85e0755996d09bdcb334b6fee9b1eabdf34e7d8b877fadf964/ruff-0.13.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9cc48a3564423915c93573f1981d57d101e617839bef38504f85f3677b3a0a3e", size = 13177818, upload-time = "2025-10-02T19:29:19.943Z" }, - { url = "https://files.pythonhosted.org/packages/9b/de/7b5db7e39947d9dc1c5f9f17b838ad6e680527d45288eeb568e860467010/ruff-0.13.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1a993b17ec03719c502881cb2d5f91771e8742f2ca6de740034433a97c561989", size = 13618715, upload-time = "2025-10-02T19:29:22.527Z" }, - { url = "https://files.pythonhosted.org/packages/28/d3/bb25ee567ce2f61ac52430cf99f446b0e6d49bdfa4188699ad005fdd16aa/ruff-0.13.3-py3-none-win32.whl", hash = "sha256:f14e0d1fe6460f07814d03c6e32e815bff411505178a1f539a38f6097d3e8ee3", size = 12334488, upload-time = "2025-10-02T19:29:24.782Z" }, - { url = "https://files.pythonhosted.org/packages/cf/49/12f5955818a1139eed288753479ba9d996f6ea0b101784bb1fe6977ec128/ruff-0.13.3-py3-none-win_amd64.whl", hash = "sha256:621e2e5812b691d4f244638d693e640f188bacbb9bc793ddd46837cea0503dd2", size = 13455262, upload-time = "2025-10-02T19:29:26.882Z" }, - { url = "https://files.pythonhosted.org/packages/fe/72/7b83242b26627a00e3af70d0394d68f8f02750d642567af12983031777fc/ruff-0.13.3-py3-none-win_arm64.whl", hash = "sha256:9e9e9d699841eaf4c2c798fa783df2fabc680b72059a02ca0ed81c460bc58330", size = 12538484, upload-time = "2025-10-02T19:29:28.951Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/c7/8e/f9f9ca747fea8e3ac954e3690d4698c9737c23b51731d02df999c150b1c9/ruff-0.13.3.tar.gz", hash = "sha256:5b0ba0db740eefdfbcce4299f49e9eaefc643d4d007749d77d047c2bab19908e", size = 5438533 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/33/8f7163553481466a92656d35dea9331095122bb84cf98210bef597dd2ecd/ruff-0.13.3-py3-none-linux_armv6l.whl", hash = "sha256:311860a4c5e19189c89d035638f500c1e191d283d0cc2f1600c8c80d6dcd430c", size = 12484040 }, + { url = "https://files.pythonhosted.org/packages/b0/b5/4a21a4922e5dd6845e91896b0d9ef493574cbe061ef7d00a73c61db531af/ruff-0.13.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2bdad6512fb666b40fcadb65e33add2b040fc18a24997d2e47fee7d66f7fcae2", size = 13122975 }, + { url = "https://files.pythonhosted.org/packages/40/90/15649af836d88c9f154e5be87e64ae7d2b1baa5a3ef317cb0c8fafcd882d/ruff-0.13.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fc6fa4637284708d6ed4e5e970d52fc3b76a557d7b4e85a53013d9d201d93286", size = 12346621 }, + { url = "https://files.pythonhosted.org/packages/a5/42/bcbccb8141305f9a6d3f72549dd82d1134299177cc7eaf832599700f95a7/ruff-0.13.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c9e6469864f94a98f412f20ea143d547e4c652f45e44f369d7b74ee78185838", size = 12574408 }, + { url = "https://files.pythonhosted.org/packages/ce/19/0f3681c941cdcfa2d110ce4515624c07a964dc315d3100d889fcad3bfc9e/ruff-0.13.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5bf62b705f319476c78891e0e97e965b21db468b3c999086de8ffb0d40fd2822", size = 12285330 }, + { url = "https://files.pythonhosted.org/packages/10/f8/387976bf00d126b907bbd7725219257feea58650e6b055b29b224d8cb731/ruff-0.13.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cc1abed87ce40cb07ee0667ce99dbc766c9f519eabfd948ed87295d8737c60", size = 13980815 }, + { url = "https://files.pythonhosted.org/packages/0c/a6/7c8ec09d62d5a406e2b17d159e4817b63c945a8b9188a771193b7e1cc0b5/ruff-0.13.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4fb75e7c402d504f7a9a259e0442b96403fa4a7310ffe3588d11d7e170d2b1e3", size = 14987733 }, + { url = "https://files.pythonhosted.org/packages/97/e5/f403a60a12258e0fd0c2195341cfa170726f254c788673495d86ab5a9a9d/ruff-0.13.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b951f9d9afb39330b2bdd2dd144ce1c1335881c277837ac1b50bfd99985ed3", size = 14439848 }, + { url = "https://files.pythonhosted.org/packages/39/49/3de381343e89364c2334c9f3268b0349dc734fc18b2d99a302d0935c8345/ruff-0.13.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6052f8088728898e0a449f0dde8fafc7ed47e4d878168b211977e3e7e854f662", size = 13421890 }, + { url = "https://files.pythonhosted.org/packages/ab/b5/c0feca27d45ae74185a6bacc399f5d8920ab82df2d732a17213fb86a2c4c/ruff-0.13.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc742c50f4ba72ce2a3be362bd359aef7d0d302bf7637a6f942eaa763bd292af", size = 13444870 }, + { url = "https://files.pythonhosted.org/packages/50/a1/b655298a1f3fda4fdc7340c3f671a4b260b009068fbeb3e4e151e9e3e1bf/ruff-0.13.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8e5640349493b378431637019366bbd73c927e515c9c1babfea3e932f5e68e1d", size = 13691599 }, + { url = "https://files.pythonhosted.org/packages/32/b0/a8705065b2dafae007bcae21354e6e2e832e03eb077bb6c8e523c2becb92/ruff-0.13.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b139f638a80eae7073c691a5dd8d581e0ba319540be97c343d60fb12949c8d0", size = 12421893 }, + { url = "https://files.pythonhosted.org/packages/0d/1e/cbe7082588d025cddbb2f23e6dfef08b1a2ef6d6f8328584ad3015b5cebd/ruff-0.13.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6b547def0a40054825de7cfa341039ebdfa51f3d4bfa6a0772940ed351d2746c", size = 12267220 }, + { url = "https://files.pythonhosted.org/packages/a5/99/4086f9c43f85e0755996d09bdcb334b6fee9b1eabdf34e7d8b877fadf964/ruff-0.13.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9cc48a3564423915c93573f1981d57d101e617839bef38504f85f3677b3a0a3e", size = 13177818 }, + { url = "https://files.pythonhosted.org/packages/9b/de/7b5db7e39947d9dc1c5f9f17b838ad6e680527d45288eeb568e860467010/ruff-0.13.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1a993b17ec03719c502881cb2d5f91771e8742f2ca6de740034433a97c561989", size = 13618715 }, + { url = "https://files.pythonhosted.org/packages/28/d3/bb25ee567ce2f61ac52430cf99f446b0e6d49bdfa4188699ad005fdd16aa/ruff-0.13.3-py3-none-win32.whl", hash = "sha256:f14e0d1fe6460f07814d03c6e32e815bff411505178a1f539a38f6097d3e8ee3", size = 12334488 }, + { url = "https://files.pythonhosted.org/packages/cf/49/12f5955818a1139eed288753479ba9d996f6ea0b101784bb1fe6977ec128/ruff-0.13.3-py3-none-win_amd64.whl", hash = "sha256:621e2e5812b691d4f244638d693e640f188bacbb9bc793ddd46837cea0503dd2", size = 13455262 }, + { url = "https://files.pythonhosted.org/packages/fe/72/7b83242b26627a00e3af70d0394d68f8f02750d642567af12983031777fc/ruff-0.13.3-py3-none-win_arm64.whl", hash = "sha256:9e9e9d699841eaf4c2c798fa783df2fabc680b72059a02ca0ed81c460bc58330", size = 12538484 }, ] [[package]] name = "schema" version = "0.7.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/01/0ea2e66bad2f13271e93b729c653747614784d3ebde219679e41ccdceecd/schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807", size = 44245, upload-time = "2024-05-04T10:56:17.318Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/01/0ea2e66bad2f13271e93b729c653747614784d3ebde219679e41ccdceecd/schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807", size = 44245 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/1b/81855a88c6db2b114d5b2e9f96339190d5ee4d1b981d217fa32127bb00e0/schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde", size = 18632, upload-time = "2024-05-04T10:56:13.86Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1b/81855a88c6db2b114d5b2e9f96339190d5ee4d1b981d217fa32127bb00e0/schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde", size = 18632 }, ] [[package]] @@ -4255,26 +4282,26 @@ dependencies = [ { name = "scipy", version = "1.16.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938, upload-time = "2025-09-09T08:20:24.327Z" }, - { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818, upload-time = "2025-09-09T08:20:26.845Z" }, - { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969, upload-time = "2025-09-09T08:20:29.329Z" }, - { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424, upload-time = "2025-09-09T08:20:36.776Z" }, - { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234, upload-time = "2025-09-09T08:20:38.957Z" }, - { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244, upload-time = "2025-09-09T08:20:41.166Z" }, - { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381, upload-time = "2025-09-09T08:20:47.982Z" }, - { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296, upload-time = "2025-09-09T08:20:50.366Z" }, - { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256, upload-time = "2025-09-09T08:20:52.627Z" }, - { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180, upload-time = "2025-09-09T08:20:59.671Z" }, - { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660, upload-time = "2025-09-09T08:21:01.71Z" }, - { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057, upload-time = "2025-09-09T08:21:04.234Z" }, - { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094, upload-time = "2025-09-09T08:21:11.486Z" }, - { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436, upload-time = "2025-09-09T08:21:13.602Z" }, - { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749, upload-time = "2025-09-09T08:21:15.96Z" }, - { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236, upload-time = "2025-09-09T08:21:22.645Z" }, - { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593, upload-time = "2025-09-09T08:21:24.65Z" }, - { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007, upload-time = "2025-09-09T08:21:26.713Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938 }, + { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818 }, + { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969 }, + { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424 }, + { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234 }, + { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244 }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381 }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296 }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256 }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180 }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660 }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057 }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094 }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436 }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749 }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236 }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593 }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007 }, ] [[package]] @@ -4287,53 +4314,53 @@ resolution-markers = [ dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, - { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, - { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, - { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, - { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, - { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, - { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, - { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, - { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, - { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, - { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, - { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, - { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, - { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, - { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, - { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, - { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, - { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, - { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, - { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, - { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, - { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, - { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, ] [[package]] @@ -4349,152 +4376,152 @@ resolution-markers = [ dependencies = [ { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599, upload-time = "2025-09-11T17:48:08.271Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/ef/37ed4b213d64b48422df92560af7300e10fe30b5d665dd79932baebee0c6/scipy-1.16.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ab88ea43a57da1af33292ebd04b417e8e2eaf9d5aa05700be8d6e1b6501cd92", size = 36619956, upload-time = "2025-09-11T17:39:20.5Z" }, - { url = "https://files.pythonhosted.org/packages/85/ab/5c2eba89b9416961a982346a4d6a647d78c91ec96ab94ed522b3b6baf444/scipy-1.16.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c95e96c7305c96ede73a7389f46ccd6c659c4da5ef1b2789466baeaed3622b6e", size = 28931117, upload-time = "2025-09-11T17:39:29.06Z" }, - { url = "https://files.pythonhosted.org/packages/80/d1/eed51ab64d227fe60229a2d57fb60ca5898cfa50ba27d4f573e9e5f0b430/scipy-1.16.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:87eb178db04ece7c698220d523c170125dbffebb7af0345e66c3554f6f60c173", size = 20921997, upload-time = "2025-09-11T17:39:34.892Z" }, - { url = "https://files.pythonhosted.org/packages/be/7c/33ea3e23bbadde96726edba6bf9111fb1969d14d9d477ffa202c67bec9da/scipy-1.16.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:4e409eac067dcee96a57fbcf424c13f428037827ec7ee3cb671ff525ca4fc34d", size = 23523374, upload-time = "2025-09-11T17:39:40.846Z" }, - { url = "https://files.pythonhosted.org/packages/96/0b/7399dc96e1e3f9a05e258c98d716196a34f528eef2ec55aad651ed136d03/scipy-1.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e574be127bb760f0dad24ff6e217c80213d153058372362ccb9555a10fc5e8d2", size = 33583702, upload-time = "2025-09-11T17:39:49.011Z" }, - { url = "https://files.pythonhosted.org/packages/1a/bc/a5c75095089b96ea72c1bd37a4497c24b581ec73db4ef58ebee142ad2d14/scipy-1.16.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5db5ba6188d698ba7abab982ad6973265b74bb40a1efe1821b58c87f73892b9", size = 35883427, upload-time = "2025-09-11T17:39:57.406Z" }, - { url = "https://files.pythonhosted.org/packages/ab/66/e25705ca3d2b87b97fe0a278a24b7f477b4023a926847935a1a71488a6a6/scipy-1.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec6e74c4e884104ae006d34110677bfe0098203a3fec2f3faf349f4cb05165e3", size = 36212940, upload-time = "2025-09-11T17:40:06.013Z" }, - { url = "https://files.pythonhosted.org/packages/d6/fd/0bb911585e12f3abdd603d721d83fc1c7492835e1401a0e6d498d7822b4b/scipy-1.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:912f46667d2d3834bc3d57361f854226475f695eb08c08a904aadb1c936b6a88", size = 38865092, upload-time = "2025-09-11T17:40:15.143Z" }, - { url = "https://files.pythonhosted.org/packages/d6/73/c449a7d56ba6e6f874183759f8483cde21f900a8be117d67ffbb670c2958/scipy-1.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:91e9e8a37befa5a69e9cacbe0bcb79ae5afb4a0b130fd6db6ee6cc0d491695fa", size = 38687626, upload-time = "2025-09-11T17:40:24.041Z" }, - { url = "https://files.pythonhosted.org/packages/68/72/02f37316adf95307f5d9e579023c6899f89ff3a051fa079dbd6faafc48e5/scipy-1.16.2-cp311-cp311-win_arm64.whl", hash = "sha256:f3bf75a6dcecab62afde4d1f973f1692be013110cad5338007927db8da73249c", size = 25503506, upload-time = "2025-09-11T17:40:30.703Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259, upload-time = "2025-09-11T17:40:39.329Z" }, - { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976, upload-time = "2025-09-11T17:40:46.82Z" }, - { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905, upload-time = "2025-09-11T17:40:52.545Z" }, - { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066, upload-time = "2025-09-11T17:40:59.014Z" }, - { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407, upload-time = "2025-09-11T17:41:06.796Z" }, - { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281, upload-time = "2025-09-11T17:41:15.055Z" }, - { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222, upload-time = "2025-09-11T17:41:23.868Z" }, - { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586, upload-time = "2025-09-11T17:41:31.021Z" }, - { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641, upload-time = "2025-09-11T17:41:36.61Z" }, - { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070, upload-time = "2025-09-11T17:41:41.3Z" }, - { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856, upload-time = "2025-09-11T17:41:47.695Z" }, - { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626, upload-time = "2025-09-11T17:41:52.642Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689, upload-time = "2025-09-11T17:41:57.886Z" }, - { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151, upload-time = "2025-09-11T17:42:02.303Z" }, - { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824, upload-time = "2025-09-11T17:42:07.549Z" }, - { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881, upload-time = "2025-09-11T17:42:13.255Z" }, - { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219, upload-time = "2025-09-11T17:42:18.765Z" }, - { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147, upload-time = "2025-09-11T17:42:25.177Z" }, - { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766, upload-time = "2025-09-11T17:43:25.342Z" }, - { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169, upload-time = "2025-09-11T17:43:30.198Z" }, - { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682, upload-time = "2025-09-11T17:42:30.677Z" }, - { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926, upload-time = "2025-09-11T17:42:35.845Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152, upload-time = "2025-09-11T17:42:40.07Z" }, - { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410, upload-time = "2025-09-11T17:42:44.313Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880, upload-time = "2025-09-11T17:42:49.325Z" }, - { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425, upload-time = "2025-09-11T17:42:54.711Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622, upload-time = "2025-09-11T17:43:00.375Z" }, - { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985, upload-time = "2025-09-11T17:43:06.661Z" }, - { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367, upload-time = "2025-09-11T17:43:14.44Z" }, - { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992, upload-time = "2025-09-11T17:43:19.745Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109, upload-time = "2025-09-11T17:43:35.713Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110, upload-time = "2025-09-11T17:43:40.814Z" }, - { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110, upload-time = "2025-09-11T17:43:44.981Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014, upload-time = "2025-09-11T17:43:49.074Z" }, - { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155, upload-time = "2025-09-11T17:43:54.661Z" }, - { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174, upload-time = "2025-09-11T17:44:00.101Z" }, - { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752, upload-time = "2025-09-11T17:44:05.619Z" }, - { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010, upload-time = "2025-09-11T17:44:11.322Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061, upload-time = "2025-09-11T17:45:09.814Z" }, - { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914, upload-time = "2025-09-11T17:45:14.73Z" }, - { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193, upload-time = "2025-09-11T17:44:16.757Z" }, - { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172, upload-time = "2025-09-11T17:44:21.783Z" }, - { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326, upload-time = "2025-09-11T17:44:25.982Z" }, - { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036, upload-time = "2025-09-11T17:44:30.527Z" }, - { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341, upload-time = "2025-09-11T17:44:35.981Z" }, - { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840, upload-time = "2025-09-11T17:44:41.76Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716, upload-time = "2025-09-11T17:44:47.316Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088, upload-time = "2025-09-11T17:44:53.011Z" }, - { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455, upload-time = "2025-09-11T17:44:58.899Z" }, - { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374, upload-time = "2025-09-11T17:45:03.45Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/ef/37ed4b213d64b48422df92560af7300e10fe30b5d665dd79932baebee0c6/scipy-1.16.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ab88ea43a57da1af33292ebd04b417e8e2eaf9d5aa05700be8d6e1b6501cd92", size = 36619956 }, + { url = "https://files.pythonhosted.org/packages/85/ab/5c2eba89b9416961a982346a4d6a647d78c91ec96ab94ed522b3b6baf444/scipy-1.16.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c95e96c7305c96ede73a7389f46ccd6c659c4da5ef1b2789466baeaed3622b6e", size = 28931117 }, + { url = "https://files.pythonhosted.org/packages/80/d1/eed51ab64d227fe60229a2d57fb60ca5898cfa50ba27d4f573e9e5f0b430/scipy-1.16.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:87eb178db04ece7c698220d523c170125dbffebb7af0345e66c3554f6f60c173", size = 20921997 }, + { url = "https://files.pythonhosted.org/packages/be/7c/33ea3e23bbadde96726edba6bf9111fb1969d14d9d477ffa202c67bec9da/scipy-1.16.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:4e409eac067dcee96a57fbcf424c13f428037827ec7ee3cb671ff525ca4fc34d", size = 23523374 }, + { url = "https://files.pythonhosted.org/packages/96/0b/7399dc96e1e3f9a05e258c98d716196a34f528eef2ec55aad651ed136d03/scipy-1.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e574be127bb760f0dad24ff6e217c80213d153058372362ccb9555a10fc5e8d2", size = 33583702 }, + { url = "https://files.pythonhosted.org/packages/1a/bc/a5c75095089b96ea72c1bd37a4497c24b581ec73db4ef58ebee142ad2d14/scipy-1.16.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f5db5ba6188d698ba7abab982ad6973265b74bb40a1efe1821b58c87f73892b9", size = 35883427 }, + { url = "https://files.pythonhosted.org/packages/ab/66/e25705ca3d2b87b97fe0a278a24b7f477b4023a926847935a1a71488a6a6/scipy-1.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec6e74c4e884104ae006d34110677bfe0098203a3fec2f3faf349f4cb05165e3", size = 36212940 }, + { url = "https://files.pythonhosted.org/packages/d6/fd/0bb911585e12f3abdd603d721d83fc1c7492835e1401a0e6d498d7822b4b/scipy-1.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:912f46667d2d3834bc3d57361f854226475f695eb08c08a904aadb1c936b6a88", size = 38865092 }, + { url = "https://files.pythonhosted.org/packages/d6/73/c449a7d56ba6e6f874183759f8483cde21f900a8be117d67ffbb670c2958/scipy-1.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:91e9e8a37befa5a69e9cacbe0bcb79ae5afb4a0b130fd6db6ee6cc0d491695fa", size = 38687626 }, + { url = "https://files.pythonhosted.org/packages/68/72/02f37316adf95307f5d9e579023c6899f89ff3a051fa079dbd6faafc48e5/scipy-1.16.2-cp311-cp311-win_arm64.whl", hash = "sha256:f3bf75a6dcecab62afde4d1f973f1692be013110cad5338007927db8da73249c", size = 25503506 }, + { url = "https://files.pythonhosted.org/packages/b7/8d/6396e00db1282279a4ddd507c5f5e11f606812b608ee58517ce8abbf883f/scipy-1.16.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:89d6c100fa5c48472047632e06f0876b3c4931aac1f4291afc81a3644316bb0d", size = 36646259 }, + { url = "https://files.pythonhosted.org/packages/3b/93/ea9edd7e193fceb8eef149804491890bde73fb169c896b61aa3e2d1e4e77/scipy-1.16.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ca748936cd579d3f01928b30a17dc474550b01272d8046e3e1ee593f23620371", size = 28888976 }, + { url = "https://files.pythonhosted.org/packages/91/4d/281fddc3d80fd738ba86fd3aed9202331180b01e2c78eaae0642f22f7e83/scipy-1.16.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:fac4f8ce2ddb40e2e3d0f7ec36d2a1e7f92559a2471e59aec37bd8d9de01fec0", size = 20879905 }, + { url = "https://files.pythonhosted.org/packages/69/40/b33b74c84606fd301b2915f0062e45733c6ff5708d121dd0deaa8871e2d0/scipy-1.16.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:033570f1dcefd79547a88e18bccacff025c8c647a330381064f561d43b821232", size = 23553066 }, + { url = "https://files.pythonhosted.org/packages/55/a7/22c739e2f21a42cc8f16bc76b47cff4ed54fbe0962832c589591c2abec34/scipy-1.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea3421209bf00c8a5ef2227de496601087d8f638a2363ee09af059bd70976dc1", size = 33336407 }, + { url = "https://files.pythonhosted.org/packages/53/11/a0160990b82999b45874dc60c0c183d3a3a969a563fffc476d5a9995c407/scipy-1.16.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f66bd07ba6f84cd4a380b41d1bf3c59ea488b590a2ff96744845163309ee8e2f", size = 35673281 }, + { url = "https://files.pythonhosted.org/packages/96/53/7ef48a4cfcf243c3d0f1643f5887c81f29fdf76911c4e49331828e19fc0a/scipy-1.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e9feab931bd2aea4a23388c962df6468af3d808ddf2d40f94a81c5dc38f32ef", size = 36004222 }, + { url = "https://files.pythonhosted.org/packages/49/7f/71a69e0afd460049d41c65c630c919c537815277dfea214031005f474d78/scipy-1.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03dfc75e52f72cf23ec2ced468645321407faad8f0fe7b1f5b49264adbc29cb1", size = 38664586 }, + { url = "https://files.pythonhosted.org/packages/34/95/20e02ca66fb495a95fba0642fd48e0c390d0ece9b9b14c6e931a60a12dea/scipy-1.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:0ce54e07bbb394b417457409a64fd015be623f36e330ac49306433ffe04bc97e", size = 38550641 }, + { url = "https://files.pythonhosted.org/packages/92/ad/13646b9beb0a95528ca46d52b7babafbe115017814a611f2065ee4e61d20/scipy-1.16.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a8ffaa4ac0df81a0b94577b18ee079f13fecdb924df3328fc44a7dc5ac46851", size = 25456070 }, + { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856 }, + { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626 }, + { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689 }, + { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151 }, + { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824 }, + { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881 }, + { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219 }, + { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147 }, + { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766 }, + { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169 }, + { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682 }, + { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926 }, + { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152 }, + { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410 }, + { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880 }, + { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425 }, + { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622 }, + { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985 }, + { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367 }, + { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992 }, + { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109 }, + { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110 }, + { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110 }, + { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014 }, + { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155 }, + { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174 }, + { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752 }, + { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010 }, + { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061 }, + { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914 }, + { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193 }, + { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172 }, + { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326 }, + { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036 }, + { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341 }, + { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840 }, + { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716 }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088 }, + { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455 }, + { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374 }, ] [[package]] name = "selectolax" version = "0.3.29" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/b9/b5a23e29d5e54c590eaad18bdbb1ced13b869b111e03d12ee0ae9eecf9b8/selectolax-0.3.29.tar.gz", hash = "sha256:28696fa4581765c705e15d05dfba464334f5f9bcb3eac9f25045f815aec6fbc1", size = 4691626, upload-time = "2025-04-30T15:17:37.98Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/8f/bf3d58ecc0e187806299324e2ad77646e837ff20400880f6fc0cbd14fb66/selectolax-0.3.29-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:85aeae54f055cf5451828a21fbfecac99b8b5c27ec29fd10725b631593a7c9a3", size = 3643657, upload-time = "2025-04-30T15:15:40.734Z" }, - { url = "https://files.pythonhosted.org/packages/de/b0/6d90a4d0eacb8253d88a9fcbcb8758b667900f45dcdb4a11c5fbd0d31599/selectolax-0.3.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ff48efe4364c8148a553a4105773a0accee9cc25e0f2a40ddac44d18a5a3000", size = 2089380, upload-time = "2025-04-30T15:15:42.928Z" }, - { url = "https://files.pythonhosted.org/packages/f4/21/394b51998ef99f13f98da063fc71b8edf7191bb30aca06bcbc8a55d5a9ad/selectolax-0.3.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25cfccfefc41361ab8a07f15a224524a4a8b77dfa7d253b34bbd397e45856734", size = 5505065, upload-time = "2025-04-30T15:15:44.986Z" }, - { url = "https://files.pythonhosted.org/packages/dd/57/e38775b672f910e80742cbf7c3def5c670c1b6f9b05e8587b2fa8dc044c3/selectolax-0.3.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5c3523ad5199a4fb9b95b6e24ff9222d3605023ca394b23f7dd910e7536daf", size = 5529205, upload-time = "2025-04-30T15:15:47.149Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0f/f6e3030107b486b6a4870f8471a675d435c4c34b8f9de3374652ed53004b/selectolax-0.3.29-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfb803d6bbe0ef3c8847cf5a01167cc428c0d9179946e1c994cc6178b5332d1a", size = 5146713, upload-time = "2025-04-30T15:15:49.332Z" }, - { url = "https://files.pythonhosted.org/packages/d8/8d/b4fd119c216e8615ca6747f8f336643572178241921f33f5ffa4b074dc44/selectolax-0.3.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:db734ba4ef44fa3b57ad9374fd7ccfc7815c0ae5cfcbd5ee25fe8587092618d1", size = 5416352, upload-time = "2025-04-30T15:15:50.909Z" }, - { url = "https://files.pythonhosted.org/packages/d7/e7/94e694d14ae44bddc0d9b144647d5adbec0210d8e2c57d72ad9a133d9469/selectolax-0.3.29-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2bfe4327215a20af4197c5b7e3729a9552fb324bb57250dc7e7abfa0f848a463", size = 5140689, upload-time = "2025-04-30T15:15:52.477Z" }, - { url = "https://files.pythonhosted.org/packages/90/62/79ba965daa1f12e5477b2ec08b289f8289dfc705928b08923d9c4b60c867/selectolax-0.3.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a98c3f3d8fffb175456cb06096bc78103ddf6a209bea6392e0e4ea4e25aca71", size = 5481428, upload-time = "2025-04-30T15:15:54.371Z" }, - { url = "https://files.pythonhosted.org/packages/82/3c/46c1f0b739add89d0ef720ad521afaaf31b07a39f781ef9e59c7b5ecef44/selectolax-0.3.29-cp310-cp310-win32.whl", hash = "sha256:394d356ea611a7853c13c910a57c1a80a8356f9c920aa8168b3f8aaa62e433d8", size = 1702100, upload-time = "2025-04-30T15:15:55.833Z" }, - { url = "https://files.pythonhosted.org/packages/75/62/03350ed454fe26aef5580df498d45ace9f26ca6af1640ae681a6af1f5cdf/selectolax-0.3.29-cp310-cp310-win_amd64.whl", hash = "sha256:edd2760699c60dde7d847aebd81f02035f7bddcd0ad3db8e73326dfc84a2dc8f", size = 1807811, upload-time = "2025-04-30T15:15:57.243Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5d/ca72f7adddae4b2b128394a7559739a6a12c156d29b55968cfcfe07fac4d/selectolax-0.3.29-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d6a1cd0518fa7656ea1683c4b2d3b5a98306753f364da9f673517847e1680a3e", size = 3649215, upload-time = "2025-04-30T15:15:59.57Z" }, - { url = "https://files.pythonhosted.org/packages/08/c6/ca984f90b12fb10790cc56c2670f1b5f09884ed2f2012a219094b38cbcb4/selectolax-0.3.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e5354d805dd76b4b38002f58e6ae2e7b429ac311bf3601992a6662d2bc86911", size = 2091848, upload-time = "2025-04-30T15:16:01.73Z" }, - { url = "https://files.pythonhosted.org/packages/98/7f/c999ae6d9bfbaac3e8dea3dbb5ca6bdf61c220828e80a6c339e89f9db777/selectolax-0.3.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7073e3bcdc60ebdb5f8777c79b465471ec000ab556134da4e00f037d3321a2ec", size = 5638593, upload-time = "2025-04-30T15:16:03.594Z" }, - { url = "https://files.pythonhosted.org/packages/d6/32/ffd89376a888c24ecaf01fcffc5fe97b82ae03ab163158f51a559f1ebad5/selectolax-0.3.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47587db7cef411d22f8224cf2926aacdb326c4c838d386035229f16ccc2d8d26", size = 5668207, upload-time = "2025-04-30T15:16:05.564Z" }, - { url = "https://files.pythonhosted.org/packages/3a/5c/2de0c7b8be75ad52d44706c67946181b972f27641ab4f6a1f27f46d2a603/selectolax-0.3.29-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21de62b5093b1cb6c5d4cab0bef5f708b9ee1483b640d42be9d955becfcd287a", size = 5276654, upload-time = "2025-04-30T15:16:07.143Z" }, - { url = "https://files.pythonhosted.org/packages/29/29/152bb745b24072d3eecd3b395c756e74763111b9bbd265604f5b96b9a1aa/selectolax-0.3.29-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:af5cd03298cd75cb0fbf712d6ae4f8aca9c13a226d2821ca82f51cc9b33b032f", size = 5543731, upload-time = "2025-04-30T15:16:09.733Z" }, - { url = "https://files.pythonhosted.org/packages/04/1d/df65baaf16ece393f9f1a7c55f015510634adbb163ce72adcafaddf5cf9c/selectolax-0.3.29-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3f58dca53d2d3dc18dfd2cb9210a5625f32598db24e3f857f5be58f21a8f3b88", size = 5275005, upload-time = "2025-04-30T15:16:11.958Z" }, - { url = "https://files.pythonhosted.org/packages/5d/74/e56fd6f9b3087947b812f3862df3265bf5e21396d9673d076e999b1086cf/selectolax-0.3.29-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a6d8e02c6b9ba951d7b5a5dd2788a1d4bbdedc89782a4de165f1a87c4168ac", size = 5617441, upload-time = "2025-04-30T15:16:14.15Z" }, - { url = "https://files.pythonhosted.org/packages/63/d6/243049029bfc937b9f02faf4a4494e693575046414a475bf28ed9632b768/selectolax-0.3.29-cp311-cp311-win32.whl", hash = "sha256:912a1fc03157ebd066d8f59ae9ca2412ef95c7101a51590327c23071b02c97c7", size = 1701370, upload-time = "2025-04-30T15:16:16.339Z" }, - { url = "https://files.pythonhosted.org/packages/c9/7f/baba8c5ce941c8cbd2dfb0c9f2253ba2d8c2d5d0fddda4f5a87eceb2484f/selectolax-0.3.29-cp311-cp311-win_amd64.whl", hash = "sha256:a3d44a295416b79815d2858ed4ccb71bf3b63087483a5d3705daa837c9dcf44d", size = 1808251, upload-time = "2025-04-30T15:16:18.289Z" }, - { url = "https://files.pythonhosted.org/packages/30/ac/ca4332eecc19124782f6f0d7cb28c331da2e9d9cf25287ba2b3b6a00cea1/selectolax-0.3.29-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6d3f373efd1db18ac9b2222de2668aaa366a1f0b560241eab128f3ca68e8add1", size = 3656166, upload-time = "2025-04-30T15:16:19.907Z" }, - { url = "https://files.pythonhosted.org/packages/b8/46/2dcae03a94f80f3e0d339c149de8110b5abe1230668b015fd338d9e71a27/selectolax-0.3.29-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:97b9971bb37b54ef4440134f22792d15c9ee12d890a526a7fe0b376502240143", size = 2095991, upload-time = "2025-04-30T15:16:21.654Z" }, - { url = "https://files.pythonhosted.org/packages/1e/bd/95f15396e5f30898227d84a7ec6a39d9a9b34005f0e9f8f38e7fee21ab66/selectolax-0.3.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd99ff0f5a6c017c471635d4ee45b61d25f24689331e407147b2cf5e36892480", size = 5844493, upload-time = "2025-04-30T15:16:23.268Z" }, - { url = "https://files.pythonhosted.org/packages/36/25/64c60da9aec81f2992355b0a3ce00ea1ed99e6f5499868016d6972bd4948/selectolax-0.3.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8377c317bf1d5fd6ccc56dfb5a0928bbcbea3e800b7af54761cfbbb99dc94cb9", size = 5881062, upload-time = "2025-04-30T15:16:24.891Z" }, - { url = "https://files.pythonhosted.org/packages/b6/81/94105217f91f7c6a98ac3164210cba0c6aa8da91cb85405292a6d70e39c3/selectolax-0.3.29-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5388c56456272b2c241fc1906db9cc993984cafdad936cb5e061e3af0c44144e", size = 5470368, upload-time = "2025-04-30T15:16:26.457Z" }, - { url = "https://files.pythonhosted.org/packages/51/6e/40bc259f13e5d3dd0bb8ddd1d55ef099244db2568ffb82fd9d489984d61a/selectolax-0.3.29-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9e4690894f406863e25ba49da27e1a6fda9bfc21b0b315c399d3093be080e81", size = 5693476, upload-time = "2025-04-30T15:16:28.386Z" }, - { url = "https://files.pythonhosted.org/packages/58/bd/2668ee1d5471ad88daf83ca484515ba46774fc9c951d6c4c0beffea89952/selectolax-0.3.29-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:deeab93386b6c9a75052515f5b9e7e3dd623c585871c0c2b3126970ff902603b", size = 5449747, upload-time = "2025-04-30T15:16:30.626Z" }, - { url = "https://files.pythonhosted.org/packages/a1/b5/1c61839ae5af70a8291c643982a99f051b543df90b220b98db1b26bd4899/selectolax-0.3.29-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6abdd8357f1c105c1add01a9f0373511fa832548b2e2778b00a8ba2a4508d6ed", size = 5786843, upload-time = "2025-04-30T15:16:32.231Z" }, - { url = "https://files.pythonhosted.org/packages/67/08/ca42c100ab90168c123e6b521e38cb7618b697a693fdb77e42dabb0670fd/selectolax-0.3.29-cp312-cp312-win32.whl", hash = "sha256:9c969626b2295702076f50aac91e44c3bba639fa2e1a612bf6ae254bf29b4d57", size = 1697859, upload-time = "2025-04-30T15:16:33.659Z" }, - { url = "https://files.pythonhosted.org/packages/5c/22/9524af51d950cc718bd4406f3bed05acbfcb321a4a308ec85b96ccdaa1ef/selectolax-0.3.29-cp312-cp312-win_amd64.whl", hash = "sha256:e7f4cc1b7ce9691559decfd5db7cc500e71a9f6ccfe76c054f284c184a1d1dc9", size = 1804145, upload-time = "2025-04-30T15:16:35.12Z" }, - { url = "https://files.pythonhosted.org/packages/c0/a7/083a00aa9cb6bef0317baba4269841c366652558d77189275bed2da6aa81/selectolax-0.3.29-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e3112f05a34bf36d36ecc51520b1d98c4667b54a3f123dffef5072273e89a360", size = 3651407, upload-time = "2025-04-30T15:16:37.282Z" }, - { url = "https://files.pythonhosted.org/packages/7e/cd/6c89ac27961ef5f5e9b40eda0d0653b9c95c93485fb8a554bf093eac1c77/selectolax-0.3.29-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:38462ae369897f71da287f1282079c11f1b878b99a4d1d509d1116ce05226d88", size = 2092649, upload-time = "2025-04-30T15:16:38.817Z" }, - { url = "https://files.pythonhosted.org/packages/3e/12/82710124b7b52613fdb9d5c14494a41785eb83e1c93ec7e1d1814c2ce292/selectolax-0.3.29-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdd1e63735f2fb8485fb6b9f4fe30d6c030930f438f46a4a62bd9886ab3c7fd9", size = 5821738, upload-time = "2025-04-30T15:16:40.747Z" }, - { url = "https://files.pythonhosted.org/packages/8b/08/8ceb3eb7fee9743026a4481fccb771f257c82b2c853a1a30271902234eab/selectolax-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea52e0c128e8e89f98ab0ccaabbc853677de5730729a3351da595976131b66e0", size = 5856069, upload-time = "2025-04-30T15:16:42.496Z" }, - { url = "https://files.pythonhosted.org/packages/47/6c/ec2b7aff0f6202e4157415d76bd588108cc518374bf53afa81c122691780/selectolax-0.3.29-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0933659b4250b91317ccd78167e6804389cdaf7ed86c5d034b058a550d23110f", size = 5443255, upload-time = "2025-04-30T15:16:44.083Z" }, - { url = "https://files.pythonhosted.org/packages/cd/90/d5fea46ff191d02c2380a779b119ea6799751b79fcddb2bb230b21b38fc5/selectolax-0.3.29-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0c9005e9089a6b0c6fb6a9f691ddbbb10a3a23ebeff54393980340f3dbcdb99", size = 5637529, upload-time = "2025-04-30T15:16:46.175Z" }, - { url = "https://files.pythonhosted.org/packages/9d/83/7f876a515f5af31f7b948cf10951be896fe6deeff2b9b713640c8ec82fd3/selectolax-0.3.29-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac940963c52f13cdf5d7266a979744949b660d367ce669efa073b557f6e09a18", size = 5379121, upload-time = "2025-04-30T15:16:47.909Z" }, - { url = "https://files.pythonhosted.org/packages/57/cb/7dc739a484b1a17ccf92a23dfe558ae615c232bd81e78a72049c25d1ff66/selectolax-0.3.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:484274f73839f9a143f4c13ce1b0a0123b5d64be22f967a1dc202a9a78687d67", size = 5727944, upload-time = "2025-04-30T15:16:49.52Z" }, - { url = "https://files.pythonhosted.org/packages/b7/09/95da4d2919d99a6090327390b84bc5440133196351e5e04c24cccda06cbb/selectolax-0.3.29-cp313-cp313-win32.whl", hash = "sha256:29e71fbd58b90d2920ef91a940680cb5331710fe397925ce9d10c3f2f086bf27", size = 1697529, upload-time = "2025-04-30T15:16:51.123Z" }, - { url = "https://files.pythonhosted.org/packages/0e/17/5a3951da22a4ad8f959088ddc370c68b28dad03190d91fcd137a52410fb9/selectolax-0.3.29-cp313-cp313-win_amd64.whl", hash = "sha256:e13befacff5f78102aa11465055ecb6d4b35f89663e36f271f2b506bcab14112", size = 1803334, upload-time = "2025-04-30T15:16:53.775Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/df/b9/b5a23e29d5e54c590eaad18bdbb1ced13b869b111e03d12ee0ae9eecf9b8/selectolax-0.3.29.tar.gz", hash = "sha256:28696fa4581765c705e15d05dfba464334f5f9bcb3eac9f25045f815aec6fbc1", size = 4691626 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/8f/bf3d58ecc0e187806299324e2ad77646e837ff20400880f6fc0cbd14fb66/selectolax-0.3.29-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:85aeae54f055cf5451828a21fbfecac99b8b5c27ec29fd10725b631593a7c9a3", size = 3643657 }, + { url = "https://files.pythonhosted.org/packages/de/b0/6d90a4d0eacb8253d88a9fcbcb8758b667900f45dcdb4a11c5fbd0d31599/selectolax-0.3.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ff48efe4364c8148a553a4105773a0accee9cc25e0f2a40ddac44d18a5a3000", size = 2089380 }, + { url = "https://files.pythonhosted.org/packages/f4/21/394b51998ef99f13f98da063fc71b8edf7191bb30aca06bcbc8a55d5a9ad/selectolax-0.3.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25cfccfefc41361ab8a07f15a224524a4a8b77dfa7d253b34bbd397e45856734", size = 5505065 }, + { url = "https://files.pythonhosted.org/packages/dd/57/e38775b672f910e80742cbf7c3def5c670c1b6f9b05e8587b2fa8dc044c3/selectolax-0.3.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5c3523ad5199a4fb9b95b6e24ff9222d3605023ca394b23f7dd910e7536daf", size = 5529205 }, + { url = "https://files.pythonhosted.org/packages/ec/0f/f6e3030107b486b6a4870f8471a675d435c4c34b8f9de3374652ed53004b/selectolax-0.3.29-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfb803d6bbe0ef3c8847cf5a01167cc428c0d9179946e1c994cc6178b5332d1a", size = 5146713 }, + { url = "https://files.pythonhosted.org/packages/d8/8d/b4fd119c216e8615ca6747f8f336643572178241921f33f5ffa4b074dc44/selectolax-0.3.29-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:db734ba4ef44fa3b57ad9374fd7ccfc7815c0ae5cfcbd5ee25fe8587092618d1", size = 5416352 }, + { url = "https://files.pythonhosted.org/packages/d7/e7/94e694d14ae44bddc0d9b144647d5adbec0210d8e2c57d72ad9a133d9469/selectolax-0.3.29-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2bfe4327215a20af4197c5b7e3729a9552fb324bb57250dc7e7abfa0f848a463", size = 5140689 }, + { url = "https://files.pythonhosted.org/packages/90/62/79ba965daa1f12e5477b2ec08b289f8289dfc705928b08923d9c4b60c867/selectolax-0.3.29-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a98c3f3d8fffb175456cb06096bc78103ddf6a209bea6392e0e4ea4e25aca71", size = 5481428 }, + { url = "https://files.pythonhosted.org/packages/82/3c/46c1f0b739add89d0ef720ad521afaaf31b07a39f781ef9e59c7b5ecef44/selectolax-0.3.29-cp310-cp310-win32.whl", hash = "sha256:394d356ea611a7853c13c910a57c1a80a8356f9c920aa8168b3f8aaa62e433d8", size = 1702100 }, + { url = "https://files.pythonhosted.org/packages/75/62/03350ed454fe26aef5580df498d45ace9f26ca6af1640ae681a6af1f5cdf/selectolax-0.3.29-cp310-cp310-win_amd64.whl", hash = "sha256:edd2760699c60dde7d847aebd81f02035f7bddcd0ad3db8e73326dfc84a2dc8f", size = 1807811 }, + { url = "https://files.pythonhosted.org/packages/2a/5d/ca72f7adddae4b2b128394a7559739a6a12c156d29b55968cfcfe07fac4d/selectolax-0.3.29-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d6a1cd0518fa7656ea1683c4b2d3b5a98306753f364da9f673517847e1680a3e", size = 3649215 }, + { url = "https://files.pythonhosted.org/packages/08/c6/ca984f90b12fb10790cc56c2670f1b5f09884ed2f2012a219094b38cbcb4/selectolax-0.3.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e5354d805dd76b4b38002f58e6ae2e7b429ac311bf3601992a6662d2bc86911", size = 2091848 }, + { url = "https://files.pythonhosted.org/packages/98/7f/c999ae6d9bfbaac3e8dea3dbb5ca6bdf61c220828e80a6c339e89f9db777/selectolax-0.3.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7073e3bcdc60ebdb5f8777c79b465471ec000ab556134da4e00f037d3321a2ec", size = 5638593 }, + { url = "https://files.pythonhosted.org/packages/d6/32/ffd89376a888c24ecaf01fcffc5fe97b82ae03ab163158f51a559f1ebad5/selectolax-0.3.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47587db7cef411d22f8224cf2926aacdb326c4c838d386035229f16ccc2d8d26", size = 5668207 }, + { url = "https://files.pythonhosted.org/packages/3a/5c/2de0c7b8be75ad52d44706c67946181b972f27641ab4f6a1f27f46d2a603/selectolax-0.3.29-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21de62b5093b1cb6c5d4cab0bef5f708b9ee1483b640d42be9d955becfcd287a", size = 5276654 }, + { url = "https://files.pythonhosted.org/packages/29/29/152bb745b24072d3eecd3b395c756e74763111b9bbd265604f5b96b9a1aa/selectolax-0.3.29-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:af5cd03298cd75cb0fbf712d6ae4f8aca9c13a226d2821ca82f51cc9b33b032f", size = 5543731 }, + { url = "https://files.pythonhosted.org/packages/04/1d/df65baaf16ece393f9f1a7c55f015510634adbb163ce72adcafaddf5cf9c/selectolax-0.3.29-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3f58dca53d2d3dc18dfd2cb9210a5625f32598db24e3f857f5be58f21a8f3b88", size = 5275005 }, + { url = "https://files.pythonhosted.org/packages/5d/74/e56fd6f9b3087947b812f3862df3265bf5e21396d9673d076e999b1086cf/selectolax-0.3.29-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a6d8e02c6b9ba951d7b5a5dd2788a1d4bbdedc89782a4de165f1a87c4168ac", size = 5617441 }, + { url = "https://files.pythonhosted.org/packages/63/d6/243049029bfc937b9f02faf4a4494e693575046414a475bf28ed9632b768/selectolax-0.3.29-cp311-cp311-win32.whl", hash = "sha256:912a1fc03157ebd066d8f59ae9ca2412ef95c7101a51590327c23071b02c97c7", size = 1701370 }, + { url = "https://files.pythonhosted.org/packages/c9/7f/baba8c5ce941c8cbd2dfb0c9f2253ba2d8c2d5d0fddda4f5a87eceb2484f/selectolax-0.3.29-cp311-cp311-win_amd64.whl", hash = "sha256:a3d44a295416b79815d2858ed4ccb71bf3b63087483a5d3705daa837c9dcf44d", size = 1808251 }, + { url = "https://files.pythonhosted.org/packages/30/ac/ca4332eecc19124782f6f0d7cb28c331da2e9d9cf25287ba2b3b6a00cea1/selectolax-0.3.29-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6d3f373efd1db18ac9b2222de2668aaa366a1f0b560241eab128f3ca68e8add1", size = 3656166 }, + { url = "https://files.pythonhosted.org/packages/b8/46/2dcae03a94f80f3e0d339c149de8110b5abe1230668b015fd338d9e71a27/selectolax-0.3.29-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:97b9971bb37b54ef4440134f22792d15c9ee12d890a526a7fe0b376502240143", size = 2095991 }, + { url = "https://files.pythonhosted.org/packages/1e/bd/95f15396e5f30898227d84a7ec6a39d9a9b34005f0e9f8f38e7fee21ab66/selectolax-0.3.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd99ff0f5a6c017c471635d4ee45b61d25f24689331e407147b2cf5e36892480", size = 5844493 }, + { url = "https://files.pythonhosted.org/packages/36/25/64c60da9aec81f2992355b0a3ce00ea1ed99e6f5499868016d6972bd4948/selectolax-0.3.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8377c317bf1d5fd6ccc56dfb5a0928bbcbea3e800b7af54761cfbbb99dc94cb9", size = 5881062 }, + { url = "https://files.pythonhosted.org/packages/b6/81/94105217f91f7c6a98ac3164210cba0c6aa8da91cb85405292a6d70e39c3/selectolax-0.3.29-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5388c56456272b2c241fc1906db9cc993984cafdad936cb5e061e3af0c44144e", size = 5470368 }, + { url = "https://files.pythonhosted.org/packages/51/6e/40bc259f13e5d3dd0bb8ddd1d55ef099244db2568ffb82fd9d489984d61a/selectolax-0.3.29-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9e4690894f406863e25ba49da27e1a6fda9bfc21b0b315c399d3093be080e81", size = 5693476 }, + { url = "https://files.pythonhosted.org/packages/58/bd/2668ee1d5471ad88daf83ca484515ba46774fc9c951d6c4c0beffea89952/selectolax-0.3.29-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:deeab93386b6c9a75052515f5b9e7e3dd623c585871c0c2b3126970ff902603b", size = 5449747 }, + { url = "https://files.pythonhosted.org/packages/a1/b5/1c61839ae5af70a8291c643982a99f051b543df90b220b98db1b26bd4899/selectolax-0.3.29-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6abdd8357f1c105c1add01a9f0373511fa832548b2e2778b00a8ba2a4508d6ed", size = 5786843 }, + { url = "https://files.pythonhosted.org/packages/67/08/ca42c100ab90168c123e6b521e38cb7618b697a693fdb77e42dabb0670fd/selectolax-0.3.29-cp312-cp312-win32.whl", hash = "sha256:9c969626b2295702076f50aac91e44c3bba639fa2e1a612bf6ae254bf29b4d57", size = 1697859 }, + { url = "https://files.pythonhosted.org/packages/5c/22/9524af51d950cc718bd4406f3bed05acbfcb321a4a308ec85b96ccdaa1ef/selectolax-0.3.29-cp312-cp312-win_amd64.whl", hash = "sha256:e7f4cc1b7ce9691559decfd5db7cc500e71a9f6ccfe76c054f284c184a1d1dc9", size = 1804145 }, + { url = "https://files.pythonhosted.org/packages/c0/a7/083a00aa9cb6bef0317baba4269841c366652558d77189275bed2da6aa81/selectolax-0.3.29-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e3112f05a34bf36d36ecc51520b1d98c4667b54a3f123dffef5072273e89a360", size = 3651407 }, + { url = "https://files.pythonhosted.org/packages/7e/cd/6c89ac27961ef5f5e9b40eda0d0653b9c95c93485fb8a554bf093eac1c77/selectolax-0.3.29-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:38462ae369897f71da287f1282079c11f1b878b99a4d1d509d1116ce05226d88", size = 2092649 }, + { url = "https://files.pythonhosted.org/packages/3e/12/82710124b7b52613fdb9d5c14494a41785eb83e1c93ec7e1d1814c2ce292/selectolax-0.3.29-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdd1e63735f2fb8485fb6b9f4fe30d6c030930f438f46a4a62bd9886ab3c7fd9", size = 5821738 }, + { url = "https://files.pythonhosted.org/packages/8b/08/8ceb3eb7fee9743026a4481fccb771f257c82b2c853a1a30271902234eab/selectolax-0.3.29-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea52e0c128e8e89f98ab0ccaabbc853677de5730729a3351da595976131b66e0", size = 5856069 }, + { url = "https://files.pythonhosted.org/packages/47/6c/ec2b7aff0f6202e4157415d76bd588108cc518374bf53afa81c122691780/selectolax-0.3.29-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0933659b4250b91317ccd78167e6804389cdaf7ed86c5d034b058a550d23110f", size = 5443255 }, + { url = "https://files.pythonhosted.org/packages/cd/90/d5fea46ff191d02c2380a779b119ea6799751b79fcddb2bb230b21b38fc5/selectolax-0.3.29-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0c9005e9089a6b0c6fb6a9f691ddbbb10a3a23ebeff54393980340f3dbcdb99", size = 5637529 }, + { url = "https://files.pythonhosted.org/packages/9d/83/7f876a515f5af31f7b948cf10951be896fe6deeff2b9b713640c8ec82fd3/selectolax-0.3.29-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac940963c52f13cdf5d7266a979744949b660d367ce669efa073b557f6e09a18", size = 5379121 }, + { url = "https://files.pythonhosted.org/packages/57/cb/7dc739a484b1a17ccf92a23dfe558ae615c232bd81e78a72049c25d1ff66/selectolax-0.3.29-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:484274f73839f9a143f4c13ce1b0a0123b5d64be22f967a1dc202a9a78687d67", size = 5727944 }, + { url = "https://files.pythonhosted.org/packages/b7/09/95da4d2919d99a6090327390b84bc5440133196351e5e04c24cccda06cbb/selectolax-0.3.29-cp313-cp313-win32.whl", hash = "sha256:29e71fbd58b90d2920ef91a940680cb5331710fe397925ce9d10c3f2f086bf27", size = 1697529 }, + { url = "https://files.pythonhosted.org/packages/0e/17/5a3951da22a4ad8f959088ddc370c68b28dad03190d91fcd137a52410fb9/selectolax-0.3.29-cp313-cp313-win_amd64.whl", hash = "sha256:e13befacff5f78102aa11465055ecb6d4b35f89663e36f271f2b506bcab14112", size = 1803334 }, ] [[package]] name = "send2trash" version = "1.8.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394, upload-time = "2024-04-07T00:01:09.267Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072, upload-time = "2024-04-07T00:01:07.438Z" }, + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072 }, ] [[package]] name = "setuptools" version = "80.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } 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" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] name = "sniffio" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, ] [[package]] @@ -4504,27 +4531,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/01/00/6d749cc1f88e7f95f5442a8abb195fa607094deba9e0475affbfb7fa8c04/sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd", size = 9287, upload-time = "2021-01-18T22:15:16.623Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/00/6d749cc1f88e7f95f5442a8abb195fa607094deba9e0475affbfb7fa8c04/sortedcollections-2.1.0.tar.gz", hash = "sha256:d8e9609d6c580a16a1224a3dc8965789e03ebc4c3e5ffd05ada54a2fed5dcacd", size = 9287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/39/c993a7d0c9dbf3aeca5008bdd00e4436ad9b7170527cef0a14634b47001f/sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c", size = 9531, upload-time = "2021-01-18T22:15:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/6e/39/c993a7d0c9dbf3aeca5008bdd00e4436ad9b7170527cef0a14634b47001f/sortedcollections-2.1.0-py3-none-any.whl", hash = "sha256:b07abbc73472cc459da9dd6e2607d73d1f3b9309a32dd9a57fa2c6fa882f4c6c", size = 9531 }, ] [[package]] name = "sortedcontainers" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, ] [[package]] name = "soupsieve" version = "2.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472 } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" }, + { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679 }, ] [[package]] @@ -4536,9 +4563,9 @@ dependencies = [ { name = "numpy", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pyserial" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/90/7f/1e07521afeaf25ad4d792789ea271e8221fb2010ceb403ea71c15987af84/spirack-0.2.8.tar.gz", hash = "sha256:ff1de8fe9e7658f59fcc8befed05ffc64710fc53e02150f79af67a86d8c948fd", size = 48936, upload-time = "2025-09-11T12:47:41.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/90/7f/1e07521afeaf25ad4d792789ea271e8221fb2010ceb403ea71c15987af84/spirack-0.2.8.tar.gz", hash = "sha256:ff1de8fe9e7658f59fcc8befed05ffc64710fc53e02150f79af67a86d8c948fd", size = 48936 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/2c/2b723da6e3420320b9c9a88437ce9d68db21d0ed512c5591bafb1cc15291/spirack-0.2.8-py3-none-any.whl", hash = "sha256:5dd53ed32789338dcf060b35c21e03774f6d47438e39564e09469ba340558cea", size = 59444, upload-time = "2025-09-11T12:47:40.308Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2c/2b723da6e3420320b9c9a88437ce9d68db21d0ed512c5591bafb1cc15291/spirack-0.2.8-py3-none-any.whl", hash = "sha256:5dd53ed32789338dcf060b35c21e03774f6d47438e39564e09469ba340558cea", size = 59444 }, ] [[package]] @@ -4550,9 +4577,9 @@ dependencies = [ { 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" } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } 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" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, ] [[package]] @@ -4562,18 +4589,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mpmath" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 }, ] [[package]] name = "tabulate" version = "0.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload-time = "2022-10-06T17:21:48.54Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload-time = "2022-10-06T17:21:44.262Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, ] [[package]] @@ -4585,18 +4612,18 @@ dependencies = [ { 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" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } 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" }, + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, ] [[package]] @@ -4606,76 +4633,76 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, ] [[package]] name = "tomli" version = "2.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] [[package]] name = "toolz" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/0b/d80dfa675bf592f636d1ea0b835eab4ec8df6e9415d8cfd766df54456123/toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02", size = 66790, upload-time = "2024-10-04T16:17:04.001Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/0b/d80dfa675bf592f636d1ea0b835eab4ec8df6e9415d8cfd766df54456123/toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02", size = 66790 } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236", size = 56383, upload-time = "2024-10-04T16:17:01.533Z" }, + { url = "https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236", size = 56383 }, ] [[package]] name = "tornado" version = "6.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, - { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, - { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, - { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, - { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, - { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, + { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563 }, + { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729 }, + { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295 }, + { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644 }, + { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878 }, + { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549 }, + { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973 }, + { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954 }, + { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023 }, + { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427 }, + { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456 }, ] [[package]] @@ -4695,9 +4722,9 @@ dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799, upload-time = "2025-10-02T16:24:39.974Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/b2/cee55172e5e10ce030b087cd3ac06641e47d08a3dc8d76c17b157dba7558/tox-4.30.3.tar.gz", hash = "sha256:f3dd0735f1cd4e8fbea5a3661b77f517456b5f0031a6256432533900e34b90bf", size = 202799 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512, upload-time = "2025-10-02T16:24:38.209Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e4/8bb9ce952820df4165eb34610af347665d6cb436898a234db9d84d093ce6/tox-4.30.3-py3-none-any.whl", hash = "sha256:a9f17b4b2d0f74fe0d76207236925a119095011e5c2e661a133115a8061178c9", size = 175512 }, ] [[package]] @@ -4707,36 +4734,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, ] [[package]] name = "types-python-dateutil" -version = "2.9.0.20250822" +version = "2.9.0.20251008" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0c/0a/775f8551665992204c756be326f3575abba58c4a3a52eef9909ef4536428/types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53", size = 16084, upload-time = "2025-08-22T03:02:00.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/83/24ed25dd0c6277a1a170c180ad9eef5879ecc9a4745b58d7905a4588c80d/types_python_dateutil-2.9.0.20251008.tar.gz", hash = "sha256:c3826289c170c93ebd8360c3485311187df740166dbab9dd3b792e69f2bc1f9c", size = 16128, upload-time = "2025-10-08T02:51:34.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/d9/a29dfa84363e88b053bf85a8b7f212a04f0d7343a4d24933baa45c06e08b/types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc", size = 17892, upload-time = "2025-08-22T03:01:59.436Z" }, + { url = "https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl", hash = "sha256:b9a5232c8921cf7661b29c163ccc56055c418ab2c6eabe8f917cbcc73a4c4157", size = 17934, upload-time = "2025-10-08T02:51:33.55Z" }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, ] [[package]] @@ -4747,9 +4774,9 @@ 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" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/74/1789779d91f1961fa9438e9a8710cdae6bd138c80d7303996933d117264a/typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78", size = 13825 } 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" }, + { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 }, ] [[package]] @@ -4759,36 +4786,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, ] [[package]] name = "tzdata" version = "2025.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, ] [[package]] name = "uncertainties" version = "3.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/f926a3faf468b9784bdecb8d9328b531743937ead284b2e8d406d96e8b0f/uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b", size = 143865, upload-time = "2024-07-07T22:37:06.567Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/f926a3faf468b9784bdecb8d9328b531743937ead284b2e8d406d96e8b0f/uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b", size = 143865 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7", size = 58266, upload-time = "2024-07-07T22:37:03.942Z" }, + { url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7", size = 58266 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } 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" }, + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, ] [[package]] @@ -4798,18 +4825,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/80/31/febb777441e5fcdaacb4522316bf2a527c44551430a4873b052d545e3279/url_normalize-2.2.1.tar.gz", hash = "sha256:74a540a3b6eba1d95bdc610c24f2c0141639f3ba903501e61a52a8730247ff37", size = 18846, upload-time = "2025-04-26T20:37:58.553Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/31/febb777441e5fcdaacb4522316bf2a527c44551430a4873b052d545e3279/url_normalize-2.2.1.tar.gz", hash = "sha256:74a540a3b6eba1d95bdc610c24f2c0141639f3ba903501e61a52a8730247ff37", size = 18846 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/d9/5ec15501b675f7bc07c5d16aa70d8d778b12375686b6efd47656efdc67cd/url_normalize-2.2.1-py3-none-any.whl", hash = "sha256:3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b", size = 14728, upload-time = "2025-04-26T20:37:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d9/5ec15501b675f7bc07c5d16aa70d8d778b12375686b6efd47656efdc67cd/url_normalize-2.2.1-py3-none-any.whl", hash = "sha256:3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b", size = 14728 }, ] [[package]] name = "urllib3" version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, ] [[package]] @@ -4820,18 +4847,18 @@ dependencies = [ { name = "packaging" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/89/f4/bc578cc80989c572231a36cc03cc097091176fa3fb8b4e2af1deb4370eb7/versioningit-3.3.0.tar.gz", hash = "sha256:b91ad7d73e73d21220e69540f20213f2b729a1f9b35c04e9e137eaf28d2214da", size = 220280, upload-time = "2025-06-27T20:13:23.368Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/f4/bc578cc80989c572231a36cc03cc097091176fa3fb8b4e2af1deb4370eb7/versioningit-3.3.0.tar.gz", hash = "sha256:b91ad7d73e73d21220e69540f20213f2b729a1f9b35c04e9e137eaf28d2214da", size = 220280 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl", hash = "sha256:23b1db3c4756cded9bd6b0ddec6643c261e3d0c471707da3e0b230b81ce53e4b", size = 38439, upload-time = "2025-06-27T20:13:21.927Z" }, + { url = "https://files.pythonhosted.org/packages/1c/59/964ecb8008722d27d8a835baea81f56a91cea8e097b3be992bc6ccde6367/versioningit-3.3.0-py3-none-any.whl", hash = "sha256:23b1db3c4756cded9bd6b0ddec6643c261e3d0c471707da3e0b230b81ce53e4b", size = 38439 }, ] [[package]] name = "verspec" version = "0.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/44/8126f9f0c44319b2efc65feaad589cadef4d77ece200ae3c9133d58464d0/verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e", size = 27123, upload-time = "2020-11-30T02:24:09.646Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/44/8126f9f0c44319b2efc65feaad589cadef4d77ece200ae3c9133d58464d0/verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e", size = 27123 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31", size = 19640, upload-time = "2020-11-30T02:24:08.387Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31", size = 19640 }, ] [[package]] @@ -4844,68 +4871,68 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808, upload-time = "2025-08-13T14:24:07.464Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/14/37fcdba2808a6c615681cd216fecae00413c9dab44fb2e57805ecf3eaee3/virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a", size = 6003808 } wheels = [ - { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279, upload-time = "2025-08-13T14:24:05.111Z" }, + { url = "https://files.pythonhosted.org/packages/76/06/04c8e804f813cf972e3262f3f8584c232de64f0cde9f703b46cf53a45090/virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026", size = 5983279 }, ] [[package]] name = "watchdog" version = "6.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, - { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, - { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, - { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, - { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, - { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390 }, + { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389 }, + { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020 }, + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393 }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392 }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019 }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 }, + { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902 }, + { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380 }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 }, ] [[package]] name = "wcwidth" version = "0.2.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293 } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286 }, ] [[package]] name = "webcolors" version = "24.11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, ] [[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" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } 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" }, + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, ] [[package]] @@ -4915,72 +4942,72 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "legacy-cgi", marker = "python_full_version >= '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/85/0b/1732085540b01f65e4e7999e15864fe14cd18b12a95731a43fd6fd11b26a/webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589", size = 279775, upload-time = "2024-10-24T03:19:20.651Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/0b/1732085540b01f65e4e7999e15864fe14cd18b12a95731a43fd6fd11b26a/webob-1.8.9.tar.gz", hash = "sha256:ad6078e2edb6766d1334ec3dee072ac6a7f95b1e32ce10def8ff7f0f02d56589", size = 279775 } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/bd/c336448be43d40be28e71f2e0f3caf7ccb28e2755c58f4c02c065bfe3e8e/WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9", size = 115364, upload-time = "2024-10-24T03:19:18.642Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/c336448be43d40be28e71f2e0f3caf7ccb28e2755c58f4c02c065bfe3e8e/WebOb-1.8.9-py2.py3-none-any.whl", hash = "sha256:45e34c58ed0c7e2ecd238ffd34432487ff13d9ad459ddfd77895e67abba7c1f9", size = 115364 }, ] [[package]] name = "websocket-client" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } +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/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, + { 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 = "websockets" version = "15.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, - { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, - { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, - { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, - { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, - { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, - { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, - { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, - { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, - { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, - { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, - { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, - { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, - { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, - { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, - { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, - { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, - { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, - { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, - { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, - { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, - { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, - { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312 }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319 }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631 }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016 }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426 }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360 }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388 }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830 }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878 }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883 }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252 }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521 }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958 }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918 }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388 }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828 }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152 }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096 }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523 }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790 }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165 }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160 }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395 }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841 }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111 }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054 }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496 }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829 }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217 }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195 }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393 }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837 }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599 }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207 }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155 }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884 }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743 }, ] [[package]] name = "widgetsnbextension" version = "4.0.14" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428, upload-time = "2025-04-10T13:01:25.628Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload-time = "2025-04-10T13:01:23.086Z" }, + { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503 }, ] [[package]] @@ -4990,60 +5017,60 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/f1/d0a4c936ba77eb1050da6ea5e7cd80aa36add343d9e5f7f9cf79a206c5b8/wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0", size = 10930, upload-time = "2025-01-16T11:01:25.427Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/f1/d0a4c936ba77eb1050da6ea5e7cd80aa36add343d9e5f7f9cf79a206c5b8/wirerope-1.0.0.tar.gz", hash = "sha256:7da8bb6feeff9dd939bd7141ef0dc392674e43ba662e20909d6729db81a7c8d0", size = 10930 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/2d/3557ee32d8268b04ce8aada3212b0d49f2ddcf86dc200f3999a772262dc5/wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6", size = 9166, upload-time = "2025-01-16T11:01:23.507Z" }, + { url = "https://files.pythonhosted.org/packages/42/2d/3557ee32d8268b04ce8aada3212b0d49f2ddcf86dc200f3999a772262dc5/wirerope-1.0.0-py2.py3-none-any.whl", hash = "sha256:59346555c7b5dbd1c683a4e123f8bed30ca99df646f6867ea6439ceabf43c2f6", size = 9166 }, ] [[package]] name = "wrapt" version = "1.17.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/17/9f8f86755c191d6779d7ddead1a53c7a8aa18bccb7cea8e7e72dfa6a8a09/wrapt-1.17.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775", size = 81975, upload-time = "2025-08-12T05:52:30.109Z" }, - { url = "https://files.pythonhosted.org/packages/f2/15/dd576273491f9f43dd09fce517f6c2ce6eb4fe21681726068db0d0467096/wrapt-1.17.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd", size = 83149, upload-time = "2025-08-12T05:52:09.316Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c4/5eb4ce0d4814521fee7aa806264bf7a114e748ad05110441cd5b8a5c744b/wrapt-1.17.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05", size = 82209, upload-time = "2025-08-12T05:52:10.331Z" }, - { url = "https://files.pythonhosted.org/packages/31/4b/819e9e0eb5c8dc86f60dfc42aa4e2c0d6c3db8732bce93cc752e604bb5f5/wrapt-1.17.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418", size = 81551, upload-time = "2025-08-12T05:52:31.137Z" }, - { url = "https://files.pythonhosted.org/packages/f8/83/ed6baf89ba3a56694700139698cf703aac9f0f9eb03dab92f57551bd5385/wrapt-1.17.3-cp310-cp310-win32.whl", hash = "sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390", size = 36464, upload-time = "2025-08-12T05:53:01.204Z" }, - { url = "https://files.pythonhosted.org/packages/2f/90/ee61d36862340ad7e9d15a02529df6b948676b9a5829fd5e16640156627d/wrapt-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6", size = 38748, upload-time = "2025-08-12T05:53:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/bd/c3/cefe0bd330d389c9983ced15d326f45373f4073c9f4a8c2f99b50bfea329/wrapt-1.17.3-cp310-cp310-win_arm64.whl", hash = "sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18", size = 36810, upload-time = "2025-08-12T05:52:51.906Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311", size = 82376, upload-time = "2025-08-12T05:52:32.134Z" }, - { url = "https://files.pythonhosted.org/packages/31/57/4930cb8d9d70d59c27ee1332a318c20291749b4fba31f113c2f8ac49a72e/wrapt-1.17.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1", size = 83604, upload-time = "2025-08-12T05:52:11.663Z" }, - { url = "https://files.pythonhosted.org/packages/a8/f3/1afd48de81d63dd66e01b263a6fbb86e1b5053b419b9b33d13e1f6d0f7d0/wrapt-1.17.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5", size = 82782, upload-time = "2025-08-12T05:52:12.626Z" }, - { url = "https://files.pythonhosted.org/packages/1e/d7/4ad5327612173b144998232f98a85bb24b60c352afb73bc48e3e0d2bdc4e/wrapt-1.17.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2", size = 82076, upload-time = "2025-08-12T05:52:33.168Z" }, - { url = "https://files.pythonhosted.org/packages/bb/59/e0adfc831674a65694f18ea6dc821f9fcb9ec82c2ce7e3d73a88ba2e8718/wrapt-1.17.3-cp311-cp311-win32.whl", hash = "sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89", size = 36457, upload-time = "2025-08-12T05:53:03.936Z" }, - { url = "https://files.pythonhosted.org/packages/83/88/16b7231ba49861b6f75fc309b11012ede4d6b0a9c90969d9e0db8d991aeb/wrapt-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77", size = 38745, upload-time = "2025-08-12T05:53:02.885Z" }, - { url = "https://files.pythonhosted.org/packages/9a/1e/c4d4f3398ec073012c51d1c8d87f715f56765444e1a4b11e5180577b7e6e/wrapt-1.17.3-cp311-cp311-win_arm64.whl", hash = "sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a", size = 36806, upload-time = "2025-08-12T05:52:53.368Z" }, - { url = "https://files.pythonhosted.org/packages/9f/81/5d931d78d0eb732b95dc3ddaeeb71c8bb572fb01356e9133916cd729ecdd/wrapt-1.17.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828", size = 88036, upload-time = "2025-08-12T05:52:34.784Z" }, - { url = "https://files.pythonhosted.org/packages/ca/38/2e1785df03b3d72d34fc6252d91d9d12dc27a5c89caef3335a1bbb8908ca/wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9", size = 88156, upload-time = "2025-08-12T05:52:13.599Z" }, - { url = "https://files.pythonhosted.org/packages/b3/8b/48cdb60fe0603e34e05cffda0b2a4adab81fd43718e11111a4b0100fd7c1/wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396", size = 87102, upload-time = "2025-08-12T05:52:14.56Z" }, - { url = "https://files.pythonhosted.org/packages/3c/51/d81abca783b58f40a154f1b2c56db1d2d9e0d04fa2d4224e357529f57a57/wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc", size = 87732, upload-time = "2025-08-12T05:52:36.165Z" }, - { url = "https://files.pythonhosted.org/packages/9e/b1/43b286ca1392a006d5336412d41663eeef1ad57485f3e52c767376ba7e5a/wrapt-1.17.3-cp312-cp312-win32.whl", hash = "sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe", size = 36705, upload-time = "2025-08-12T05:53:07.123Z" }, - { url = "https://files.pythonhosted.org/packages/28/de/49493f962bd3c586ab4b88066e967aa2e0703d6ef2c43aa28cb83bf7b507/wrapt-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c", size = 38877, upload-time = "2025-08-12T05:53:05.436Z" }, - { url = "https://files.pythonhosted.org/packages/f1/48/0f7102fe9cb1e8a5a77f80d4f0956d62d97034bbe88d33e94699f99d181d/wrapt-1.17.3-cp312-cp312-win_arm64.whl", hash = "sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6", size = 36885, upload-time = "2025-08-12T05:52:54.367Z" }, - { url = "https://files.pythonhosted.org/packages/0c/37/6faf15cfa41bf1f3dba80cd3f5ccc6622dfccb660ab26ed79f0178c7497f/wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277", size = 88072, upload-time = "2025-08-12T05:52:37.53Z" }, - { url = "https://files.pythonhosted.org/packages/78/f2/efe19ada4a38e4e15b6dff39c3e3f3f73f5decf901f66e6f72fe79623a06/wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d", size = 88214, upload-time = "2025-08-12T05:52:15.886Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/ca86701e9de1622b16e09689fc24b76f69b06bb0150990f6f4e8b0eeb576/wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa", size = 87105, upload-time = "2025-08-12T05:52:17.914Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e0/d10bd257c9a3e15cbf5523025252cc14d77468e8ed644aafb2d6f54cb95d/wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050", size = 87766, upload-time = "2025-08-12T05:52:39.243Z" }, - { url = "https://files.pythonhosted.org/packages/e8/cf/7d848740203c7b4b27eb55dbfede11aca974a51c3d894f6cc4b865f42f58/wrapt-1.17.3-cp313-cp313-win32.whl", hash = "sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8", size = 36711, upload-time = "2025-08-12T05:53:10.074Z" }, - { url = "https://files.pythonhosted.org/packages/57/54/35a84d0a4d23ea675994104e667ceff49227ce473ba6a59ba2c84f250b74/wrapt-1.17.3-cp313-cp313-win_amd64.whl", hash = "sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb", size = 38885, upload-time = "2025-08-12T05:53:08.695Z" }, - { url = "https://files.pythonhosted.org/packages/01/77/66e54407c59d7b02a3c4e0af3783168fff8e5d61def52cda8728439d86bc/wrapt-1.17.3-cp313-cp313-win_arm64.whl", hash = "sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16", size = 36896, upload-time = "2025-08-12T05:52:55.34Z" }, - { url = "https://files.pythonhosted.org/packages/c3/f7/c983d2762bcce2326c317c26a6a1e7016f7eb039c27cdf5c4e30f4160f31/wrapt-1.17.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b", size = 87163, upload-time = "2025-08-12T05:52:40.965Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0f/f673f75d489c7f22d17fe0193e84b41540d962f75fce579cf6873167c29b/wrapt-1.17.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa", size = 87963, upload-time = "2025-08-12T05:52:20.326Z" }, - { url = "https://files.pythonhosted.org/packages/df/61/515ad6caca68995da2fac7a6af97faab8f78ebe3bf4f761e1b77efbc47b5/wrapt-1.17.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7", size = 86945, upload-time = "2025-08-12T05:52:21.581Z" }, - { url = "https://files.pythonhosted.org/packages/d3/bd/4e70162ce398462a467bc09e768bee112f1412e563620adc353de9055d33/wrapt-1.17.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4", size = 86857, upload-time = "2025-08-12T05:52:43.043Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b8/da8560695e9284810b8d3df8a19396a6e40e7518059584a1a394a2b35e0a/wrapt-1.17.3-cp314-cp314-win32.whl", hash = "sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10", size = 37178, upload-time = "2025-08-12T05:53:12.605Z" }, - { url = "https://files.pythonhosted.org/packages/db/c8/b71eeb192c440d67a5a0449aaee2310a1a1e8eca41676046f99ed2487e9f/wrapt-1.17.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6", size = 39310, upload-time = "2025-08-12T05:53:11.106Z" }, - { url = "https://files.pythonhosted.org/packages/45/20/2cda20fd4865fa40f86f6c46ed37a2a8356a7a2fde0773269311f2af56c7/wrapt-1.17.3-cp314-cp314-win_arm64.whl", hash = "sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58", size = 37266, upload-time = "2025-08-12T05:52:56.531Z" }, - { url = "https://files.pythonhosted.org/packages/64/0e/f4472f2fdde2d4617975144311f8800ef73677a159be7fe61fa50997d6c0/wrapt-1.17.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e", size = 108571, upload-time = "2025-08-12T05:52:44.521Z" }, - { url = "https://files.pythonhosted.org/packages/cc/01/9b85a99996b0a97c8a17484684f206cbb6ba73c1ce6890ac668bcf3838fb/wrapt-1.17.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f", size = 113094, upload-time = "2025-08-12T05:52:22.618Z" }, - { url = "https://files.pythonhosted.org/packages/25/02/78926c1efddcc7b3aa0bc3d6b33a822f7d898059f7cd9ace8c8318e559ef/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056", size = 110659, upload-time = "2025-08-12T05:52:24.057Z" }, - { url = "https://files.pythonhosted.org/packages/dc/ee/c414501ad518ac3e6fe184753632fe5e5ecacdcf0effc23f31c1e4f7bfcf/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804", size = 106946, upload-time = "2025-08-12T05:52:45.976Z" }, - { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717, upload-time = "2025-08-12T05:53:15.214Z" }, - { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334, upload-time = "2025-08-12T05:53:14.178Z" }, - { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471, upload-time = "2025-08-12T05:52:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/17/9f8f86755c191d6779d7ddead1a53c7a8aa18bccb7cea8e7e72dfa6a8a09/wrapt-1.17.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775", size = 81975 }, + { url = "https://files.pythonhosted.org/packages/f2/15/dd576273491f9f43dd09fce517f6c2ce6eb4fe21681726068db0d0467096/wrapt-1.17.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd", size = 83149 }, + { url = "https://files.pythonhosted.org/packages/0c/c4/5eb4ce0d4814521fee7aa806264bf7a114e748ad05110441cd5b8a5c744b/wrapt-1.17.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05", size = 82209 }, + { url = "https://files.pythonhosted.org/packages/31/4b/819e9e0eb5c8dc86f60dfc42aa4e2c0d6c3db8732bce93cc752e604bb5f5/wrapt-1.17.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418", size = 81551 }, + { url = "https://files.pythonhosted.org/packages/f8/83/ed6baf89ba3a56694700139698cf703aac9f0f9eb03dab92f57551bd5385/wrapt-1.17.3-cp310-cp310-win32.whl", hash = "sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390", size = 36464 }, + { url = "https://files.pythonhosted.org/packages/2f/90/ee61d36862340ad7e9d15a02529df6b948676b9a5829fd5e16640156627d/wrapt-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6", size = 38748 }, + { url = "https://files.pythonhosted.org/packages/bd/c3/cefe0bd330d389c9983ced15d326f45373f4073c9f4a8c2f99b50bfea329/wrapt-1.17.3-cp310-cp310-win_arm64.whl", hash = "sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18", size = 36810 }, + { url = "https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311", size = 82376 }, + { url = "https://files.pythonhosted.org/packages/31/57/4930cb8d9d70d59c27ee1332a318c20291749b4fba31f113c2f8ac49a72e/wrapt-1.17.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1", size = 83604 }, + { url = "https://files.pythonhosted.org/packages/a8/f3/1afd48de81d63dd66e01b263a6fbb86e1b5053b419b9b33d13e1f6d0f7d0/wrapt-1.17.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5", size = 82782 }, + { url = "https://files.pythonhosted.org/packages/1e/d7/4ad5327612173b144998232f98a85bb24b60c352afb73bc48e3e0d2bdc4e/wrapt-1.17.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2", size = 82076 }, + { url = "https://files.pythonhosted.org/packages/bb/59/e0adfc831674a65694f18ea6dc821f9fcb9ec82c2ce7e3d73a88ba2e8718/wrapt-1.17.3-cp311-cp311-win32.whl", hash = "sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89", size = 36457 }, + { url = "https://files.pythonhosted.org/packages/83/88/16b7231ba49861b6f75fc309b11012ede4d6b0a9c90969d9e0db8d991aeb/wrapt-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77", size = 38745 }, + { url = "https://files.pythonhosted.org/packages/9a/1e/c4d4f3398ec073012c51d1c8d87f715f56765444e1a4b11e5180577b7e6e/wrapt-1.17.3-cp311-cp311-win_arm64.whl", hash = "sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a", size = 36806 }, + { url = "https://files.pythonhosted.org/packages/9f/81/5d931d78d0eb732b95dc3ddaeeb71c8bb572fb01356e9133916cd729ecdd/wrapt-1.17.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828", size = 88036 }, + { url = "https://files.pythonhosted.org/packages/ca/38/2e1785df03b3d72d34fc6252d91d9d12dc27a5c89caef3335a1bbb8908ca/wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9", size = 88156 }, + { url = "https://files.pythonhosted.org/packages/b3/8b/48cdb60fe0603e34e05cffda0b2a4adab81fd43718e11111a4b0100fd7c1/wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396", size = 87102 }, + { url = "https://files.pythonhosted.org/packages/3c/51/d81abca783b58f40a154f1b2c56db1d2d9e0d04fa2d4224e357529f57a57/wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc", size = 87732 }, + { url = "https://files.pythonhosted.org/packages/9e/b1/43b286ca1392a006d5336412d41663eeef1ad57485f3e52c767376ba7e5a/wrapt-1.17.3-cp312-cp312-win32.whl", hash = "sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe", size = 36705 }, + { url = "https://files.pythonhosted.org/packages/28/de/49493f962bd3c586ab4b88066e967aa2e0703d6ef2c43aa28cb83bf7b507/wrapt-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c", size = 38877 }, + { url = "https://files.pythonhosted.org/packages/f1/48/0f7102fe9cb1e8a5a77f80d4f0956d62d97034bbe88d33e94699f99d181d/wrapt-1.17.3-cp312-cp312-win_arm64.whl", hash = "sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6", size = 36885 }, + { url = "https://files.pythonhosted.org/packages/0c/37/6faf15cfa41bf1f3dba80cd3f5ccc6622dfccb660ab26ed79f0178c7497f/wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277", size = 88072 }, + { url = "https://files.pythonhosted.org/packages/78/f2/efe19ada4a38e4e15b6dff39c3e3f3f73f5decf901f66e6f72fe79623a06/wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d", size = 88214 }, + { url = "https://files.pythonhosted.org/packages/40/90/ca86701e9de1622b16e09689fc24b76f69b06bb0150990f6f4e8b0eeb576/wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa", size = 87105 }, + { url = "https://files.pythonhosted.org/packages/fd/e0/d10bd257c9a3e15cbf5523025252cc14d77468e8ed644aafb2d6f54cb95d/wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050", size = 87766 }, + { url = "https://files.pythonhosted.org/packages/e8/cf/7d848740203c7b4b27eb55dbfede11aca974a51c3d894f6cc4b865f42f58/wrapt-1.17.3-cp313-cp313-win32.whl", hash = "sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8", size = 36711 }, + { url = "https://files.pythonhosted.org/packages/57/54/35a84d0a4d23ea675994104e667ceff49227ce473ba6a59ba2c84f250b74/wrapt-1.17.3-cp313-cp313-win_amd64.whl", hash = "sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb", size = 38885 }, + { url = "https://files.pythonhosted.org/packages/01/77/66e54407c59d7b02a3c4e0af3783168fff8e5d61def52cda8728439d86bc/wrapt-1.17.3-cp313-cp313-win_arm64.whl", hash = "sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16", size = 36896 }, + { url = "https://files.pythonhosted.org/packages/c3/f7/c983d2762bcce2326c317c26a6a1e7016f7eb039c27cdf5c4e30f4160f31/wrapt-1.17.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b", size = 87163 }, + { url = "https://files.pythonhosted.org/packages/e4/0f/f673f75d489c7f22d17fe0193e84b41540d962f75fce579cf6873167c29b/wrapt-1.17.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa", size = 87963 }, + { url = "https://files.pythonhosted.org/packages/df/61/515ad6caca68995da2fac7a6af97faab8f78ebe3bf4f761e1b77efbc47b5/wrapt-1.17.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7", size = 86945 }, + { url = "https://files.pythonhosted.org/packages/d3/bd/4e70162ce398462a467bc09e768bee112f1412e563620adc353de9055d33/wrapt-1.17.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4", size = 86857 }, + { url = "https://files.pythonhosted.org/packages/2b/b8/da8560695e9284810b8d3df8a19396a6e40e7518059584a1a394a2b35e0a/wrapt-1.17.3-cp314-cp314-win32.whl", hash = "sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10", size = 37178 }, + { url = "https://files.pythonhosted.org/packages/db/c8/b71eeb192c440d67a5a0449aaee2310a1a1e8eca41676046f99ed2487e9f/wrapt-1.17.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6", size = 39310 }, + { url = "https://files.pythonhosted.org/packages/45/20/2cda20fd4865fa40f86f6c46ed37a2a8356a7a2fde0773269311f2af56c7/wrapt-1.17.3-cp314-cp314-win_arm64.whl", hash = "sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58", size = 37266 }, + { url = "https://files.pythonhosted.org/packages/64/0e/f4472f2fdde2d4617975144311f8800ef73677a159be7fe61fa50997d6c0/wrapt-1.17.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e", size = 108571 }, + { url = "https://files.pythonhosted.org/packages/cc/01/9b85a99996b0a97c8a17484684f206cbb6ba73c1ce6890ac668bcf3838fb/wrapt-1.17.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f", size = 113094 }, + { url = "https://files.pythonhosted.org/packages/25/02/78926c1efddcc7b3aa0bc3d6b33a822f7d898059f7cd9ace8c8318e559ef/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056", size = 110659 }, + { url = "https://files.pythonhosted.org/packages/dc/ee/c414501ad518ac3e6fe184753632fe5e5ecacdcf0effc23f31c1e4f7bfcf/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804", size = 106946 }, + { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717 }, + { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334 }, + { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471 }, + { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591 }, ] [[package]] @@ -5058,9 +5085,9 @@ dependencies = [ { name = "packaging", marker = "python_full_version < '3.11'" }, { name = "pandas", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185, upload-time = "2025-06-12T03:04:09.099Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739, upload-time = "2025-06-12T03:04:06.708Z" }, + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, ] [package.optional-dependencies] @@ -5076,7 +5103,7 @@ io = [ [[package]] name = "xarray" -version = "2025.9.1" +version = "2025.10.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", @@ -5089,9 +5116,9 @@ dependencies = [ { name = "packaging", marker = "python_full_version >= '3.11'" }, { name = "pandas", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d0/5d/e139112a463336c636d4455494f3227b7f47a2e06ca7571e6b88158ffc06/xarray-2025.9.1.tar.gz", hash = "sha256:f34a27a52c13d1f3cceb7b27276aeec47021558363617dd7ef4f4c8b379011c0", size = 3057322, upload-time = "2025-09-30T05:28:53.084Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ce/f5dd613ddd0b3f839c59e6c2fa20c62469bf671bf4c92a12b09dc0972326/xarray-2025.10.1.tar.gz", hash = "sha256:3c2b5ad7389825bd624ada5ff26b01ac54b1aae72e2fe0d724d81d40a2bf5785", size = 3058736, upload-time = "2025-10-07T20:25:56.708Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/a7/6eeb32e705d510a672f74135f538ad27f87f3d600845bfd3834ea3a77c7e/xarray-2025.9.1-py3-none-any.whl", hash = "sha256:3e9708db0d7915c784ed6c227d81b398dca4957afe68d119481f8a448fc88c44", size = 1364411, upload-time = "2025-09-30T05:28:51.294Z" }, + { url = "https://files.pythonhosted.org/packages/c3/78/4d6d68555a92cb97b4c192759c4ab585c5cb23490f64d4ddf12c66a3b051/xarray-2025.10.1-py3-none-any.whl", hash = "sha256:a4e699433b87a7fac340951bc36648645eeef72bdd915ff055ac2fd99865a73d", size = 1365202, upload-time = "2025-10-07T20:25:54.964Z" }, ] [package.optional-dependencies] @@ -5110,103 +5137,103 @@ io = [ name = "xxhash" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/55/28c93a3662f2d200c70704efe74aab9640e824f8ce330d8d3943bf7c9b3c/xxhash-3.6.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:89952ea539566b9fed2bbd94e589672794b4286f342254fad28b149f9615fef8", size = 193786, upload-time = "2025-10-02T14:33:54.272Z" }, - { url = "https://files.pythonhosted.org/packages/c1/96/fec0be9bb4b8f5d9c57d76380a366f31a1781fb802f76fc7cda6c84893c7/xxhash-3.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e6f2ffb07a50b52465a1032c3cf1f4a5683f944acaca8a134a2f23674c2058", size = 212830, upload-time = "2025-10-02T14:33:55.706Z" }, - { url = "https://files.pythonhosted.org/packages/c4/a0/c706845ba77b9611f81fd2e93fad9859346b026e8445e76f8c6fd057cc6d/xxhash-3.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5b848ad6c16d308c3ac7ad4ba6bede80ed5df2ba8ed382f8932df63158dd4b2", size = 211606, upload-time = "2025-10-02T14:33:57.133Z" }, - { url = "https://files.pythonhosted.org/packages/67/1e/164126a2999e5045f04a69257eea946c0dc3e86541b400d4385d646b53d7/xxhash-3.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a034590a727b44dd8ac5914236a7b8504144447a9682586c3327e935f33ec8cc", size = 444872, upload-time = "2025-10-02T14:33:58.446Z" }, - { url = "https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a8f1972e75ebdd161d7896743122834fe87378160c20e97f8b09166213bf8cc", size = 193217, upload-time = "2025-10-02T14:33:59.724Z" }, - { url = "https://files.pythonhosted.org/packages/45/e6/52abf06bac316db33aa269091ae7311bd53cfc6f4b120ae77bac1b348091/xxhash-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ee34327b187f002a596d7b167ebc59a1b729e963ce645964bbc050d2f1b73d07", size = 210139, upload-time = "2025-10-02T14:34:02.041Z" }, - { url = "https://files.pythonhosted.org/packages/34/37/db94d490b8691236d356bc249c08819cbcef9273a1a30acf1254ff9ce157/xxhash-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:339f518c3c7a850dd033ab416ea25a692759dc7478a71131fe8869010d2b75e4", size = 197669, upload-time = "2025-10-02T14:34:03.664Z" }, - { url = "https://files.pythonhosted.org/packages/b7/36/c4f219ef4a17a4f7a64ed3569bc2b5a9c8311abdb22249ac96093625b1a4/xxhash-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bf48889c9630542d4709192578aebbd836177c9f7a4a2778a7d6340107c65f06", size = 210018, upload-time = "2025-10-02T14:34:05.325Z" }, - { url = "https://files.pythonhosted.org/packages/fd/06/bfac889a374fc2fc439a69223d1750eed2e18a7db8514737ab630534fa08/xxhash-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5576b002a56207f640636056b4160a378fe36a58db73ae5c27a7ec8db35f71d4", size = 413058, upload-time = "2025-10-02T14:34:06.925Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d1/555d8447e0dd32ad0930a249a522bb2e289f0d08b6b16204cfa42c1f5a0c/xxhash-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af1f3278bd02814d6dedc5dec397993b549d6f16c19379721e5a1d31e132c49b", size = 190628, upload-time = "2025-10-02T14:34:08.669Z" }, - { url = "https://files.pythonhosted.org/packages/d1/15/8751330b5186cedc4ed4b597989882ea05e0408b53fa47bcb46a6125bfc6/xxhash-3.6.0-cp310-cp310-win32.whl", hash = "sha256:aed058764db109dc9052720da65fafe84873b05eb8b07e5e653597951af57c3b", size = 30577, upload-time = "2025-10-02T14:34:10.234Z" }, - { url = "https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:e82da5670f2d0d98950317f82a0e4a0197150ff19a6df2ba40399c2a3b9ae5fb", size = 31487, upload-time = "2025-10-02T14:34:11.618Z" }, - { url = "https://files.pythonhosted.org/packages/9f/00/60f9ea3bb697667a14314d7269956f58bf56bb73864f8f8d52a3c2535e9a/xxhash-3.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a082ffff8c6ac07707fb6b671caf7c6e020c75226c561830b73d862060f281d", size = 27863, upload-time = "2025-10-02T14:34:12.619Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/19fe357ea348d98ca22f456f75a30ac0916b51c753e1f8b2e0e6fb884cce/xxhash-3.6.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d0a9751f71a1a65ce3584e9cae4467651c7e70c9d31017fa57574583a4540248", size = 194665, upload-time = "2025-10-02T14:34:16.541Z" }, - { url = "https://files.pythonhosted.org/packages/90/3b/d1f1a8f5442a5fd8beedae110c5af7604dc37349a8e16519c13c19a9a2de/xxhash-3.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b29ee68625ab37b04c0b40c3fafdf24d2f75ccd778333cfb698f65f6c463f62", size = 213550, upload-time = "2025-10-02T14:34:17.878Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ef/3a9b05eb527457d5db13a135a2ae1a26c80fecd624d20f3e8dcc4cb170f3/xxhash-3.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6812c25fe0d6c36a46ccb002f40f27ac903bf18af9f6dd8f9669cb4d176ab18f", size = 212384, upload-time = "2025-10-02T14:34:19.182Z" }, - { url = "https://files.pythonhosted.org/packages/0f/18/ccc194ee698c6c623acbf0f8c2969811a8a4b6185af5e824cd27b9e4fd3e/xxhash-3.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ccbff013972390b51a18ef1255ef5ac125c92dc9143b2d1909f59abc765540e", size = 445749, upload-time = "2025-10-02T14:34:20.659Z" }, - { url = "https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:297b7fbf86c82c550e12e8fb71968b3f033d27b874276ba3624ea868c11165a8", size = 193880, upload-time = "2025-10-02T14:34:22.431Z" }, - { url = "https://files.pythonhosted.org/packages/82/fb/96213c8560e6f948a1ecc9a7613f8032b19ee45f747f4fca4eb31bb6d6ed/xxhash-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dea26ae1eb293db089798d3973a5fc928a18fdd97cc8801226fae705b02b14b0", size = 210912, upload-time = "2025-10-02T14:34:23.937Z" }, - { url = "https://files.pythonhosted.org/packages/40/aa/4395e669b0606a096d6788f40dbdf2b819d6773aa290c19e6e83cbfc312f/xxhash-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7a0b169aafb98f4284f73635a8e93f0735f9cbde17bd5ec332480484241aaa77", size = 198654, upload-time = "2025-10-02T14:34:25.644Z" }, - { url = "https://files.pythonhosted.org/packages/67/74/b044fcd6b3d89e9b1b665924d85d3f400636c23590226feb1eb09e1176ce/xxhash-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:08d45aef063a4531b785cd72de4887766d01dc8f362a515693df349fdb825e0c", size = 210867, upload-time = "2025-10-02T14:34:27.203Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fd/3ce73bf753b08cb19daee1eb14aa0d7fe331f8da9c02dd95316ddfe5275e/xxhash-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:929142361a48ee07f09121fe9e96a84950e8d4df3bb298ca5d88061969f34d7b", size = 414012, upload-time = "2025-10-02T14:34:28.409Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b3/5a4241309217c5c876f156b10778f3ab3af7ba7e3259e6d5f5c7d0129eb2/xxhash-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51312c768403d8540487dbbfb557454cfc55589bbde6424456951f7fcd4facb3", size = 191409, upload-time = "2025-10-02T14:34:29.696Z" }, - { url = "https://files.pythonhosted.org/packages/c0/01/99bfbc15fb9abb9a72b088c1d95219fc4782b7d01fc835bd5744d66dd0b8/xxhash-3.6.0-cp311-cp311-win32.whl", hash = "sha256:d1927a69feddc24c987b337ce81ac15c4720955b667fe9b588e02254b80446fd", size = 30574, upload-time = "2025-10-02T14:34:31.028Z" }, - { url = "https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:26734cdc2d4ffe449b41d186bbeac416f704a482ed835d375a5c0cb02bc63fef", size = 31481, upload-time = "2025-10-02T14:34:32.062Z" }, - { url = "https://files.pythonhosted.org/packages/30/4e/15cd0e3e8772071344eab2961ce83f6e485111fed8beb491a3f1ce100270/xxhash-3.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:d72f67ef8bf36e05f5b6c65e8524f265bd61071471cd4cf1d36743ebeeeb06b7", size = 27861, upload-time = "2025-10-02T14:34:33.555Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, - { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, - { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, - { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, - { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, - { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, - { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, - { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, - { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, - { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, - { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, - { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, - { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, - { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, - { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, - { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, - { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, - { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, - { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, - { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, - { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, - { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, - { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, - { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, - { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, - { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, - { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, - { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, - { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, - { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, - { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, - { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, - { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, - { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, - { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, - { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, - { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, - { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, - { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, - { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, - { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, - { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, - { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, - { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, - { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, - { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, - { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, - { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, - { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, - { url = "https://files.pythonhosted.org/packages/b8/0b/b14510b38ba91caf43006209db846a696ceea6a847a0c9ba0a5b1adc53d6/xxhash-3.6.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5dc1e14d14fa0f5789ec29a7062004b5933964bb9b02aae6622b8f530dc40296", size = 41056, upload-time = "2025-10-02T14:37:02.879Z" }, - { url = "https://files.pythonhosted.org/packages/50/55/15a7b8a56590e66ccd374bbfa3f9ffc45b810886c8c3b614e3f90bd2367c/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:881b47fc47e051b37d94d13e7455131054b56749b91b508b0907eb07900d1c13", size = 36251, upload-time = "2025-10-02T14:37:04.44Z" }, - { url = "https://files.pythonhosted.org/packages/62/b2/5ac99a041a29e58e95f907876b04f7067a0242cb85b5f39e726153981503/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6dc31591899f5e5666f04cc2e529e69b4072827085c1ef15294d91a004bc1bd", size = 32481, upload-time = "2025-10-02T14:37:05.869Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d9/8d95e906764a386a3d3b596f3c68bb63687dfca806373509f51ce8eea81f/xxhash-3.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:15e0dac10eb9309508bfc41f7f9deaa7755c69e35af835db9cb10751adebc35d", size = 31565, upload-time = "2025-10-02T14:37:06.966Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/55/28c93a3662f2d200c70704efe74aab9640e824f8ce330d8d3943bf7c9b3c/xxhash-3.6.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:89952ea539566b9fed2bbd94e589672794b4286f342254fad28b149f9615fef8", size = 193786 }, + { url = "https://files.pythonhosted.org/packages/c1/96/fec0be9bb4b8f5d9c57d76380a366f31a1781fb802f76fc7cda6c84893c7/xxhash-3.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e6f2ffb07a50b52465a1032c3cf1f4a5683f944acaca8a134a2f23674c2058", size = 212830 }, + { url = "https://files.pythonhosted.org/packages/c4/a0/c706845ba77b9611f81fd2e93fad9859346b026e8445e76f8c6fd057cc6d/xxhash-3.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5b848ad6c16d308c3ac7ad4ba6bede80ed5df2ba8ed382f8932df63158dd4b2", size = 211606 }, + { url = "https://files.pythonhosted.org/packages/67/1e/164126a2999e5045f04a69257eea946c0dc3e86541b400d4385d646b53d7/xxhash-3.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a034590a727b44dd8ac5914236a7b8504144447a9682586c3327e935f33ec8cc", size = 444872 }, + { url = "https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a8f1972e75ebdd161d7896743122834fe87378160c20e97f8b09166213bf8cc", size = 193217 }, + { url = "https://files.pythonhosted.org/packages/45/e6/52abf06bac316db33aa269091ae7311bd53cfc6f4b120ae77bac1b348091/xxhash-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ee34327b187f002a596d7b167ebc59a1b729e963ce645964bbc050d2f1b73d07", size = 210139 }, + { url = "https://files.pythonhosted.org/packages/34/37/db94d490b8691236d356bc249c08819cbcef9273a1a30acf1254ff9ce157/xxhash-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:339f518c3c7a850dd033ab416ea25a692759dc7478a71131fe8869010d2b75e4", size = 197669 }, + { url = "https://files.pythonhosted.org/packages/b7/36/c4f219ef4a17a4f7a64ed3569bc2b5a9c8311abdb22249ac96093625b1a4/xxhash-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bf48889c9630542d4709192578aebbd836177c9f7a4a2778a7d6340107c65f06", size = 210018 }, + { url = "https://files.pythonhosted.org/packages/fd/06/bfac889a374fc2fc439a69223d1750eed2e18a7db8514737ab630534fa08/xxhash-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5576b002a56207f640636056b4160a378fe36a58db73ae5c27a7ec8db35f71d4", size = 413058 }, + { url = "https://files.pythonhosted.org/packages/c9/d1/555d8447e0dd32ad0930a249a522bb2e289f0d08b6b16204cfa42c1f5a0c/xxhash-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af1f3278bd02814d6dedc5dec397993b549d6f16c19379721e5a1d31e132c49b", size = 190628 }, + { url = "https://files.pythonhosted.org/packages/d1/15/8751330b5186cedc4ed4b597989882ea05e0408b53fa47bcb46a6125bfc6/xxhash-3.6.0-cp310-cp310-win32.whl", hash = "sha256:aed058764db109dc9052720da65fafe84873b05eb8b07e5e653597951af57c3b", size = 30577 }, + { url = "https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:e82da5670f2d0d98950317f82a0e4a0197150ff19a6df2ba40399c2a3b9ae5fb", size = 31487 }, + { url = "https://files.pythonhosted.org/packages/9f/00/60f9ea3bb697667a14314d7269956f58bf56bb73864f8f8d52a3c2535e9a/xxhash-3.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a082ffff8c6ac07707fb6b671caf7c6e020c75226c561830b73d862060f281d", size = 27863 }, + { url = "https://files.pythonhosted.org/packages/04/5f/19fe357ea348d98ca22f456f75a30ac0916b51c753e1f8b2e0e6fb884cce/xxhash-3.6.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d0a9751f71a1a65ce3584e9cae4467651c7e70c9d31017fa57574583a4540248", size = 194665 }, + { url = "https://files.pythonhosted.org/packages/90/3b/d1f1a8f5442a5fd8beedae110c5af7604dc37349a8e16519c13c19a9a2de/xxhash-3.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b29ee68625ab37b04c0b40c3fafdf24d2f75ccd778333cfb698f65f6c463f62", size = 213550 }, + { url = "https://files.pythonhosted.org/packages/c4/ef/3a9b05eb527457d5db13a135a2ae1a26c80fecd624d20f3e8dcc4cb170f3/xxhash-3.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6812c25fe0d6c36a46ccb002f40f27ac903bf18af9f6dd8f9669cb4d176ab18f", size = 212384 }, + { url = "https://files.pythonhosted.org/packages/0f/18/ccc194ee698c6c623acbf0f8c2969811a8a4b6185af5e824cd27b9e4fd3e/xxhash-3.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ccbff013972390b51a18ef1255ef5ac125c92dc9143b2d1909f59abc765540e", size = 445749 }, + { url = "https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:297b7fbf86c82c550e12e8fb71968b3f033d27b874276ba3624ea868c11165a8", size = 193880 }, + { url = "https://files.pythonhosted.org/packages/82/fb/96213c8560e6f948a1ecc9a7613f8032b19ee45f747f4fca4eb31bb6d6ed/xxhash-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dea26ae1eb293db089798d3973a5fc928a18fdd97cc8801226fae705b02b14b0", size = 210912 }, + { url = "https://files.pythonhosted.org/packages/40/aa/4395e669b0606a096d6788f40dbdf2b819d6773aa290c19e6e83cbfc312f/xxhash-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7a0b169aafb98f4284f73635a8e93f0735f9cbde17bd5ec332480484241aaa77", size = 198654 }, + { url = "https://files.pythonhosted.org/packages/67/74/b044fcd6b3d89e9b1b665924d85d3f400636c23590226feb1eb09e1176ce/xxhash-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:08d45aef063a4531b785cd72de4887766d01dc8f362a515693df349fdb825e0c", size = 210867 }, + { url = "https://files.pythonhosted.org/packages/bc/fd/3ce73bf753b08cb19daee1eb14aa0d7fe331f8da9c02dd95316ddfe5275e/xxhash-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:929142361a48ee07f09121fe9e96a84950e8d4df3bb298ca5d88061969f34d7b", size = 414012 }, + { url = "https://files.pythonhosted.org/packages/ba/b3/5a4241309217c5c876f156b10778f3ab3af7ba7e3259e6d5f5c7d0129eb2/xxhash-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51312c768403d8540487dbbfb557454cfc55589bbde6424456951f7fcd4facb3", size = 191409 }, + { url = "https://files.pythonhosted.org/packages/c0/01/99bfbc15fb9abb9a72b088c1d95219fc4782b7d01fc835bd5744d66dd0b8/xxhash-3.6.0-cp311-cp311-win32.whl", hash = "sha256:d1927a69feddc24c987b337ce81ac15c4720955b667fe9b588e02254b80446fd", size = 30574 }, + { url = "https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:26734cdc2d4ffe449b41d186bbeac416f704a482ed835d375a5c0cb02bc63fef", size = 31481 }, + { url = "https://files.pythonhosted.org/packages/30/4e/15cd0e3e8772071344eab2961ce83f6e485111fed8beb491a3f1ce100270/xxhash-3.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:d72f67ef8bf36e05f5b6c65e8524f265bd61071471cd4cf1d36743ebeeeb06b7", size = 27861 }, + { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035 }, + { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914 }, + { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163 }, + { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411 }, + { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883 }, + { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392 }, + { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898 }, + { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655 }, + { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001 }, + { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431 }, + { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617 }, + { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534 }, + { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876 }, + { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127 }, + { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975 }, + { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241 }, + { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471 }, + { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936 }, + { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440 }, + { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990 }, + { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689 }, + { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068 }, + { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495 }, + { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620 }, + { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542 }, + { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880 }, + { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409 }, + { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736 }, + { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833 }, + { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348 }, + { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070 }, + { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907 }, + { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839 }, + { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304 }, + { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930 }, + { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787 }, + { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916 }, + { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799 }, + { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044 }, + { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343 }, + { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074 }, + { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388 }, + { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614 }, + { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024 }, + { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541 }, + { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305 }, + { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848 }, + { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142 }, + { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547 }, + { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214 }, + { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290 }, + { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795 }, + { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579 }, + { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854 }, + { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965 }, + { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484 }, + { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162 }, + { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007 }, + { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956 }, + { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401 }, + { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083 }, + { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913 }, + { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586 }, + { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526 }, + { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898 }, + { url = "https://files.pythonhosted.org/packages/b8/0b/b14510b38ba91caf43006209db846a696ceea6a847a0c9ba0a5b1adc53d6/xxhash-3.6.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5dc1e14d14fa0f5789ec29a7062004b5933964bb9b02aae6622b8f530dc40296", size = 41056 }, + { url = "https://files.pythonhosted.org/packages/50/55/15a7b8a56590e66ccd374bbfa3f9ffc45b810886c8c3b614e3f90bd2367c/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:881b47fc47e051b37d94d13e7455131054b56749b91b508b0907eb07900d1c13", size = 36251 }, + { url = "https://files.pythonhosted.org/packages/62/b2/5ac99a041a29e58e95f907876b04f7067a0242cb85b5f39e726153981503/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6dc31591899f5e5666f04cc2e529e69b4072827085c1ef15294d91a004bc1bd", size = 32481 }, + { url = "https://files.pythonhosted.org/packages/7b/d9/8d95e906764a386a3d3b596f3c68bb63687dfca806373509f51ce8eea81f/xxhash-3.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:15e0dac10eb9309508bfc41f7f9deaa7755c69e35af835db9cb10751adebc35d", size = 31565 }, ] [[package]] @@ -5222,9 +5249,9 @@ dependencies = [ { name = "numcodecs", version = "0.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/c4/187a21ce7cf7c8f00c060dd0e04c2a81139bb7b1ab178bba83f2e1134ce2/zarr-2.18.3.tar.gz", hash = "sha256:2580d8cb6dd84621771a10d31c4d777dca8a27706a1a89b29f42d2d37e2df5ce", size = 3603224, upload-time = "2024-09-04T23:20:16.595Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/c4/187a21ce7cf7c8f00c060dd0e04c2a81139bb7b1ab178bba83f2e1134ce2/zarr-2.18.3.tar.gz", hash = "sha256:2580d8cb6dd84621771a10d31c4d777dca8a27706a1a89b29f42d2d37e2df5ce", size = 3603224 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/c9/142095e654c2b97133ff71df60979422717b29738b08bc8a1709a5d5e0d0/zarr-2.18.3-py3-none-any.whl", hash = "sha256:b1f7dfd2496f436745cdd4c7bcf8d3b4bc1dceef5fdd0d589c87130d842496dd", size = 210723, upload-time = "2024-09-04T23:20:14.491Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c9/142095e654c2b97133ff71df60979422717b29738b08bc8a1709a5d5e0d0/zarr-2.18.3-py3-none-any.whl", hash = "sha256:b1f7dfd2496f436745cdd4c7bcf8d3b4bc1dceef5fdd0d589c87130d842496dd", size = 210723 }, ] [[package]] @@ -5244,16 +5271,16 @@ dependencies = [ { name = "packaging", marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/67/14be68a7bad15eecda09b1e81fca2420f7533645fe187bf4d6104c1aad52/zarr-3.1.3.tar.gz", hash = "sha256:01342f3e26a02ed5670db608a5576fbdb8d76acb5c280bd2d0082454b1ba6f79", size = 349125, upload-time = "2025-09-18T19:32:41.688Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/67/14be68a7bad15eecda09b1e81fca2420f7533645fe187bf4d6104c1aad52/zarr-3.1.3.tar.gz", hash = "sha256:01342f3e26a02ed5670db608a5576fbdb8d76acb5c280bd2d0082454b1ba6f79", size = 349125 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl", hash = "sha256:45f67f87f65f14fa453f99dd8110a5936b7ac69f3a21981d33e90407c80c302a", size = 276427, upload-time = "2025-09-18T19:32:40.042Z" }, + { url = "https://files.pythonhosted.org/packages/1a/71/9de7229515a53d1cc5705ca9c411530f711a2242f962214d9dbfe2741aa4/zarr-3.1.3-py3-none-any.whl", hash = "sha256:45f67f87f65f14fa453f99dd8110a5936b7ac69f3a21981d33e90407c80c302a", size = 276427 }, ] [[package]] name = "zipp" version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 }, ] From fe7162ecbb65c8dad6fa27c26fcbee1019e92537 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas Date: Fri, 19 Dec 2025 17:36:29 +0100 Subject: [PATCH 11/12] Update version. Prep Changelog for release. --- CHANGELOG.md | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 890a5411..c28e1035 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). * **Fixed** for any bug fixes. * **Removed** for now removed features. -## [ M.m.P ] - [ yyyy-mm-dd ] +## [ 0.9.0 ] - [ 2025-12-19 ] ### Added @@ -24,6 +24,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - `Circuit.export` expects an `Exporter` instance as input argument (instead of an `ExportFormat`) - Moved Bloch sphere rotation composition from the merger pass interface to Bloch sphere rotation semantic module +- Refactor gate semantics as attributes of gates ### Removed diff --git a/pyproject.toml b/pyproject.toml index 1698ea87..45289732 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "opensquirrel" -version = "0.7.0" +version = "0.9.0" description = "A quantum circuit transformation and manipulation tool" authors = [ { name = "Quantum Inspire", email = "support@quantum-inspire.com" }, From 212bb5b10e73e6cb7b71a6ff11964d9a860a2fe5 Mon Sep 17 00:00:00 2001 From: Chris Elenbaas Date: Fri, 19 Dec 2025 17:56:06 +0100 Subject: [PATCH 12/12] Remove files. --- .../passes/exporter/cqasmv1_exporter.py | 174 ------------------ opensquirrel/passes/exporter/export_format.py | 6 - opensquirrel/utils/check_mapper.py | 47 ----- opensquirrel/utils/math.py | 12 -- tests/instructions/test_instructions.py | 98 ---------- tests/ir/semantics/test_canonical_gate.py | 41 ----- tests/ir/semantics/test_controlled_gate.py | 11 -- tests/ir/semantics/test_matrix_gate.py | 46 ----- 8 files changed, 435 deletions(-) delete mode 100644 opensquirrel/passes/exporter/cqasmv1_exporter.py delete mode 100644 opensquirrel/passes/exporter/export_format.py delete mode 100644 opensquirrel/utils/check_mapper.py delete mode 100644 opensquirrel/utils/math.py delete mode 100644 tests/instructions/test_instructions.py delete mode 100644 tests/ir/semantics/test_canonical_gate.py delete mode 100644 tests/ir/semantics/test_controlled_gate.py delete mode 100644 tests/ir/semantics/test_matrix_gate.py diff --git a/opensquirrel/passes/exporter/cqasmv1_exporter.py b/opensquirrel/passes/exporter/cqasmv1_exporter.py deleted file mode 100644 index 2f7ba129..00000000 --- a/opensquirrel/passes/exporter/cqasmv1_exporter.py +++ /dev/null @@ -1,174 +0,0 @@ -from __future__ import annotations - -import re -from typing import TYPE_CHECKING, Any, SupportsFloat, SupportsInt - -from opensquirrel.exceptions import UnsupportedGateError -from opensquirrel.ir import ( - Barrier, - Float, - Init, - Int, - IRVisitor, - Measure, - Qubit, - Reset, - Wait, -) -from opensquirrel.ir.semantics import ( - BlochSphereRotation, - ControlledGate, - MatrixGate, -) - -if TYPE_CHECKING: - from opensquirrel import ( - CNOT, - CR, - CZ, - SWAP, - CRk, - ) - from opensquirrel.circuit import Circuit - from opensquirrel.ir.semantics import ( - BsrAngleParam, - BsrNoParams, - ) - from opensquirrel.register_manager import RegisterManager - - -class CqasmV1ExporterParseError(Exception): - pass - - -class _CQASMv1Creator(IRVisitor): - # Precision used when writing out a float number - FLOAT_PRECISION = 8 - - def __init__(self, register_manager: RegisterManager) -> None: - self.register_manager = register_manager - qubit_register_size = self.register_manager.get_qubit_register_size() - self.output = "version 1.0{}\n\n".format(f"\n\nqubits {qubit_register_size}" if qubit_register_size > 0 else "") - - def visit_qubit(self, qubit: Qubit) -> str: - qubit_register_name = self.register_manager.get_qubit_register_name() - return f"{qubit_register_name}[{qubit.index}]" - - def visit_int(self, i: SupportsInt) -> str: - i = Int(i) - return f"{i.value}" - - def visit_float(self, f: SupportsFloat) -> str: - f = Float(f) - return f"{f.value:.{self.FLOAT_PRECISION}}" - - def visit_bloch_sphere_rotation(self, gate: BlochSphereRotation) -> None: - if isinstance(gate, BlochSphereRotation) and type(gate) is not BlochSphereRotation: - return - raise UnsupportedGateError(gate) - - def visit_matrix_gate(self, gate: MatrixGate) -> None: - if isinstance(gate, MatrixGate) and type(gate) is not MatrixGate: - return - raise UnsupportedGateError(gate) - - def visit_controlled_gate(self, gate: ControlledGate) -> None: - if isinstance(gate, ControlledGate) and type(gate) is not ControlledGate: - return - raise UnsupportedGateError(gate) - - def visit_bsr_no_params(self, gate: BsrNoParams) -> None: - qubit_operand = gate.qubit.accept(self) - self.output += f"{gate.name.lower()} {qubit_operand}\n" - - def visit_bsr_angle_param(self, gate: BsrAngleParam) -> None: - theta_argument = gate.theta.accept(self) - qubit_operand = gate.qubit.accept(self) - self.output += f"{gate.name.lower()} {qubit_operand}, {theta_argument}\n" - - def visit_swap(self, gate: SWAP) -> Any: - qubit_operand_0 = gate.qubit_0.accept(self) - qubit_operand_1 = gate.qubit_1.accept(self) - self.output += f"swap {qubit_operand_0}, {qubit_operand_1}\n" - - def visit_cnot(self, gate: CNOT) -> None: - control_qubit_operand = gate.control_qubit.accept(self) - target_qubit_operand = gate.target_qubit.accept(self) - self.output += f"cnot {control_qubit_operand}, {target_qubit_operand}\n" - - def visit_cz(self, gate: CZ) -> None: - control_qubit_operand = gate.control_qubit.accept(self) - target_qubit_operand = gate.target_qubit.accept(self) - self.output += f"cz {control_qubit_operand}, {target_qubit_operand}\n" - - def visit_cr(self, gate: CR) -> None: - control_qubit_operand = gate.control_qubit.accept(self) - theta_argument = gate.theta.accept(self) - target_qubit_operand = gate.target_qubit.accept(self) - self.output += f"cr({theta_argument}) {control_qubit_operand}, {target_qubit_operand}\n" - - def visit_crk(self, gate: CRk) -> None: - control_qubit_operand = gate.control_qubit.accept(self) - k_argument = gate.k.accept(self) - target_qubit_operand = gate.target_qubit.accept(self) - self.output += f"crk({k_argument}) {control_qubit_operand}, {target_qubit_operand}\n" - - def visit_measure(self, measure: Measure) -> None: - qubit_argument = measure.arguments[0].accept(self) - self.output += f"measure_z {qubit_argument}\n" - - def visit_init(self, init: Init) -> None: - qubit_argument = init.arguments[0].accept(self) - self.output += f"prep_z {qubit_argument}\n" - - def visit_reset(self, reset: Reset) -> None: - qubit_argument = reset.arguments[0].accept(self) - self.output += f"prep_z {qubit_argument}\n" - - def visit_barrier(self, barrier: Barrier) -> None: - qubit_argument = barrier.arguments[0].accept(self) - self.output += f"barrier {qubit_argument}\n" - - def visit_wait(self, wait: Wait) -> None: - qubit_argument = wait.arguments[0].accept(self) - parameter = wait.arguments[1].accept(self) - self.output += f"wait {qubit_argument}, {parameter}\n" - - -def post_process(output: str) -> str: - return _merge_barrier_groups(output) - - -def _merge_barrier_groups(output: str) -> str: - ret: str = "" - barrier_group_indices: list[int] = [] - for line in output.split("\n"): - if not line.startswith("barrier"): - if barrier_group_indices: - ret += _dump_barrier_group(barrier_group_indices) - barrier_group_indices = [] - ret += f"{line}\n" - else: - barrier_group_indices.append(_get_barrier_index(line)) - return ret - - -def _dump_barrier_group(indices: list[int]) -> str: - return "barrier q[{}]\n".format(", ".join(map(str, indices)) if len(indices) != 0 else "") - - -def _get_barrier_index(line: str) -> int: - barrier_index_match = re.search(r"\d+", line) - if not barrier_index_match: - msg = "expecting a barrier index but found none" - raise CqasmV1ExporterParseError(msg) - return int(barrier_index_match.group(0)) - - -def export(circuit: Circuit) -> str: - cqasmv1_creator = _CQASMv1Creator(circuit.register_manager) - - circuit.ir.accept(cqasmv1_creator) - - # Remove all trailing lines and leave only one - return post_process(cqasmv1_creator.output).rstrip() + "\n" diff --git a/opensquirrel/passes/exporter/export_format.py b/opensquirrel/passes/exporter/export_format.py deleted file mode 100644 index 4397ffb9..00000000 --- a/opensquirrel/passes/exporter/export_format.py +++ /dev/null @@ -1,6 +0,0 @@ -from enum import Enum - - -class ExportFormat(Enum): - QUANTIFY_SCHEDULER = 0 - CQASM_V1 = 1 diff --git a/opensquirrel/utils/check_mapper.py b/opensquirrel/utils/check_mapper.py deleted file mode 100644 index bfb1d440..00000000 --- a/opensquirrel/utils/check_mapper.py +++ /dev/null @@ -1,47 +0,0 @@ -"""This module contains checks for the ``Mapper`` pass.""" - -from __future__ import annotations - -from copy import deepcopy - -from opensquirrel import I -from opensquirrel.circuit import Circuit -from opensquirrel.ir import IR, Measure -from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate -from opensquirrel.passes.mapper.general_mapper import Mapper -from opensquirrel.register_manager import BitRegister, QubitRegister, RegisterManager - - -def _check_scenario(circuit: Circuit, mapper: Mapper) -> None: - """Check if the given scenario can be mapped. - - Args: - circuit: Circuit containing the scenario to check against. - mapper: Mapper to use. - """ - ir_copy = deepcopy(circuit.ir) - circuit.map(mapper) - assert circuit.ir == ir_copy, "A Mapper pass should not change the IR" - - -def check_mapper(mapper: Mapper) -> None: - """Check if the `mapper` complies with the OpenSquirrel requirements. - - If a ``Mapper`` implementation passes these checks, it should be compatible with the ``Circuit.map`` method. - - Args: - mapper: Mapper to check. - """ - assert isinstance(mapper, Mapper) - - register_manager = RegisterManager(QubitRegister(10), BitRegister(10)) - ir = IR() - circuit = Circuit(register_manager, ir) - _check_scenario(circuit, mapper) - - ir = IR() - ir.add_gate(BlochSphereRotation(42, (1, 0, 0), 1, 2)) - ir.add_gate(ControlledGate(42, I(100))) - ir.add_non_unitary(Measure(42, 42, (0, 0, 1))) - Circuit(register_manager, ir) - _check_scenario(circuit, mapper) diff --git a/opensquirrel/utils/math.py b/opensquirrel/utils/math.py deleted file mode 100644 index 3727f32c..00000000 --- a/opensquirrel/utils/math.py +++ /dev/null @@ -1,12 +0,0 @@ -import math - - -def acos(value: float) -> float: - """Fix float approximations like 1.0000000000002, which acos does not like.""" - value = max(min(value, 1.0), -1.0) - return math.acos(value) - - -def are_axes_consecutive(axis_a_index: int, axis_b_index: int) -> bool: - """Check if axis 'a' immediately precedes axis 'b' (in a circular fashion [x, y, z, x...]).""" - return axis_a_index - axis_b_index in (-1, 2) diff --git a/tests/instructions/test_instructions.py b/tests/instructions/test_instructions.py deleted file mode 100644 index e0cd3781..00000000 --- a/tests/instructions/test_instructions.py +++ /dev/null @@ -1,98 +0,0 @@ -from opensquirrel import Circuit - - -def test_parse_instructions() -> None: - circuit = Circuit.from_string( - """ - version 3.0 - - qubit[2] q - bit[2] b - - // Initialization - init q - - // Control instructions - barrier q - wait(5) q - - // Single-qubit instructions - I q[0] - H q[0] - X q[0] - X90 q[0] - mX90 q[0] - Y q[0] - Y90 q[0] - mY90 q[0] - Z q[0] - S q[0] - Sdag q[0] - T q[0] - Tdag q[0] - Rn(1,0,0,pi/2,pi/4) q[0] - Rx(pi/2) q[0] - Ry(pi/2) q[0] - Rz(tau) q[0] - - // Reset instruction - reset q - - // Measurement instruction (mid-circuit) - b = measure q - - // Two-qubit instructions - CNOT q[0], q[1] - CZ q[0], q[1] - CR(pi) q[0], q[1] - CRk(2) q[0], q[1] - SWAP q[0], q[1] - - // Measurement instruction (final) - b = measure q - """, - ) - - assert ( - str(circuit) - == """version 3.0 - -qubit[2] q -bit[2] b - -init q[0] -init q[1] -barrier q[0] -barrier q[1] -wait(5) q[0] -wait(5) q[1] -I q[0] -H q[0] -X q[0] -X90 q[0] -mX90 q[0] -Y q[0] -Y90 q[0] -mY90 q[0] -Z q[0] -S q[0] -Sdag q[0] -T q[0] -Tdag q[0] -Rn(1.0, 0.0, 0.0, 1.5707963, 0.78539816) q[0] -Rx(1.5707963) q[0] -Ry(1.5707963) q[0] -Rz(0.0) q[0] -reset q[0] -reset q[1] -b[0] = measure q[0] -b[1] = measure q[1] -CNOT q[0], q[1] -CZ q[0], q[1] -CR(3.1415927) q[0], q[1] -CRk(2) q[0], q[1] -SWAP q[0], q[1] -b[0] = measure q[0] -b[1] = measure q[1] -""" - ) diff --git a/tests/ir/semantics/test_canonical_gate.py b/tests/ir/semantics/test_canonical_gate.py deleted file mode 100644 index c7dc13f0..00000000 --- a/tests/ir/semantics/test_canonical_gate.py +++ /dev/null @@ -1,41 +0,0 @@ -import numpy as np -import numpy.testing -import pytest -from numpy.typing import NDArray - -from opensquirrel.ir.semantics import CanonicalAxis, CanonicalGate -from opensquirrel.ir.unitary import Gate - - -class TestCanonicalAxis: - @pytest.mark.parametrize( - ("axis", "restricted_axis"), - [ - (np.array([1, 1, 1], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), - (np.array([-1, -1, -1], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), - (np.array([1, 0, 0], dtype=np.float64), np.array([0, 0, 0], dtype=np.float64)), - (np.array([3 / 4, 1 / 4, 0], dtype=np.float64), np.array([1 / 4, 1 / 4, 0], dtype=np.float64)), - (np.array([5 / 8, 3 / 8, 0], dtype=np.float64), np.array([3 / 8, 3 / 8, 0], dtype=np.float64)), - (np.array([3 / 4, 3 / 4, 3 / 4], dtype=np.float64), np.array([1 / 4, 1 / 4, 1 / 4], dtype=np.float64)), - (np.array([1 / 2, 3 / 4, 3 / 4], dtype=np.float64), np.array([1 / 2, 1 / 4, 1 / 4], dtype=np.float64)), - (np.array([64 / 2, 32 / 4, 33 / 4], dtype=np.float64), np.array([1 / 4, 0, 0], dtype=np.float64)), - ], - ) - def test_restrict_to_weyl_chamber(self, axis: NDArray[np.float64], restricted_axis: NDArray[np.float64]) -> None: - numpy.testing.assert_array_almost_equal(CanonicalAxis.restrict_to_weyl_chamber(axis), restricted_axis) - - -class TestCanonicalGate: - @pytest.fixture - def gate(self) -> CanonicalGate: - return CanonicalGate(0, 1, (0, 0, 0)) - - def test_eq(self, gate: CanonicalGate) -> None: - assert gate.is_identity() - - def test_init(self, gate: CanonicalGate) -> None: - assert isinstance(gate, Gate) - assert hasattr(gate, "axis") - assert isinstance(gate.axis, CanonicalAxis) - with pytest.raises(ValueError, match="the two qubits cannot be the same"): - CanonicalGate(0, 0, (0, 0, 0)) diff --git a/tests/ir/semantics/test_controlled_gate.py b/tests/ir/semantics/test_controlled_gate.py deleted file mode 100644 index df0a25fd..00000000 --- a/tests/ir/semantics/test_controlled_gate.py +++ /dev/null @@ -1,11 +0,0 @@ -from math import pi - -import pytest - -from opensquirrel.ir.semantics import BlochSphereRotation, ControlledGate - - -class TestControlledGate: - def test_control_gate_same_control_and_target_qubit(self) -> None: - with pytest.raises(ValueError, match="control and target qubit cannot be the same"): - ControlledGate(0, BlochSphereRotation(0, [0, 0, 1], angle=pi, phase=pi / 2)) diff --git a/tests/ir/semantics/test_matrix_gate.py b/tests/ir/semantics/test_matrix_gate.py deleted file mode 100644 index 2333f822..00000000 --- a/tests/ir/semantics/test_matrix_gate.py +++ /dev/null @@ -1,46 +0,0 @@ -import numpy as np -import pytest - -from opensquirrel.ir import Qubit -from opensquirrel.ir.semantics import MatrixGate - - -class TestMatrixGate: - @pytest.fixture - def gate(self) -> MatrixGate: - cnot_matrix = [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - ] - return MatrixGate(cnot_matrix, operands=[42, 100]) - - def test_array_like(self) -> None: - gate = MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]], [0, 1]) - assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[0], Qubit[1]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" - ) - - def test_incorrect_array(self) -> None: - with pytest.raises(ValueError, match=r".* inhomogeneous shape after .*") as e_info: - MatrixGate([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 0]], [0, 1]) - assert "setting an array element with a sequence." in str(e_info.value) - - def test_repr(self, gate: MatrixGate) -> None: - assert ( - repr(gate) == "MatrixGate(qubits=[Qubit[42], Qubit[100]], matrix=[[1.+0.j 0.+0.j 0.+0.j 0.+0.j] " - "[0.+0.j 1.+0.j 0.+0.j 0.+0.j] [0.+0.j 0.+0.j 0.+0.j 1.+0.j] [0.+0.j 0.+0.j 1.+0.j 0.+0.j]])" - ) - - def test_get_qubit_operands(self, gate: MatrixGate) -> None: - assert gate.get_qubit_operands() == [Qubit(42), Qubit(100)] - - def test_is_identity(self, gate: MatrixGate) -> None: - assert MatrixGate(np.eye(4, dtype=np.complex128), operands=[42, 100]).is_identity() - assert not gate.is_identity() - - def test_matrix_gate_same_control_and_target_qubit(self) -> None: - with pytest.raises(ValueError, match="operands cannot be the same"): - MatrixGate(np.eye(4, dtype=np.complex128), [0, 0])