diff --git a/.gitattributes b/.gitattributes index a8dc694..91d7e6c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,3 @@ # Auto detect text files and perform LF normalization * text=auto - diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6e8dfb8 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,58 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We pledge to make our community welcoming, safe, and equitable for all. + +We are committed to fostering an environment that respects and promotes the dignity, rights, and contributions of all individuals, regardless of characteristics including race, ethnicity, caste, color, age, physical characteristics, neurodiversity, disability, sex or gender, gender identity or expression, sexual orientation, language, philosophy or religion, national or social origin, socio-economic position, level of education, or other status. The same privileges of participation are extended to everyone who participates in good faith and in accordance with this Covenant. + +## Encouraged Behaviors + +While acknowledging differences in social norms, we all strive to meet our community’s expectations for positive behavior. We also understand that our words and actions may be interpreted differently than we intend based on culture, background, or native language. + +With these considerations in mind, we agree to behave mindfully toward each other and act in ways that center our shared values, including: + +1. Respecting the **purpose of our community**, our activities, and our ways of gathering. +2. Engaging **kindly and honestly** with others. +3. Respecting **different viewpoints** and experiences. +4. **Taking responsibility** for our actions and contributions. +5. Gracefully giving and accepting **constructive feedback**. +6. Committing to **repairing harm** when it occurs. +7. Behaving in other ways that promote and sustain the **well-being of our community**. + +## Restricted Behaviors + +We agree to restrict the following behaviors in our community. Instances, threats, and promotion of these behaviors are violations of this Code of Conduct. + +1. **Harassment**. Violating explicitly expressed boundaries or engaging in unnecessary personal attention after any clear request to stop. +2. **Character attacks**. Making insulting, demeaning, or pejorative comments directed at a community member or group of people. +3. **Stereotyping or discrimination**. Characterizing anyone’s personality or behavior on the basis of immutable identities or traits. +4. **Sexualization**. Behaving in a way that would generally be considered inappropriately intimate in the context or purpose of the community. +5. **Violating confidentiality**. Sharing or acting on someone’s personal or private information without their permission. +6. **Endangerment**. Causing, encouraging, or threatening violence or other harm toward any person or group. +7. Behaving in other ways that **threaten the well-being** of our community. + +### Other Restrictions + +1. **Misleading identity**. Impersonating someone else for any reason, or pretending to be someone else to evade enforcement actions. +2. **Failing to credit sources**. Not properly crediting the sources of content you contribute. +3. **Promotional materials**. Sharing marketing or other commercial content in a way that is outside the norms of the community. +4. **Irresponsible communication**. Failing to responsibly present content which includes, links or describes any other restricted behaviors. + + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + + + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 3.0, available at [https://www.contributor-covenant.org/version/3/0/code_of_conduct/](https://www.contributor-covenant.org/version/3/0/code_of_conduct/) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..f7f87c8 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,42 @@ +# Introduction + +Thank you for your interest in contributing to our project! We welcome contributions from the community and appreciate your efforts to help improve our codebase. This document provides guidelines and instructions for contributing to our project. + + +## Installation + +To set up the development environment, please follow these steps: + +1. Fork the repository: + ```bash + gh repo fork MatchCake/TorchPfaffian + ``` +2. Clone your forked repository: + ```bash + git clone + ``` +3. Navigate to the project directory: +4. Initialize the Virtual Environment using [uv](https://docs.astral.sh/uv/): + ```bash + uv sync --dev --extra + ``` + - Extra options: See the [README.md](../README.md) for details on extra options for installation. +5. Set up Pre-commit hooks: + ```bash + uv run pre-commit install + ``` + +# Guidelines + +1. When you whish to contribute, please create a new fork of the repository and create a new branch for your changes. +2. Make your changes and commit them with clear and descriptive commit messages. +3. Push your changes to your forked repository. +4. Create a pull request to the main repository on the `dev` branch, describing the changes you have made and why they are necessary. +5. Our team will review your pull request and provide feedback. We may ask for changes or improvements before merging your contribution. +6. Once your contribution is approved, it will be merged into the main repository on the `dev` branch and will eventually be included in the next release. +7. Please ensure that your code follows the project's coding standards and guidelines, and that it includes appropriate tests and documentation. + + +## Code of Conduct + +We expect all contributors to adhere to our code of conduct, which can be found in the [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) file. This code of conduct outlines our expectations for behavior and communication within the community, and we take it seriously to ensure a welcoming and inclusive environment for all contributors. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..4bad241 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,64 @@ +name: Bug report +description: File a bug report +title: '[BUG]' +labels: "bug :bug:" + +body: + - type: markdown + id: description + attributes: + value: | + ## Before posting a bug report + Search existing GitHub issues to make sure the issue does not already exist. + + # Issue description + Description of the issue - include code snippets in the Source code section below and screenshots if relevant. + - type: textarea + id: expected + attributes: + label: Expected behavior + description: | + What do you expect to happen? + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual behavior + description: | + What actually happens? + validations: + required: true + - type: textarea + id: info + attributes: + label: Additional information + description: | + Please provide any additional information here that might be necessary to reproduce the issue. + - type: textarea + id: sourcecode + attributes: + label: Source code + description: Please include a minimal non-working example, or any other code related to the issue. + render: shell + - type: textarea + id: tracebacks + attributes: + label: Tracebacks + description: Please include the error tracebacks related to the issue here. + render: shell + - type: textarea + id: system + attributes: + label: System information + description: Please provide informations about you python version and os. The command `python -c "import sys; print(sys.version, sys.platform)"` can be used to get this information. Provide also the output of `pip list` command. + render: shell + validations: + required: true + - type: checkboxes + id: terms + attributes: + label: Existing GitHub issues + options: + - label: I have searched existing GitHub issues to make sure the issue does not already exist. + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..9ca5a64 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,44 @@ +name: Feature request +description: Suggest a new feature +labels: "enhancement :sparkles:" + +body: + - type: markdown + id: description + attributes: + value: | + ## Before posting a feature request + Search existing GitHub issues to make sure the issue does not already exist. + + # Feature description + Description of the feature request - include code snippets and screenshots here if relevant. + - type: textarea + id: details + attributes: + label: Feature details + description: | + What feature would you like to have? + validations: + required: true + - type: textarea + id: implementation + attributes: + label: Implementation + description: | + Do you have an idea for how this could be implemented? Please include those details here. + - type: dropdown + id: urgency + attributes: + label: How important would you say this feature is? + options: + - "1: Not important. Would be nice to have." + - "2: Somewhat important. Needed this quarter." + - "3: Very important! Blocking work." + validations: + required: true + - type: textarea + id: info + attributes: + label: Additional information + description: | + Please provide any additional information here. Include potential alternative solutions, or workarounds, as well as references, if any. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..38248d1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,19 @@ +# Description + +Please provide a brief description of the changes you are making in this pull request. + +------------------------------------------------------------------------------------------------------------ + +# Checklist + +Please complete the following checklist when submitting a PR. The PR will not be reviewed until all items are checked. + +- [ ] All new features include a unit test. + Make sure that the tests passed and the coverage is + sufficient by running + `uv run pytest --session-timeout=600`. +- [ ] All new functions and code are clearly documented. +- [ ] The code passes all pre-commit hooks. + You can do this by running `uvx pre-commit run --all-files`. +- [ ] The code is type-checked using Mypy. + You can do this by running `uv run mypy src tests`. diff --git a/.github/workflows/build_dist.yml b/.github/workflows/build_dist.yml index 7ce5d56..238b400 100644 --- a/.github/workflows/build_dist.yml +++ b/.github/workflows/build_dist.yml @@ -4,6 +4,15 @@ on: push: branches: ["main"] +permissions: + contents: write + pull-requests: write + actions: write + checks: write + statuses: write + issues: write + discussions: write + id-token: write jobs: Build-Dist: @@ -12,35 +21,86 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v3 with: - python-version: "3.10" + python-version: "3.11" + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + version: "0.9.2" + python-version: "3.11" + enable-cache: true - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install flake8 - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - pip install wheel - python -m pip install --upgrade build + uv venv .venv + uv sync --locked --dev --extra cpu + + - name: Gather new package version + id: version + uses: anothrNick/github-tag-action@1.61.0 + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + WITH_V: false + DEFAULT_BUMP: patch + DRY_RUN: true + + - name: Bump package version in pyproject.toml + run: | + uv version ${{steps.version.outputs.new_tag}} + uv lock + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable - name: Build dist run: | - python -m build + uv run python -m build --sdist --wheel --no-isolation --outdir dist/ . + uv run twine check dist/* - - name: Commit + - name: Commit updated pyproject.toml run: | - git add -f dist git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git commit -m "Update dist" + git add pyproject.toml + git add uv.lock + git diff-index --quiet HEAD || git commit -m "Updating version of pyproject.toml" - - name: Push + - name: Push the new pyproject.toml uses: ad-m/github-push-action@master with: github_token: ${{secrets.GITHUB_TOKEN}} branch: main force: true - directory: dist + - name: Create Tag + id: tag + uses: anothrNick/github-tag-action@1.61.0 + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + WITH_V: false + DEFAULT_BUMP: patch + DRY_RUN: false + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.tag.outputs.new_tag }} + generate_release_notes: true + + - name: Merge 'main' branch -> 'dev' branch + uses: devmasx/merge-branch@master + with: + type: now + from_branch: main + target_branch: dev + message: "Automatic merge from 'main' into 'dev' [skip actions]" + label_name: "gh-actions" + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + skip_existing: true + verbose: true diff --git a/.github/workflows/coverage_badge.yml b/.github/workflows/coverage_badge.yml new file mode 100644 index 0000000..158c43b --- /dev/null +++ b/.github/workflows/coverage_badge.yml @@ -0,0 +1,51 @@ +name: Update-Coverage-Badge + +on: + push: + branches: ["main"] + +permissions: + contents: write + pull-requests: write + actions: write + checks: write + statuses: write + issues: write + discussions: write + id-token: write + +jobs: + Update-Coverage-Badge: + name: Update-Coverage-Badge + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.11 + uses: actions/setup-python@v3 + with: + python-version: "3.11" + + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + version: "0.9.2" + python-version: "3.11" + enable-cache: true + + - name: Install dependencies + run: | + uv venv .venv + uv sync --locked --dev --extra cpu + + - name: Test Unittests with pytest + run: | + uv run pytest tests --cov=src --cov-branch --cov-report="xml:tests/.tmp/coverage.xml" --cov-report=term-missing + + - name: Upload Coverage to Codecov + uses: codecov/codecov-action@v5 + with: + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} + files: tests/.tmp/coverage.xml + verbose: true diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7ddad9b..6dfd348 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,7 +2,7 @@ name: Docs on: push: - branches: ["main"] + branches: ["main", "dev"] jobs: @@ -12,28 +12,32 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + with: + fetch-depth: 0 + + - name: Set up Python 3.11 uses: actions/setup-python@v3 with: - python-version: "3.10" + python-version: "3.11" + + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + version: "0.9.2" + python-version: "3.11" + enable-cache: true - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install flake8 - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - pip install -U sphinx==6.2.1 docutils==0.18.1 sphinx_rtd_theme==1.2.2 sphinxcontrib-bibtex==2.5.0 - pip install sphinx-theme - pip install groundwork-sphinx-theme - pip install karma_sphinx_theme - pip install sphinx-mdinclude + uv venv .venv + uv sync --locked --dev --group docs --extra cpu - name: Build the sphinx docs run: | - sphinx-apidoc -f -o ./sphinx/source ./src/torch_pfaffian - make -C sphinx clean - python sphinx/clean_html_files.py - make -C sphinx html + uv run sphinx-apidoc -f -o ./sphinx/source ./src/torch_pfaffian + uv run make -C sphinx clean + uv run python sphinx/clean_html_files.py + uv run make -C sphinx html touch sphinx/build/html/.nojekyll - name: Checkout gh-pages branch @@ -44,7 +48,7 @@ jobs: - name: Copy build files to docs folder run: | cp -a sphinx/build/html/. docs/ - python sphinx/make_html_files_list.py + uv run python sphinx/make_html_files_list.py rm -rf sphinx/build - name: Commit to gh-pages branch @@ -60,4 +64,4 @@ jobs: github_token: ${{secrets.GITHUB_TOKEN}} branch: gh-pages force: true - directory: docs \ No newline at end of file + directory: docs diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index bdbd65e..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Publish to PyPI.org -on: - release: - types: [published] -jobs: - pypi: - runs-on: ubuntu-latest - environment: - name: pypi - url: https://pypi.org/p/TorchPfaffian - permissions: - id-token: write - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - pip install wheel - - - name: Build dist - run: | - python -m pip install --upgrade build - python -m build - - name: Publish distribution to PyPI - if: startsWith(github.ref, 'refs/tags') - uses: pypa/gh-action-pypi-publish@release/v1 - with: - skip_existing: true - verbose: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b0d6784..e3936e8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,67 +1,145 @@ -# This workflow will install Python dependencies, run tests and lint with a single version of Python -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - name: Tests on: - push: - branches: [ "main" ] pull_request: - branches: [ "main" ] + branches: [ "*" ] permissions: - contents: read + contents: write + pull-requests: write + actions: write + checks: write + statuses: write + issues: write + discussions: write jobs: Run-tests-on-Ubuntu: name: Run tests on Ubuntu-latest runs-on: ubuntu-latest + strategy: + matrix: + python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14", ] steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - pip install -U pytest-cov coverage-lcov - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - python run_pytests.py tests --N_RANDOM_TESTS_PER_CASE=10 --run_slow=False - coverage-lcov + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + version: "0.9.2" + python-version: ${{ matrix.python-version }} + enable-cache: true + - name: Install dependencies + run: | + uv venv .venv + uv sync --locked --dev --extra cpu + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Build native extension + run: uv run maturin develop -m rust/Cargo.toml + - name: Test Linting + run: | + uv run ruff format --check src tests + uv run ruff check src tests + - name: Test Typing + continue-on-error: true + run: | + uv run mypy src tests + - name: Test Unittests with pytest + run: | + uv run pytest tests \ + ${{ github.event.pull_request.head.repo.full_name != github.repository && '--cov-fail-under=98' || '' }} \ + --cov=src --cov-branch --cov-report="xml:tests/.tmp/coverage.xml" --cov-report=term-missing --durations=30 --session-timeout=600 + + - name: Debug coverage before upload + if: matrix.python-version == '3.11' + run: | + echo "=== Coverage summary ===" + head -5 tests/.tmp/coverage.xml + + - name: Upload coverage artifact + if: | + matrix.python-version == '3.11' && + github.event.pull_request.head.repo.full_name == github.repository + uses: actions/upload-artifact@v4 + with: + name: coverage + path: tests/.tmp/coverage.xml + if-no-files-found: error + retention-days: 1 + + - name: Test Build + if: ${{ matrix.python-version == '3.11' }} + run: | + uv run python -m build --sdist --wheel --no-isolation --outdir dist/ . + uv run twine check dist/* Run-tests-on-Windows: name: Run tests on Windows-latest + needs: [ Run-tests-on-Ubuntu ] runs-on: windows-latest + if: success() + strategy: + matrix: + python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14", ] steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - pip install -r requirements.txt - pip install git+https://github.com/JeremieGince/PythonBasicTools - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - python run_pytests.py tests --N_RANDOM_TESTS_PER_CASE=10 --run_slow=False + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + version: "0.9.2" + python-version: ${{ matrix.python-version }} + enable-cache: true + - name: Install dependencies + run: | + uv venv .venv + uv sync --locked --dev --extra cpu + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Build native extension + run: uv run maturin develop -m rust/Cargo.toml + - name: Test Unittests with pytest + run: | + uv run pytest tests --session-timeout=600 + + + Coverage: + name: Post Coverage Report + needs: [ Run-tests-on-Ubuntu ] + runs-on: ubuntu-latest + if: success() && github.event.pull_request.head.repo.full_name == github.repository + permissions: + contents: write + pull-requests: write + actions: write + checks: write + statuses: write + issues: write + discussions: write + steps: + - uses: actions/checkout@v4 + - name: Download coverage artifact + uses: actions/download-artifact@v4 + with: + path: tests/.tmp + name: coverage + - run: ls -R tests/.tmp + - name: Debug coverage file + run: cat tests/.tmp/coverage.xml | head -50 + - name: Post coverage + uses: orgoro/coverage@v3.2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + coverageFile: tests/.tmp/coverage.xml + thresholdAll: 0.98 + thresholdNew: 0.98 + thresholdModified: 0.98 diff --git a/.gitignore b/.gitignore index a368195..59da262 100644 --- a/.gitignore +++ b/.gitignore @@ -178,6 +178,7 @@ instance/ # Sphinx documentation docs/_build/ doc/_build/ +sphinx/source/notebooks/ # PyBuilder target/ @@ -294,6 +295,7 @@ pip-selfcheck.json user/ tests/tmp +tests/.tmp .report.json tests/master_src report_dir @@ -301,4 +303,7 @@ auxil out tmp_report_dir .tmp_report.json -coverage.json \ No newline at end of file +coverage.json +dist/*.whl +dist/*.tar.gz +/.claude diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..c90d531 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,42 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: check-added-large-files + # uv.lock is a generated lockfile that legitimately exceeds the 500 KB default. + args: ["--maxkb=1024"] + - id: check-docstring-first + - id: check-merge-conflict + - id: check-toml + - id: check-yaml + - id: detect-private-key + - id: trailing-whitespace + - id: end-of-file-fixer + + - repo: https://github.com/astral-sh/uv-pre-commit + rev: 0.9.28 + hooks: + - id: uv-sync + - id: uv-lock + - id: uv-export + args: + [ + "--frozen", + "--no-hashes", + "--output-file=requirements.txt", + "--quiet", + ] + + - repo: https://github.com/tsvikas/sync-with-uv + rev: v0.5.0 + hooks: + - id: sync-with-uv + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.15.16 + hooks: + # Run the linter. + - id: ruff-check + args: [--fix, --exit-non-zero-on-fix] + # Run the formatter. + - id: ruff-format diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..2dce1fc --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,44 @@ +# Code style + +## Files +- No file-level docstrings. Move any documentation into the class docstring instead. +- For files with only module-level functions, omit the module docstring entirely. + +## Comments +- No separator comments between methods or functions (e.g. no `# --- Public interface ---`). +- Inline comments inside function bodies are fine when they clarify non-obvious things (e.g. tensor shape annotations). +- Use em dashes (—) sparingly in docstrings and comments. Prefer plain sentence structure over dashes. + +## Naming conventions +- Variable names must be lowercase with underscores (`snake_case`). No single-letter or abbreviated names unless the meaning is unambiguous in context (e.g. `n` for the matrix dimension, `k` for a loop index). +- Choose descriptive names that reflect the role of the variable (e.g. `block_size` instead of `m`, `n_terms` instead of `K`). +- Module-level constants must be `UPPER_SNAKE_CASE`. + +## Type hints and docstrings +- All public functions and methods must have full type annotations on every parameter and the return type. +- Docstrings use Sphinx style: `:param name: description`, `:return: description`, `:rtype: type`. + +## Tensors and backends +- Any function that accepts a tensor argument must return a tensor with the same backend, dtype, and device as its primary input. +- Tensor functions must support arbitrary leading batch dimensions (expressed as `...` in shape comments, e.g. `(..., 2n, 2n)`). +- Hardware-specific branches (CUDA, platform-only code) that cannot run in CI must be marked `# pragma: no cover`. + +## Testing +- Every new class or module-level function must have an associated test class added in the same PR/commit. +- Tests must achieve >98% code coverage for the new code. Numerical comparisons use tolerance constants from `tests/configs.py` (`ATOL_SCALAR_COMPARISON`, `ATOL_MATRIX_COMPARISON`, etc.) — never hardcode tolerance values. +- The `tests/` folder must mirror the package structure (replacing `src/torch_pfaffian/` with `tests/` and prefixing each path segment with `test_`). For example, `src/torch_pfaffian/utils.py` → `tests/test_utils.py`, and `src/torch_pfaffian/strategies/pfaffian_block_det.py` → `tests/test_strategies/test_pfaffian_block_det.py`. +- One test class per file. Each test file contains exactly one `Test*` class. +- All tests must be methods of a `Test*` class. No module-level `test_*` functions. +- Tests must be compatible with pytest-xdist parallel execution: no shared mutable state between tests, no dependency on execution order, and no hardcoded resources (ports, file paths) that would conflict across workers. +- Prefer `np.testing` and `torch.testing` assertion helpers over bare `assert` statements for numerical comparisons. Use `torch.autograd.gradcheck` when testing gradient correctness. + +## Class method ordering +Methods within a class must appear in this order: +1. `@staticmethod` +2. `@classmethod` +3. Constructor (`__init__`) +4. Operator / dunder methods (`__call__`, `__repr__`, …) +5. Public methods +6. Protected methods (`_method`) +7. Private methods (`__method`) +8. Properties (`@property`) diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c317064 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md diff --git a/README.md b/README.md index 7c20897..b205141 100644 --- a/README.md +++ b/README.md @@ -10,21 +10,21 @@ ![Tests Workflow](https://github.com/MatchCake/TorchPfaffian/actions/workflows/tests.yml/badge.svg) ![Dist Workflow](https://github.com/MatchCake/TorchPfaffian/actions/workflows/build_dist.yml/badge.svg) ![Doc Workflow](https://github.com/MatchCake/TorchPfaffian/actions/workflows/docs.yml/badge.svg) -![Publish Workflow](https://github.com/MatchCake/TorchPfaffian/actions/workflows/publish.yml/badge.svg) +![Coverage Badge Workflow](https://github.com/MatchCake/TorchPfaffian/actions/workflows/coverage_badge.yml/badge.svg) # Description -TorchPfaffian is a Python package for efficiently computing the Pfaffian of skew-symmetric matrices using PyTorch. -Designed as a PyTorch-based alternative to [pfapack](https://github.com/basnijholt/pfapack), it enables GPU -acceleration and supports automatic differentiation, making it particularly useful in physics, quantum computing, -and machine learning applications. +TorchPfaffian is a Python package for efficiently computing the Pfaffian of skew-symmetric matrices using PyTorch. +Designed as a PyTorch-based alternative to [pfapack](https://github.com/basnijholt/pfapack), it enables GPU +acceleration and supports automatic differentiation, making it particularly useful in physics, quantum computing, +and machine learning applications. ## Features: -- Efficient Pfaffian computation for skew-symmetric matrices -- GPU acceleration via PyTorch -- Support for automatic differentiation -- Seamless integration with PyTorch tensors +- Efficient Pfaffian computation for skew-symmetric matrices +- GPU acceleration via PyTorch +- Support for automatic differentiation +- Seamless integration with PyTorch tensors @@ -36,10 +36,50 @@ With `python` and `pip` installed, run the following commands to install TorchPf pip install torchpfaffian ``` -With `poetry` installed, run the following commands to install TorchPfaffian: +For development, this project uses [uv](https://docs.astral.sh/uv/). Clone the repository and set up the +environment with: ```bash -poetry add torchpfaffian +uv sync --dev --extra cpu ``` +Use the `cu128` or `cu130` extra instead of `cpu` to install a CUDA-enabled build of PyTorch. See +[.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the full contribution workflow. + +### Native acceleration (optional) + +A Rust-accelerated signed-Pfaffian strategy (`RustPfaffianParlettReid`) is available when the +package is built with its native extension. Building from source requires a Rust toolchain +(); the project builds with [maturin](https://www.maturin.rs): + +```bash +uv run maturin develop --release -m rust/Cargo.toml +``` + +Use `--release` for an optimized build: `maturin develop` compiles in debug mode by default, +which makes the Rust kernel much slower. Installing a prebuilt wheel (or `maturin build`) is already +optimized, so this only matters for local development builds. + +If the native extension is not present, the package still works using the pure-Python strategies. + + +## Usage + +```python +import torch + +from torch_pfaffian import pfaffian + +# Any skew-symmetric matrix of shape (..., 2n, 2n). +matrix = torch.tensor([[0.0, -3.0], [3.0, 0.0]]) + +pf = pfaffian(matrix) # signed Pfaffian (default) +magnitude = pfaffian(matrix, sign=False) # |pf|, using the faster det-based path +``` + +`pfaffian()` selects a strategy from the input: `sign=True` (the default) returns the +**signed** Pfaffian, using the native `RustPfaffianParlettReid` when the extension is built and +falling back to the pure-Python `PfaffianParlettReid` otherwise; `sign=False` returns the magnitude +using a determinant-based strategy (`PfaffianFDBPf` when gradients are needed, otherwise +`PfaffianDet`). For explicit strategy selection, use `get_pfaffian_function(name)`. # Important Links diff --git a/archives/_pfaffian.py b/archives/_pfaffian.py deleted file mode 100644 index 45b7101..0000000 --- a/archives/_pfaffian.py +++ /dev/null @@ -1,386 +0,0 @@ -""" -TODO: This file is a temporary file to test the implementation of the `pfaffian` functions. - -This file will be deleted before the final submission. -It is used as a reference to implement the `pfaffian` functions. -""" - - -from typing import Union, Literal, Optional -import numpy as np -import warnings - -import tqdm -import pennylane as qml - -from torch_pfaffian import Pfaffian - - -class TensorLike: - pass - - -def convert_and_cast_like(*args, **kwargs): - return qml.math.convert_like(*args, **kwargs) - - -def _pivot(__matrix, k, kp): - matrix = qml.math.ones_like(__matrix) * __matrix - matrix_shape = qml.math.shape(matrix) - indexes_to_pivot = np.arange(matrix_shape[0]) - if len(matrix_shape) == 2: - matrix[..., [kp, k + 1], k:] = matrix[..., [k + 1, kp], k:] - matrix[..., k:, [kp, k + 1]] = matrix[..., k:, [k + 1, kp]] - return matrix - - # interchange rows k+1 and kp - kp_sub_matrix = matrix[indexes_to_pivot, kp, k:] - temp = qml.math.ones_like(kp_sub_matrix) * kp_sub_matrix - matrix[indexes_to_pivot, kp, k:] = matrix[indexes_to_pivot, k + 1, k:] - matrix[indexes_to_pivot, k + 1, k:] = temp - - # Then interchange columns k+1 and kp - kp_sub_matrix = matrix[indexes_to_pivot, k:, kp] - temp = qml.math.ones_like(kp_sub_matrix) * kp_sub_matrix - matrix[indexes_to_pivot, k:, kp] = matrix[indexes_to_pivot, k:, k + 1] - matrix[indexes_to_pivot, k:, k + 1] = temp - return matrix - - -def _compute_gauss_vector(__matrix, k): - zero_like = convert_and_cast_like(0, __matrix) - tau_norm = __matrix[..., k, k + 1][..., None] - zero_mask = qml.math.isclose(tau_norm, zero_like) - tau = qml.math.where(zero_mask, zero_like, __matrix[..., k, k + 2:] / tau_norm) - return tau - - -def _update_matrix_block_kp2_kp2(__matrix, k, tau): - add_matrix = qml.math.zeros_like(__matrix) - add_matrix[..., k + 2:, k + 2:] += ( - qml.math.einsum("...i,...j->...ij", tau, __matrix[..., k + 2:, k + 1]) - - - qml.math.einsum("...i,...j->...ij", __matrix[..., k + 2:, k + 1], tau) - ) - return __matrix + add_matrix - - -def batch_pfaffian_ltl( - __matrix: TensorLike, - overwrite_input: bool = False, - test_input: bool = False, - p_bar: Optional[tqdm.tqdm] = None, - show_progress: bool = False -) -> Union[float, complex, TensorLike]: - r""" - Compute the Pfaffian of a real or complex skew-symmetric - matrix A (A=-A^T). If overwrite_a=True, the matrix A - is overwritten in the process. This function uses - the Parlett-Reid algorithm. - - This code is adapted of the function `pfaffian_LTL` - from https://github.com/basnijholt/pfapack/blob/master/pfapack/pfaffian.py. - - :param __matrix: Matrix to compute the Pfaffian of - :type __matrix: TensorLike - :param overwrite_input: Whether to overwrite the input matrix - :type overwrite_input: bool - :param test_input: Whether to test the input matrix for skew-symmetry - :type test_input: bool - :param p_bar: Progress bar - :type p_bar: Optional[tqdm.tqdm] - :param show_progress: Whether to show progress bar. If no progress bar is provided, a new one is created - :type show_progress: bool - - :return: Pfaffian of the matrix - :rtype: Union[float, complex, TensorLike] - """ - if overwrite_input: - matrix = __matrix - else: - matrix = qml.math.ones_like(__matrix) * __matrix - shape = qml.math.shape(matrix) - n, m = shape[-2:] - p_bar = p_bar or tqdm.tqdm(range(0, n - 1, 2), disable=not show_progress) - - if test_input: - p_bar.set_description("Testing input matrix") - # Check if matrix is square - assert shape[-2] == shape[-1] > 0 - # Check if it's skew-symmetric - matrix_t = qml.math.einsum("...ij->...ji", matrix) - assert qml.math.allclose(matrix, -matrix_t) - - matrix = qml.math.cast(matrix, dtype=complex) - zero_like = convert_and_cast_like(0, matrix) - pfaffian_val = qml.math.convert_like(np.ones(shape[:-2], dtype=complex), matrix) - - # Quick return if possible - if n % 2 == 1: - p_bar.n = n//2 - p_bar.set_description("Odd-sized matrix") - p_bar.close() - return pfaffian_val * zero_like * matrix[..., 0, 0] # 0.0 but with require grad if needed - - p_bar.set_description(f"Computing Pfaffian of {shape} matrix") - for k in p_bar: - # First, find the largest entry in A[k+1:,k] and permute it to A[k+1,k] - kp = k + 1 + qml.math.abs(matrix[..., k + 1:, k]).argmax(-1) - kp1 = qml.math.convert_like(k + 1, kp) - - # Check if we need to pivot - pivot_condition = ~qml.math.isclose(kp, kp1) - # interchange rows and cols k+1 and kp (pivot if needed) - matrix = qml.math.where(pivot_condition[..., None, None], _pivot(matrix, k, kp), matrix) - # every interchange corresponds to a "-" in det(P) - pfaffian_val *= qml.math.where(pivot_condition, -1.0, 1.0) - - # if we encounter a zero on the super/subdiagonal, the Pfaffian is 0 - zero_ss_condition = qml.math.isclose(matrix[..., k + 1, k], zero_like) - pfaffian_val *= qml.math.where(zero_ss_condition, zero_like, matrix[..., k, k + 1]) - if qml.math.all(zero_ss_condition): - p_bar.n = n//2 - p_bar.set_description("Pfaffian is zero") - p_bar.close() - return pfaffian_val - - if k + 2 < n: - tau = _compute_gauss_vector(matrix, k) - # Update the matrix block A(k+2:,k+2) - matrix = _update_matrix_block_kp2_kp2(matrix, k, tau) - - p_bar.set_description("Pfaffian computed") - p_bar.close() - return pfaffian_val - - -def batch_householder_complex(x: TensorLike): - """(v, tau, alpha) = householder_real(x) - - Compute a Householder transformation such that - (1-tau v v^T) x = alpha e_1 - where x and v a complex vectors, tau is 0 or 2, and - alpha a complex number (e_1 is the first unit vector) - """ - sigma = qml.math.einsum("...i,...i->...", qml.math.conjugate(x[..., 1:]), x[..., 1:]) - - # if sigma == 0: - # return qml.math.zeros_like(x), 0, x[..., 0] - # else: - norm_x = qml.math.sqrt(qml.math.conjugate(x[..., 0]) * x[..., 0] + sigma) - - v = qml.math.ones_like(x) * x - phase = qml.math.exp(1j * qml.math.arctan2(qml.math.imag(x[..., 0]), qml.math.real(x[..., 0]))) - v[..., 0] = v[..., 0] + phase * norm_x - - v_frobenius_norm = qml.math.einsum("...i,...i->...", qml.math.conjugate(v), v) ** 0.5 - v = v / v_frobenius_norm[..., None] - - tau = convert_and_cast_like(2.0+0.0j, x) - return v, tau, -phase * norm_x - - -def _eliminate_ith_column_householder(matrix, i, alpha): - """ - Eliminate the i-th column of the matrix using the Householder transformation. - Equivalent to: - - matrix[..., i + 1, i] = alpha - matrix[..., i, i + 1] = -alpha - matrix[..., i + 2:, i] = zero_like - matrix[..., i, i + 2:] = zero_like - - :param matrix: - :param i: - :param alpha: - :return: - """ - zero_like = convert_and_cast_like(0, matrix) - - where_mask = qml.math.cast(qml.math.zeros_like(matrix), dtype=bool) - where_mask[..., i + 1, i] = True - where_mask[..., i, i + 1] = True - where_mask[..., i + 2:, i] = True - where_mask[..., i, i + 2:] = True - - values = qml.math.zeros_like(matrix) - values[..., i + 1, i] = alpha - values[..., i, i + 1] = -alpha - values[..., i + 2:, i] = zero_like - values[..., i, i + 2:] = zero_like - - matrix = qml.math.where(where_mask, values, matrix) - return matrix - - -def _update_matrix_block_householder(matrix, i, v, tau): - """ - Update the matrix block A(i+1:N,i+1:N) using the Householder transformation. - Equivalent to: - - w = tau * A(i+1:N,i+1:N) @ v - A(i+1:N,i+1:N) -= 2 * v @ w^T - - :param matrix: - :param i: - :param v: - :param tau: - :return: - """ - w = tau * qml.math.einsum("...ij,...j->...i", matrix[..., i + 1:, i + 1:], qml.math.conjugate(v)) - values = qml.math.zeros_like(matrix) - values[..., i + 1:, i + 1:] += ( - qml.math.einsum("...i,...j->...ij", v, w) - - - qml.math.einsum("...i,...j->...ij", w, v) - ) - return matrix + values - - -def batch_pfaffian_householder( - __matrix: TensorLike, - overwrite_input: bool = False, - test_input: bool = False, - p_bar: Optional[tqdm.tqdm] = None, - show_progress: bool = False -): - """pfaffian(A, overwrite_a=False) - - Compute the Pfaffian of a real or complex skew-symmetric - matrix A (A=-A^T). If overwrite_a=True, the matrix A - is overwritten in the process. This function uses the - Householder tridiagonalization. - - Note that the function pfaffian_schur() can also be used in the - real case. That function does not make use of the skew-symmetry - and is only slightly slower than pfaffian_householder(). - """ - if overwrite_input: - matrix = __matrix - else: - matrix = qml.math.ones_like(__matrix) * __matrix - shape = qml.math.shape(matrix) - n, m = shape[-2:] - p_bar = p_bar or tqdm.tqdm(range(n - 2), disable=not show_progress) - - if test_input: - p_bar.set_description("Testing input matrix") - # Check if matrix is square - assert shape[-2] == shape[-1] > 0 - # Check if it's skew-symmetric - matrix_t = qml.math.einsum("...ij->...ji", matrix) - assert qml.math.allclose(matrix, -matrix_t) - - matrix = qml.math.cast(matrix, dtype=complex) - zero_like = convert_and_cast_like(0, matrix) - pfaffian_val = qml.math.convert_like(np.ones(shape[:-2], dtype=complex), matrix) - - # Quick return if possible - if n % 2 == 1: - p_bar.set_description("Odd-sized matrix") - p_bar.close() - return pfaffian_val * zero_like * matrix[..., 0, 0] # 0.0 but with require grad if needed - - p_bar.set_description(f"Computing Pfaffian of {shape} matrix") - for i in p_bar: - # Find a Householder vector to eliminate the i-th column - v, tau, alpha = batch_householder_complex(matrix[..., i + 1:, i]) - matrix = _eliminate_ith_column_householder(matrix, i, alpha) - matrix = _update_matrix_block_householder(matrix, i, v, tau) - - pfaffian_val = pfaffian_val * qml.math.where(qml.math.isclose(tau, zero_like), 1, 1 - tau) - if i % 2 == 0: - pfaffian_val = pfaffian_val * -alpha - - pfaffian_val = pfaffian_val * matrix[..., n - 2, n - 1] - p_bar.set_description("Pfaffian computed") - p_bar.close() - return pfaffian_val - - -def pfaffian_by_det( - __matrix: TensorLike, - p_bar: Optional[tqdm.tqdm] = None, - show_progress: bool = False, - epsilon: float = 1e-12 -): - shape = qml.math.shape(__matrix) - p_bar = p_bar or tqdm.tqdm(total=1, disable=not show_progress) - p_bar.set_description(f"Computing determinant of {shape} matrix") - backend = qml.math.get_interface(__matrix) - if backend in ["autograd", "numpy"]: - det = qml.math.linalg.det(__matrix) - pf = qml.math.sqrt(qml.math.abs(det) + epsilon) - elif backend == "torch": - pf = Pfaffian.apply(__matrix) - else: - det = qml.math.det(__matrix) - pf = qml.math.sqrt(qml.math.abs(det) + epsilon) - p_bar.set_description(f"Determinant of {shape} matrix computed") - p_bar.update() - p_bar.close() - return pf - - -def pfaffian( - __matrix: TensorLike, - overwrite_input: bool = False, - method: Literal["P", "H", "det", "bLTL", "bH"] = "bLTL", - epsilon: float = 1e-12, - p_bar: Optional[tqdm.tqdm] = None, - show_progress: bool = False -) -> Union[float, complex, TensorLike]: - """pfaffian(A, overwrite_a=False, method='P') - - Compute the Pfaffian of a real or complex skew-symmetric - matrix A (A=-A^T). If overwrite_a=True, the matrix A - is overwritten in the process. This function uses - either the Parlett-Reid algorithm (method='P', default), - or the Householder tridiagonalization (method='H'). - - This code is adapted of the function `pfaffian` - from https://github.com/basnijholt/pfapack/blob/master/pfapack/pfaffian.py. - - :param __matrix: Matrix to compute the Pfaffian of - :type __matrix: TensorLike - :param overwrite_input: Whether to overwrite the input matrix - :type overwrite_input: bool - :param method: Method to use. 'P' for Parlett-Reid algorithm, 'H' for Householder tridiagonalization, - 'det' for determinant, 'bLTL' for batched Parlett-Reid algorithm - :type method: Literal["P", "H", "det", "bLTL"] - :param epsilon: Tolerance for the determinant method - :type epsilon: float - :param p_bar: Progress bar - :type p_bar: Optional[tqdm.tqdm] - :param show_progress: Whether to show progress bar. If no progress bar is provided, a new one is created - :type show_progress: bool - :return: Pfaffian of the matrix - :rtype: Union[float, complex, TensorLike] - """ - shape = qml.math.shape(__matrix) - assert shape[-2] == shape[-1] > 0, "Matrix must be square" - - if method == "P": - from pfapack.pfaffian import pfaffian - warnings.warn( - "The method 'P' is not implemented yet. " - "It is recommended to use the method 'det' instead.", - UserWarning, - ) - return pfaffian(__matrix, overwrite_input, method="P") - elif method == "H": - from pfapack.pfaffian import pfaffian_householder - warnings.warn( - "The method 'H' is not implemented yet. " - "It is recommended to use the method 'det' instead.", - UserWarning, - ) - return pfaffian_householder(__matrix, overwrite_input) - elif method == "det": - return pfaffian_by_det(__matrix, p_bar=p_bar, show_progress=show_progress, epsilon=epsilon) - elif method == "bLTL": - return batch_pfaffian_ltl(__matrix, overwrite_input, show_progress=show_progress, p_bar=p_bar) - elif method == "bH": - return batch_pfaffian_householder(__matrix, overwrite_input, show_progress=show_progress, p_bar=p_bar) - else: - raise ValueError(f"Invalid method. Got {method}, must be 'P', 'H', 'det', 'bLTL', or 'bH'.") diff --git a/archives/_test_pfaffian.py b/archives/_test_pfaffian.py deleted file mode 100644 index 897dcc3..0000000 --- a/archives/_test_pfaffian.py +++ /dev/null @@ -1,173 +0,0 @@ -import numpy as np -import pytest - -from tests.configs import ( - N_RANDOM_TESTS_PER_CASE, - TEST_SEED, - ATOL_SCALAR_COMPARISON, - RTOL_SCALAR_COMPARISON, - ATOL_MATRIX_COMPARISON, - RTOL_MATRIX_COMPARISON, - set_seed, -) -from torch_pfaffian import utils - -set_seed(TEST_SEED) -MIN_MATRIX_SIZE = 2 -MAX_MATRIX_SIZE = 20 -BATCH_SIZE = 3 -RECOMMENDED_METHODS = ["det", "bLTL", "bH"] - - -def gen_skew_symmetric_matrix_and_det(n, batch_size=None): - if batch_size is None: - matrix = np.random.rand(n, n) - else: - matrix = np.random.rand(batch_size, n, n) - matrix = matrix - np.einsum("...ij->...ji", matrix) - return matrix, np.linalg.det(matrix) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=None) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_get_skew_symmetric_matrix_and_det(matrix, det): - try: - from pfapack.pfaffian import pfaffian - except ImportError: - pytest.skip("pfapack is not installed.") - pf = pfaffian(matrix) - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_SCALAR_COMPARISON, rtol=RTOL_SCALAR_COMPARISON) - - -@pytest.mark.parametrize( - "matrix, det, mth", - [ - (*gen_skew_symmetric_matrix_and_det(i, batch_size=batch_size), mth) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - for mth in RECOMMENDED_METHODS - for batch_size in [None, BATCH_SIZE] - ] -) -def test_pfaffian_methods(matrix, det, mth): - pf = utils.pfaffian(matrix, method=mth) - np.testing.assert_allclose(pf ** 2, det, atol=10 * ATOL_SCALAR_COMPARISON, rtol=10 * RTOL_SCALAR_COMPARISON) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=BATCH_SIZE) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_batch_pfaffian_ltl(matrix, det): - pf = utils._pfaffian.batch_pfaffian_ltl(matrix) - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=BATCH_SIZE) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_pfaffian_bltl(matrix, det): - pf = utils.pfaffian(matrix, method="bLTL") - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=batch_size) - for batch_size in [None, 1] - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_pfaffian_bltl_single_item(matrix, det): - pf = utils.pfaffian(matrix, method="bLTL") - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) - - -@pytest.mark.parametrize( - "n, batch_size, mth", - [ - (i, batch_size, mth) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1, 2) - for _ in range(N_RANDOM_TESTS_PER_CASE) - for mth in RECOMMENDED_METHODS - for batch_size in [None, BATCH_SIZE] - ] -) -def test_pfaffian_methods_grads(n, batch_size, mth): - try: - import torch - except ImportError: - pytest.skip("PyTorch is not installed.") - torch.autograd.set_detect_anomaly(True) - - if batch_size is None: - np_matrix = np.random.rand(n, n) - else: - np_matrix = np.random.rand(batch_size, n, n) - np_matrix = np_matrix - np.einsum("...ij->...ji", np_matrix) - torch_matrix = torch.from_numpy(np_matrix).requires_grad_() - det = torch.det(torch_matrix) - torch_loss = torch.sum(det) - torch_loss.backward() - true_grad = torch_matrix.grad - - matrix = torch.from_numpy(np_matrix).requires_grad_() - pf = utils.pfaffian(matrix, method=mth) - pred_det = torch.real(pf ** 2) - with torch.no_grad(): - np.testing.assert_allclose(pred_det, det, atol=10 * ATOL_SCALAR_COMPARISON, rtol=10 * RTOL_SCALAR_COMPARISON) - - pred_loss = torch.sum(pred_det) - pred_loss.backward() - pred_grad = matrix.grad - assert pred_grad is not None - if mth == "det": - np.testing.assert_allclose( - torch.abs(pred_grad), torch.abs(true_grad), - atol=ATOL_MATRIX_COMPARISON, - rtol=RTOL_MATRIX_COMPARISON - ) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=BATCH_SIZE) - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_pfaffian_bh(matrix, det): - pf = utils.pfaffian(matrix, method="bH") - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) - - -@pytest.mark.parametrize( - "matrix, det", - [ - gen_skew_symmetric_matrix_and_det(i, batch_size=batch_size) - for batch_size in [None, 1] - for i in range(MIN_MATRIX_SIZE, MAX_MATRIX_SIZE + 1) - for _ in range(N_RANDOM_TESTS_PER_CASE) - ] -) -def test_pfaffian_bltl_single_item(matrix, det): - pf = utils.pfaffian(matrix, method="bH") - np.testing.assert_allclose(pf ** 2, det, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) diff --git a/archives/pfaffian_perm.py b/archives/pfaffian_perm.py deleted file mode 100644 index 90859f0..0000000 --- a/archives/pfaffian_perm.py +++ /dev/null @@ -1,63 +0,0 @@ -import itertools -from typing import Any -import torch -import numpy as np -from .strategy import PfaffianStrategy - - -class PfaffianPerm(PfaffianStrategy): - """ - This class implements the Pfaffian using the determinant of the matrix for the forward pass and the - derivative of the Pfaffian with respect to the input matrix for the backward pass. - """ - NAME = "PfaffianPerm" - - @staticmethod - def forward(matrix: torch.Tensor): - _2n = matrix.shape[-1] - if _2n % 2 != 0: - return torch.zeros_like(matrix[..., 0, 0]) - _n = _2n // 2 - # Let P be the set of permutations, {i_1, i_2, ..., i_2n} with respect to {1, 2, ..., 2n}, such that - # i_1 < j_1 < i_2 < j_2 < ... < i_2n < j_2n and i_1 < i_2 < ... < i_2n - indexes = np.arange(_2n) - # _i must be all the vector of length n from indexes. It should look like a sliding windows of size n - _i_starting_idx = np.arange(_n - 1) - _i_matrix = indexes[_i_starting_idx[:, None] + np.arange(_n)] - _j_starting_idx = _i_starting_idx + 1 - _j_matrix = indexes[_j_starting_idx[:, None] + np.arange(_n)] - - # build a matrix of each permutation of i and j where j > i - ij_matrix = np.concatenate( - [ - np.concatenate([_i_matrix[i, :, None], _j_matrix[j, :, None]], axis=-1)[None, ...] - for i in range(_i_matrix.shape[0]) - for j in range(i, _j_matrix.shape[0]) - ], - axis=0 - ) - - pf_matrix = torch.prod(matrix[..., ij_matrix[..., 0], ij_matrix[..., 1]], dim=-1) - delta_ij = ij_matrix[..., 0, 1] - ij_matrix[..., 0, 0] - signs = torch.tensor((-1) ** delta_ij).to(pf_matrix.device) - pf = torch.sum(signs * pf_matrix, dim=-1) - return pf - - @staticmethod - def backward(ctx: torch.autograd.function.FunctionCtx, grad_output): - r""" - - ..math: - \frac{\partial \text{pf}(A)}{\partial A_{ij}} = \frac{\text{pf}(A)}{2} A^{-1}_{ji} - - :param ctx: Context - :param grad_output: Gradient of the output - :return: Gradient of the input - """ - matrix, pf = ctx.saved_tensors - grad_matrix = None - if ctx.needs_input_grad[0]: - grad_matrix = torch.einsum('...,...ij->...ji', 0.5 * grad_output * pf, torch.linalg.pinv(matrix)) - return grad_matrix - - diff --git a/notebooks/_strategies_benchmark_helpers.py b/notebooks/_strategies_benchmark_helpers.py new file mode 100644 index 0000000..824c4d2 --- /dev/null +++ b/notebooks/_strategies_benchmark_helpers.py @@ -0,0 +1,198 @@ +import time +from collections.abc import Callable + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import seaborn as sns +import torch +from torch.profiler import ProfilerActivity, profile +from tqdm.auto import tqdm + +from torch_pfaffian.strategies.pfaffian_block_det import PfaffianBlockDet +from torch_pfaffian.strategies.strategy import PfaffianStrategy + +Strategy = type[PfaffianStrategy] +BenchmarkResults = pd.DataFrame + +METRICS = ("forward_time", "backward_time", "forward_memory", "forward_backward_memory") + + +def make_block_antidiagonal( + n: int, batch_size: int, dtype: torch.dtype = torch.float32, device: str = "cpu" +) -> torch.Tensor: + """ + Build a batch of block-antidiagonal skew matrices ``[[0, B], [-B^T, 0]]`` of dimension ``n``. + + :param n: Matrix dimension (even); the result has shape ``(batch_size, n, n)``. + :param batch_size: Number of matrices in the batch. + :param dtype: Floating dtype of the matrices. + :param device: Device on which to allocate the matrices. + :return: A tensor of shape ``(batch_size, n, n)``. + :rtype: torch.Tensor + """ + half = n // 2 + block = torch.randn(batch_size, half, half, dtype=dtype, device=device) + zero = torch.zeros_like(block) + top = torch.cat([zero, block], dim=-1) + bottom = torch.cat([-block.transpose(-1, -2), zero], dim=-1) + return torch.cat([top, bottom], dim=-2) + + +def make_random_skew(n: int, batch_size: int, dtype: torch.dtype = torch.float32, device: str = "cpu") -> torch.Tensor: + """ + Build a batch of general (dense) random skew-symmetric matrices of dimension ``n``. + + Unlike :func:`make_block_antidiagonal`, the result has no block structure, so it is a + representative input for the strategies that accept any skew-symmetric matrix (every strategy + except ``PfaffianBlockDet``, which only computes the true Pfaffian on block-antidiagonal inputs). + + :param n: Matrix dimension (even); the result has shape ``(batch_size, n, n)``. + :param batch_size: Number of matrices in the batch. + :param dtype: Floating dtype of the matrices. + :param device: Device on which to allocate the matrices. + :return: A tensor of shape ``(batch_size, n, n)``. + :rtype: torch.Tensor + """ + full = torch.randn(batch_size, n, n, dtype=dtype, device=device) + return full - full.transpose(-1, -2) + + +def _synchronize(is_cuda: bool) -> None: + if is_cuda: + torch.cuda.synchronize() + + +def _median_time(fn: Callable[[], object], is_cuda: bool, n_repeats: int = 3) -> float: + fn() # warm-up + _synchronize(is_cuda) + timings = [] + for _ in range(n_repeats): + _synchronize(is_cuda) + start = time.perf_counter() + fn() + _synchronize(is_cuda) + timings.append(time.perf_counter() - start) + return float(np.median(timings)) + + +def _peak_memory(fn: Callable[[], object], is_cuda: bool) -> float: + # On CUDA this is the true peak; on CPU it is the profiler-reported allocated bytes. + if is_cuda: + torch.cuda.reset_peak_memory_stats() + fn() + torch.cuda.synchronize() + return float(torch.cuda.max_memory_allocated()) + with profile(activities=[ProfilerActivity.CPU], profile_memory=True) as prof: + fn() + return float(sum(e.cpu_memory_usage for e in prof.key_averages() if e.cpu_memory_usage > 0)) + + +def _forward_call(strategy: Strategy, matrix: torch.Tensor) -> torch.Tensor: + return strategy.apply(matrix) + + +def _forward_backward_call(strategy: Strategy, matrix: torch.Tensor) -> torch.Tensor: + grad_matrix = matrix.detach().clone().requires_grad_(True) + strategy.apply(grad_matrix).sum().backward() + return grad_matrix + + +def benchmark_strategies( + strategies: list[Strategy], + sizes_n: list[int], + batch_size: int, + device: str = "cpu", + n_seeds: int = 20, + n_repeats: int = 3, +) -> pd.DataFrame: + """ + Benchmark forward/backward time and memory of each strategy over several random seeds. + + Returns a tidy DataFrame with one row per (strategy, dimension, seed) combination and one + column per metric. Pass it directly to :func:`plot_results` or use pandas/seaborn to + build custom views. + + :param strategies: The strategy classes to benchmark (each exposes ``NAME`` and ``apply``). + :param sizes_n: Matrix dimensions to sweep (even integers); each yields ``n x n`` matrices. + :param batch_size: Number of matrices per benchmarked batch. + :param device: Device on which to run the benchmark. + :param n_seeds: Number of random seeds used to build the confidence intervals. + :param n_repeats: Number of timed repeats per seed (the median is kept). + :return: A DataFrame with columns ``strategy``, ``dimension``, ``seed``, and one column per + metric in :data:`METRICS`. + :rtype: pandas.DataFrame + """ + is_cuda = device == "cuda" + records = [] + p_bar = tqdm(total=len(sizes_n) * len(strategies) * n_seeds, desc="Benchmarking strategies") + for n in sizes_n: + for seed in range(n_seeds): + torch.manual_seed(seed) + # PfaffianBlockDet only returns the true Pfaffian on block-antidiagonal inputs; every + # other strategy is valid on any skew matrix. + block_matrix = make_block_antidiagonal(n, batch_size, dtype=torch.float32, device=device) + random_matrix = make_random_skew(n, batch_size, dtype=torch.float32, device=device) + for strategy in strategies: + matrix = block_matrix if strategy is PfaffianBlockDet else random_matrix + p_bar.set_description(f"Benchmarking {strategy.NAME:^30} (n: {n:^5} | seed: {seed:^5})") + forward_time = _median_time(lambda: _forward_call(strategy, matrix), is_cuda, n_repeats) + full_time = _median_time(lambda: _forward_backward_call(strategy, matrix), is_cuda, n_repeats) + records.append( + { + "strategy": strategy.NAME, + "dimension": n, + "seed": seed, + "forward_time": forward_time, + "backward_time": max(full_time - forward_time, 0.0), + "forward_memory": _peak_memory(lambda: _forward_call(strategy, matrix), is_cuda), + "forward_backward_memory": _peak_memory( + lambda: _forward_backward_call(strategy, matrix), is_cuda + ), + } + ) + p_bar.update(1) + p_bar.close() + return pd.DataFrame(records) + + +def plot_results(results: pd.DataFrame, strategies: list[Strategy], batch_size: int, device: str = "cpu") -> plt.Figure: + """ + Plot the benchmark results as a 2x2 grid of time and memory panels with 95% CI bands. + + :param results: The DataFrame returned by :func:`benchmark_strategies`. + :param strategies: The strategy classes that were benchmarked. + :param batch_size: Batch size used for the benchmark (shown in the title). + :param device: Device used for the benchmark (shown in the title and memory label). + :return: The matplotlib figure. + :rtype: matplotlib.figure.Figure + """ + memory_label = "peak memory (bytes, CUDA)" if device == "cuda" else "allocated bytes (CPU)" + panels = [ + ("forward_time", "Forward time", "time [s]"), + ("backward_time", "Backward time", "time [s]"), + ("forward_memory", "Forward memory", memory_label), + ("forward_backward_memory", "Forward + backward memory", memory_label), + ] + + df_long = results.melt( + id_vars=["strategy", "dimension", "seed"], + value_vars=list(METRICS), + var_name="metric", + value_name="value", + ) + + fig, axes = plt.subplots(2, 2, figsize=(12, 9)) + for ax, (metric_key, title, ylabel) in zip(axes.flat, panels): + subset = df_long[df_long["metric"] == metric_key] + sns.lineplot(data=subset, x="dimension", y="value", hue="strategy", marker="o", ax=ax) + ax.set_title(title) + ax.set_xlabel("matrix dimension") + ax.set_ylabel(ylabel) + ax.set_xscale("log", base=2) + ax.set_yscale("log") + ax.grid(True, which="both", linestyle=":", alpha=0.5) + + fig.suptitle(f"Pfaffian strategies benchmark (batch_size={batch_size}, device={device}, 95% CI over seeds)") + fig.tight_layout() + return fig diff --git a/notebooks/strategies_benchmark.ipynb b/notebooks/strategies_benchmark.ipynb new file mode 100644 index 0000000..4bdeb88 --- /dev/null +++ b/notebooks/strategies_benchmark.ipynb @@ -0,0 +1,363 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "56c973ab", + "metadata": {}, + "source": "# Benchmarking the Pfaffian strategies\n\nThis notebook benchmarks the available Pfaffian strategies in terms of **time** and **memory** for both the **forward** and **backward** passes.\n\nFive strategies are compared:\n\n- `PfaffianFDBPf`: computes the Pfaffian from `sqrt(|det(A)|)` with a custom **analytic** backward. Valid for any skew-symmetric matrix.\n- `PfaffianBlockDet`: computes the Pfaffian from the determinant of the upper-right block, with a custom analytic backward.\n- `PfaffianDet`: a reference baseline that also computes `pf = sqrt(|det(A)|)` but differentiates straight through `det`/`sqrt` with **plain autograd** (no custom backward), to expose the cost of naive autodiff against the analytic backward of `PfaffianFDBPf`.\n- `PfaffianParlettReid`: computes the **signed** Pfaffian via batched Parlett-Reid skew-tridiagonalization, with a custom analytic backward. Valid for any skew-symmetric matrix.\n- `RustPfaffianParlettReid`: the same signed Parlett-Reid forward implemented in Rust (PyO3), with the analytic PyTorch backward. Available when the native extension is built.\n\nEach strategy is invoked through `Strategy.apply(matrix)`.\n\nFor each strategy and matrix size we report, **averaged over 20 random seeds with 95% confidence intervals**:\n\n- the median forward time,\n- the median backward time,\n- the forward peak memory,\n- the forward + backward peak memory." + }, + { + "cell_type": "markdown", + "id": "55b95a09", + "metadata": {}, + "source": "## Validity note\n\n`PfaffianBlockDet`'s forward only returns the *true* Pfaffian for **block-antidiagonal** skew matrices of the form\n\n$$ A = \\begin{pmatrix} 0 & B \\\\ -B^{T} & 0 \\end{pmatrix}. $$\n\nSo when it is benchmarked, `PfaffianBlockDet` is fed block-antidiagonal inputs, the only shape on which it is valid. Every other strategy is valid on **any** skew-symmetric matrix, so those are benchmarked on **general (dense) random skew-symmetric matrices** — a representative, unstructured workload. Each strategy is therefore measured on an input it computes correctly." + }, + { + "cell_type": "code", + "id": "657871cca9161529", + "metadata": { + "ExecuteTime": { + "end_time": "2026-06-11T16:23:48.414931740Z", + "start_time": "2026-06-11T16:23:47.000678649Z" + } + }, + "source": [ + "import os\n", + "import sys\n", + "\n", + "# The helper module lives next to this notebook; ensure it is importable both when\n", + "# running the notebook directly and when it is executed during the Sphinx docs build.\n", + "sys.path.insert(0, os.getcwd())\n", + "\n", + "import torch\n", + "from _strategies_benchmark_helpers import benchmark_strategies, plot_results\n", + "\n", + "from torch_pfaffian.strategies.pfaffian_det import PfaffianDet\n", + "from torch_pfaffian.strategies.pfaffian_fdbpf import PfaffianFDBPf\n", + "from torch_pfaffian.strategies.pfaffian_parlett_reid import PfaffianParlettReid\n", + "\n", + "try:\n", + " from torch_pfaffian.strategies.pfaffian_rust_parlett_reid import RustPfaffianParlettReid\n", + "except ImportError:\n", + " RustPfaffianParlettReid = None\n", + "\n", + "strategies = [\n", + " PfaffianFDBPf,\n", + " # PfaffianBlockDet,\n", + " PfaffianDet,\n", + " PfaffianParlettReid,\n", + "]\n", + "if RustPfaffianParlettReid is not None:\n", + " strategies.append(RustPfaffianParlettReid)\n", + "\n", + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "print(f\"Running benchmarks on device: {device}\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running benchmarks on device: cpu\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/local/USHERBROOKE/ginj2102/github/TorchPfaffian/.venv/lib/python3.14/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "id": "8838f08f", + "metadata": {}, + "source": [ + "## Running the benchmark\n", + "\n", + "The benchmarking and plotting logic lives in `_strategies_benchmark_helpers.py` to keep this notebook focused on the narrative. `benchmark_strategies` sweeps the matrix dimension `n` and, for every strategy, measures each metric once per seed across `n_seeds` seeds, returning the across-seed mean and the half-width of the 95% confidence interval." + ] + }, + { + "cell_type": "code", + "id": "6ace4294c6d4b34", + "metadata": { + "ExecuteTime": { + "end_time": "2026-06-11T16:45:30.960103917Z", + "start_time": "2026-06-11T16:23:48.423661244Z" + } + }, + "source": [ + "sizes_n = [2, 4, 8, 16, 32, 64, 128, 256]\n", + "batch_size = 32\n", + "n_seeds = 20\n", + "\n", + "results = benchmark_strategies(strategies, sizes_n, batch_size, device=device, n_seeds=n_seeds)\n", + "results" + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Benchmarking PfaffianFDBPf (n: 2 | seed: 0 ): 0%| | 0/640 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
strategydimensionseedforward_timebackward_timeforward_memoryforward_backward_memory
0PfaffianFDBPf200.0109240.0000004.192000e+031.990900e+04
1PfaffianDet200.0116490.0000004.056000e+031.349800e+04
2PfaffianParlettReid200.0001470.0000553.032000e+031.905000e+04
3RustPfaffianParlettReid200.0004510.0003600.000000e+001.576200e+04
4PfaffianFDBPf210.0059890.0000004.304000e+032.016500e+04
........................
635RustPfaffianParlettReid256180.0078181.2186730.000000e+001.849201e+08
636PfaffianFDBPf256190.0038080.3512908.631040e+061.851625e+08
637PfaffianDet256190.0119550.0224828.630912e+061.261957e+08
638PfaffianParlettReid256190.5630662.2152502.212422e+092.396682e+09
639RustPfaffianParlettReid256190.0069331.0718160.000000e+001.849202e+08
\n", + "

640 rows × 7 columns

\n", + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "id": "0ad995ad", + "metadata": {}, + "source": [ + "## Results" + ] + }, + { + "cell_type": "code", + "id": "e414240b2fc6064e", + "metadata": { + "execution": { + "iopub.execute_input": "2026-06-10T18:29:48.418076Z", + "iopub.status.busy": "2026-06-10T18:29:48.417741Z", + "iopub.status.idle": "2026-06-10T18:29:49.863382Z", + "shell.execute_reply": "2026-06-10T18:29:49.862404Z" + }, + "ExecuteTime": { + "end_time": "2026-06-11T16:45:32.958826885Z", + "start_time": "2026-06-11T16:45:31.043008384Z" + } + }, + "source": [ + "fig = plot_results(results, strategies, batch_size, device=device)" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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QZor0SZVucdLY18CZzQaWbt2rdNImareO1CznFJms9lpVNs///zDkSNHykS6zps3j3fffZfnn3++3LcKVgd7m3/wwQcO20tfr1qtlnvuuYe1a9c6HbApHZHk5+fHiBEjWLVqFd988w0uLi6VRstcd911REZGsmDBgjLXk932ISEhDB48mKVLlzod1ClZj5rklKpuf/LJJ5845AtasmQJZrNZtSvYBhTsuQFLHlfbz9PnnnsOs9nMv/71L3Wbs0ix3NxcFixYQFBQkNovl2b58uWcO3fOYQCnWbNm6sCPyWQiJibGadSOHQ8PD5555hlOnDjBM8884/S+//LLL6vUp5Xk1ltv5eLFiw65osxmM4sWLcLLy4tBgwap2zUaDffeey8//vgjK1aswGw2l8lrVtvPJDuZmZlldO7evTtQ3CeNGTMGi8WiLnMtidlsVu+DESNG4OPjw1tvveU0P5W9ncPCwujevTuff/65wzLrzZs3c/z4cYdjqtNn7tu3zyHHokQikZRERkpJJJIrwu23386KFSvw9fWlU6dO7N69my1btlT59exV5eabb1Zn6qZPn05eXh6ffvopISEhtTKLbOeRRx4hIyODoUOH0rJlSxISEli0aBHdu3dX81B0794drVbLO++8Q3Z2Nq6urgwdOrTcXA/VrX/Pnj1ZsmQJb7zxBlFRUYSEhDB06FCefvpp1q9fz+23386kSZPo2bMn+fn5HDlyhDVr1hAfH09QUBCjR4+md+/e/Pvf/yYmJoaOHTuyfv16dflFRTO8bdu25Y033uC5554jPj6e0aNH4+3tTVxcHN999x3Tpk3jqaeeYuvWrcycOZP77ruP9u3bYzabWbFihfqDtDKaN2/OO++8Q3x8PO3bt+fbb7/l4MGDfPLJJ2runYceeohVq1bx6KOPsm3bNvr164fFYuHkyZOsWrWKTZs2VXvJ6VtvvcWvv/7KoEGD1Fd6JyUlsXr1anbs2FHpUpbaxMfHh4EDB/J///d/mEwmWrRowa+//kpcXFyNz+nu7s5PP/3E0KFDGTlyJH/88UeFOW/69+9PYGAgW7Zscbq0KyAggP79+zN58mSSk5NZsGABUVFRahL9jh070rZtWzXxsY+PD2vXrnU6eGL/UTt79mxGjBiBVqtl7NixDBkyhIceeogPPviA6Ohodeni9u3bGTJkiNMlaZdDVe7x0nz88cds3bpVvRZL0qxZM4YPH17lewdqllMqLy+P8PBw7r//fjp37oynpydHjhxh2bJl+Pr6OuRN+u677/jPf/5Du3btuOaaa/jyyy8dzjV8+HA1H1B8fDyRkZFMnDiR5cuXl1t+9+7dGTduHB999BHZ2dn07duX3377zWkE5n//+1+2bdvGDTfcwNSpU+nUqRMZGRns37+fLVu2lFkKdv/99/Pggw/y0UcfMWLEiErvQ41Gw5IlSxg1ahTdu3dn8uTJhIWFcfLkSY4dO6YO3C9evJj+/fvTtWtXpk6dSps2bUhOTmb37t2cP3+eQ4cOAdQopxRUrz8xGo0MGzaMMWPGcOrUKT766CP69+/PHXfcoe7zyCOP8Oijj3LPPfcwfPhwDh06xKZNm5wuhbJHlFYWSfff//6Xo0ePcsMNN6DT6fj+++/59ddfeeONN7j++uvV/RYvXqwmbm/VqhVJSUl89tlnnD17lhUrVjgdiM3NzeX555/nrbfeKvNChNdeew2r1crOnTspLCx0iAhzxtNPP82xY8d477332LZtG/feey+hoaFcvHiR77//nn/++Yddu3ZVeI7STJs2jaVLlzJp0iT27dtH69atWbNmDTt37mTBggVlEqvff//9LFq0iFdeeYWuXbuW6Q+uxDMJ4PPPP+ejjz7irrvuom3btuTm5vLpp5/i4+Oj2m3QoEFMnz6dt99+m4MHD3LzzTej1+uJjo5m9erVLFy4kHvvvRcfHx+WLFnCQw89xHXXXcfYsWMJDg7m7Nmz/Pzzz/Tr148PP/wQgLfffpvbbruN/v378/DDD5ORkcGiRYvo3Lmzw/LiqvaZKSkpHD58uEovVZFIJE2UK/tyP4lEcrVif111Ra8iFqL4ldnz5s1z2J6ZmSkmT54sgoKChJeXlxgxYoQ4efJkmVdYl3d8ea92tr8yvSTr168X3bp1E25ubqJ169binXfeEZ999pkARFxcnLpfRESEuO2228roMGjQIDFo0KAK9VyzZo24+eabRUhIiHBxcRGtWrUS06dPV1/7bufTTz8Vbdq0UV+LbX9NeHllV6f+Fy9eFLfddpvw9vYWgEOdc3NzxXPPPSeioqKEi4uLCAoKEn379hXvvvuuw+vGU1NTxfjx44W3t7fw9fUVkyZNEjt37hSA+Oabbyq0sxBCrF27VvTv3194enoKT09P0bFjR/H444+LU6dOCSGEOHPmjHj44YdF27ZthZubmwgICBBDhgwRW7ZsqdC+QtjaoXPnzmLv3r2iT58+ws3NTURERIgPP/ywzL5Go1G88847onPnzsLV1VX4+/uLnj17irlz54rs7Gx1P0A8/vjjZY539ir1hIQEMWHCBBEcHCxcXV1FmzZtxOOPPy6KioqEEOXfE6VfS28/v7P2dlYfZ/fA+fPnxV133SX8/PyEr6+vuO+++8SFCxfKvBre3k6pqallypo4caLw9PR02JaWliY6deokQkNDRXR0dJljSjJ79mwRFRXlVNevv/5aPPfccyIkJES4u7uL2267TSQkJDjse/z4cXHTTTcJLy8vERQUJKZOnSoOHTokALFs2TJ1P7PZLGbNmiWCg4OFoigO153ZbBbz5s0THTt2FC4uLiI4OFiMHDlS7Nu3r0KbCuG8jSuiKvd46ba229/Zp3SfUtm9U1OKiorEE088Ibp16yZ8fHyEXq8XERERYsqUKQ79R2X1LX0NHzlyRADi2WefrbQOBoNBzJ49WwQGBgpPT08xatQoce7cuTLXqxBCJCcni8cff1yEh4cLvV4vQkNDxbBhw8Qnn3xS5rw5OTnC3d1dAOLLL78s872ze08IIXbs2CGGDx8uvL29haenp+jWrZtYtGiRwz6xsbFiwoQJIjQ0VOj1etGiRQtx++23izVr1lSqb1Woan/yxx9/iGnTpgl/f3/h5eUlHnjgAZGenu5wLovFIp555hkRFBQkPDw8xIgRI0RMTIzTazwoKEjceOONldbvp59+Er179xbe3t7Cw8ND3HjjjWLVqlVl9vv111/F8OHDVTv5+fmJm2++Wfz222/lnvvpp58WvXr1Elar1WF7Xl6emDBhgvDz8xMdO3YUGzdurLSeduz3Z0BAgNDpdCIsLEzcf//94vfff1f3Kc9vcEZycrLqo7i4uIiuXbs69EslsVqtIjw8XADijTfecLrP5T6TnLF//34xbtw40apVK+Hq6ipCQkLE7bffLvbu3Vtm308++UT07NlTuLu7C29vb9G1a1fxn//8R1y4cMFhv23btokRI0YIX19f4ebmJtq2bSsmTZpU5pxr164V11xzjXB1dRWdOnUS69atExMnThQRERHqPlX1i5YsWSI8PDxETk5OlfSWSCRND0WIOl6XIJFIJJIGxffff89dd93Fjh076NevX31XR9JAOHPmDB07dmTDhg0MGzasvqsjqWM++ugj/vOf/xAbG+vwNjVJ7bB8+XImT57Mnj17ahRF44zjx4/TuXNnfvrpJ2677bZaOadEcrn06NGDwYMH8/7779d3VSQSSQNF5pSSSCSSJoTBYHD432KxsGjRInx8fLjuuuvqqVaShkibNm2YMmUK//3vf+u7KpJ6YNu2bcyePVsOSF1FbNu2jT59+sgBKUmDYePGjURHR1f6kgKJRNK0kZFSEolE0oR45JFHMBgM9OnTh6KiItatW8euXbt46623pNMoaZRYLBanyZpL4uXlhZeXVx3VSCK5MpFSEolEIpFcjchE5xKJRNKEGDp0KO+99x4//fQThYWFREVFsWjRolpPGi2RNBTOnTtHZGRkhfu88sorvPrqq3VTIYlEIpFIJBKJioyUkkgkEolE0mgpLCxkx44dFe5Tk7feSSQSiUQikUguHzkoJZFIJBKJRCKRSCQSiUQiqXNkonOJRCKRSCQSiUQikUgkEkmdIwelJBKJRCKRSCQSiUQikUgkdY4clJJIJBKJRCKRSCQSiUQikdQ5clBKIpFIJBKJRCKRSCQSiURS58hBKYlEIpFIJBKJRCKRSCQSSZ0jB6UkEolEIpFIJBKJRCKRSCR1jhyUkkgkEolEIpFIJBKJRCKR1DlyUEoikUgkEolEIpFIJBKJRFLnyEEpiUQikUgkEolEIpFIJBJJnSMHpSQSiUQikUgkEolEIpFIJHWOHJSSSCSSy+T3339HURR+//33Gp+jdevWTJo0qdbqJJFIJBKJRGKndevW3H777fVdjWozePBgBg8eXOPjly9fjqIoxMfH11qdJBJJ7SIHpSQSSa1hf/A7+zz77LP1Xb16Z9euXbz66qtkZWXVd1UkEolEIpHUMc78pJCQEIYMGcKGDRvqu3pXNW+99Rbff/99fVdDIpHUAF19V0AikTQ+XnvtNSIjIx22denSpZ5q03DYtWsXc+fOZdKkSfj5+Tl8d+rUKTQaOU8gkUgkEkljx+4nCSFITk5m+fLl3Hrrrfz4449XZTRTQ+Ctt97i3nvvZfTo0Q7bH3roIcaOHYurq2v9VEwikVSKHJSSSCS1zsiRI+nVq1etnzc/Px9PT89aP29lCCEoLCzE3d39ipUhnSWJRCKRSJoGpf2kKVOm0KxZM77++usmNyh1pX07rVaLVqu9YueXSCSXj5yWl0gkdc7WrVsZMGAAnp6e+Pn5ceedd3LixAmHfV599VUUReH48eOMHz8ef39/+vfvz/r161EUhcOHD6v7rl27FkVRuPvuux3Occ0113D//fer/y9btoyhQ4cSEhKCq6srnTp1YsmSJWXqZ8+7sGnTJnr16oW7uztLly4F4Pz584wePRpPT09CQkL417/+RVFRUaU6v/rqqzz99NMAREZGqmH79hwHpXNK2UP8d+zYwezZswkODsbPz4/p06djNBrJyspiwoQJ+Pv74+/vz3/+8x+EEA5lWq1WFixYQOfOnXFzc6NZs2ZMnz6dzMzMSusrkUgkEomkbvDz88Pd3R2dzjFe4N1336Vv374EBgbi7u5Oz549WbNmjdNzfPnll/Tu3RsPDw/8/f0ZOHAgv/76a4Xlfv755+h0OtU/ue6668r4Ul27di3jd3377bcoiqL6bgkJCcyYMYMOHTrg7u5OYGAg9913X5k8Tnbf5o8//mDGjBmEhITQsmVL9ftPPvmEtm3b4u7uTu/evdm+fXvFhruEoijk5+fz+eefq/6V3adyllPK7uf9/vvvqp/XtWtXNTfounXr6Nq1K25ubvTs2ZMDBw6UKfPkyZPce++9BAQE4ObmRq9evVi/fn2V6iuRSByRkVISiaTWyc7OJi0tzWFbUFAQAFu2bGHkyJG0adOGV199FYPBwKJFi+jXrx/79++ndevWDsfdd999tGvXjrfeegshBP3790dRFP7880+6desGwPbt29FoNOzYsUM9LjU1lZMnTzJz5kx125IlS+jcuTN33HEHOp2OH3/8kRkzZmC1Wnn88ccdyj116hTjxo1j+vTpTJ06lQ4dOmAwGBg2bBhnz55l9uzZNG/enBUrVrB169ZKbXL33Xdz+vRpvv76a95//33VHsHBwRUeN2vWLEJDQ5k7dy5//fUXn3zyCX5+fuzatYtWrVrx1ltv8csvvzBv3jy6dOnChAkT1GOnT5/O8uXLmTx5MrNnzyYuLo4PP/yQAwcOsHPnTvR6faX1lkgkEolEUrvY/SQhBCkpKSxatIi8vDwefPBBh/0WLlzIHXfcwQMPPIDRaOSbb77hvvvu46effuK2225T95s7dy6vvvoqffv25bXXXsPFxYW///6brVu3cvPNNzutwyeffMKjjz7K888/zxtvvAHAgAED+Prrr9V9MjIyOHbsGBqNhu3btzv4XcHBwVxzzTUA7Nmzh127djF27FhatmxJfHw8S5YsYfDgwRw/fhwPDw+HsmfMmEFwcDAvv/wy+fn5APy///f/mD59On379mXOnDmcOXOGO+64g4CAAMLDwyu054oVK3jkkUfo3bs306ZNA6Bt27YVHhMTE8P48eOZPn06Dz74IO+++y6jRo3i448/5vnnn2fGjBkAvP3224wZM8YhzcKxY8fo168fLVq04Nlnn8XT05NVq1YxevRo1q5dy1133VVh2RKJpBRCIpFIaolly5YJwOnHTvfu3UVISIhIT09Xtx06dEhoNBoxYcIEddsrr7wiADFu3Lgy5XTu3FmMGTNG/f+6664T9913nwDEiRMnhBBCrFu3TgDi0KFD6n4FBQVlzjVixAjRpk0bh20RERECEBs3bnTYvmDBAgGIVatWqdvy8/NFVFSUAMS2bdsqtM+8efMEIOLi4sp8FxERISZOnKj+b7fliBEjhNVqVbf36dNHKIoiHn30UXWb2WwWLVu2FIMGDVK3bd++XQBi5cqVDuVs3LjR6XaJRCKRSCRXlvL8JFdXV7F8+fIy+5f2W4xGo+jSpYsYOnSoui06OlpoNBpx1113CYvF4rB/Sf8hIiJC3HbbbUIIIRYuXCgURRGvv/66w/6rV68WgDh+/LgQQoj169cLV1dXcccdd4j7779f3a9bt27irrvuKreeQgixe/duAYgvvviijP79+/cXZrPZQa+QkBDRvXt3UVRUpG7/5JNPBODg35SHp6engx9VusySvpfdz9u1a5e6bdOmTQIQ7u7uIiEhQd2+dOnSMj7esGHDRNeuXUVhYaG6zWq1ir59+4p27dpVWleJROKIXL4nkUhqncWLF7N582aHD0BSUhIHDx5k0qRJBAQEqPt369aN4cOH88svv5Q516OPPlpm24ABA9SQ7tzcXA4dOsS0adMICgpSt2/fvh0/Pz+HBOslc0LZZykHDRrEmTNnyM7OdigjMjKSESNGOGz75ZdfCAsL495771W3eXh4qLNyV4IpU6agKIr6/w033IAQgilTpqjbtFotvXr14syZM+q21atX4+vry/Dhw0lLS1M/PXv2xMvLi23btl2xOkskEolEIimfkn7Sl19+yZAhQ3jkkUdYt26dw34l/ZbMzEyys7MZMGAA+/fvV7d///33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znf43//93zEzDtva2rjgggs499xz2bhxI1dccQVf+tKXxtTTRDETWWOzBXNJFxk1Q3u0HYfVYQZaHtn1CGktzfLy5Rxbc+yYnzVqHEwVhBBktezYwabYKMEmAQ7FQYWzgkZPI8srlpvBpuPnHc/x847nhNoTOGHeCRw37ziOqDyCxWW5YFOVs2rMYNNkMJf6xMGipIviQKHL94QQpEIhMpEIWjxOciBEdtAPypcTAwOosdgBfSgtFkONxYgHg2jxOGosRmJgYIScjUZHXSI21vK9/Hoc2WyWjRs38sILL2C1Wocsucpf6pa/3PDBBx/klltu4fbbb2f79u088sgjrFq1CiEEDz30EHV1dXzjG9+gs7OTPXv2jPAHjGVhhq8RjUZ5+eWXOfvss3n/+99PZ2cnN998s7lk6ZZbbmHDhg3ce++9PPnkk3z+858H4OSTT2bz5s0APPDAA7S2tnLKKaewZcsWQPefWltbOemkk8x7G5wGBgY4++yz+de//sVLL73EO9/5Ts4991yam5uH1Nu5+eabOeGEE/jPf/7D1VdfzdVXX82mTZsOyCkej5NMJjnuuON46KGH2LJlC1dccQWXXHIJL7/88hA7/frXv8ZisfD8889z++23j7CZ4T+53W6effZZnnzySVwuF2vXriUWi/G5z32OCy+8kHe+8520tbXR2dnJCSecwIsvvgjowaL9+/fz0EMPmf0EcksSh/tPyWSS3/3ud3z961/n+uuvZ9u2bXzrW9/i+uuv595770UIMWLJXltbG+9///s555xz2LhxI5/4xCf48pe/PKLvTXb5XqFL3aCw5XtqNMbejW8Q3roZ92AdqYGLLuF7+6wkVMFSr8qpth08an8FgDfPO4sqrRZLMs38MjvxUIiKbAXljvKClrqNx8ngMduW78WiUQi2sDeokdT0IExrT4xqYaeh+WkA9iw/i75MmP5+Ri7fS8YIJirA7iObzhLqDCE0MXXL94JxEiF9nWW0P0oyous90hchFdPHS7gnTDqeJitL9ATS9GGny11JW7qKsKceyVuHNTmPxbKPY2QPZZEyjnbMZ5lrAdEBK36rF4tkpXlweduYS91SWVp69fZGkhna+vX+EIpnxly+1z2gt33Glu9lM+xq60ELd5EN7mfXvm7QNNL2SnZna6HhzSTnHcveTAVULCImuWjp6IHBLNYZ7XuH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7Xl5eb1yTrvdjrlz5yIlJQUPPPAARo0ahYSEBPz444/4zW9+0+URWS0xmUw466yz8OGHH+Kzzz7DOeec02qfU045BS+99BIOHjyIdevWYc6cORAEAaeccgrWrVuHgoICKIoS1in12muv4dprr8X555+Pu+66Czk5OdDpdHj44YfDRneH6KucMNI8LaTlr371K1xzzTVt7huqg9bTc4Xo6sPE9rRasGABcnNz8dprr+FnP/sZXnvtNeTl5akdyQzTE7hTimGYLjNs2DAAwSKIR7Nv3z5kZWV1aQjvMcccg2OOOQbr1q3DwYMH1UTjZz/7Ge644w688847kGVZLWgJAP/617/g8/nw0UcfhT0tOnrKW2ft37VrF4go7Mu5LX/6glGjRmHHjh04/fTT+3SkUcs4haYGhigqKlL/3hWuvvpqnHfeediyZQtef/11zJgxA5MmTerV9jIMwzBMSwZ7vpGent7qn/309HTk5+dH3AlQXFyMU089Vf29sbERVVVVOOusswAEV3lraGjA+++/H6bHoUOHwo4zatQoAMCuXbs6bYsgCHj99ddx3nnn4ZJLLsGnn36KefPmhe0TismXX36JLVu24J577gEQjNHzzz+PgoICWCwWzJw5U33Pu+++i5EjR+L9998P0/fee+/tkhbZ2dkwm83q9MCW9EdOmJ2djeTkZMiy3OedOsOGDYOiKCguLsaECRPU7TU1NbDb7V3OCXU6Ha644gqsWbMGjzzyCD744AMsWbKk3U4xhukOPH2PYZguk5+fj+nTp+OVV16B3W5Xt+/atQtffPGFmth0hTlz5uCrr77C5s2b1YRk+vTpSE5Oxh//+EeYzeawBCT0pdfyyY/D4cDq1au7fM6zzjoLlZWV6nK9QHCJ5BdffLHLx+gJl156KSoqKvDSSy+1+ltTU1OrqQiRMmvWLOTk5OCFF14IW+73008/xd69e3H22Wd3+VgLFy5EVlYWHnnkEXzzzTc8SophGIbpczjf6H1efPFFBAIB9ffnn38ekiRh4cKFANr22+/3489//nPYcY499liMGDECTz75ZFhsjn5vCKPRiPfffx+zZ8/Gueeei82bN4f9fcSIERgyZAieeOIJBAIBnHzyyQCCcSspKcG7776LE044AXq9NpairbZ+//332LRpU5e00Ol0WLBgAT744IOw6Y979+7F559/3qVj9ASdToeLLroI7733Hnbt2tXq73V1db12rtBn5cknnwzbHhq1352c8KqrroLNZsMNN9yAxsZGzgmZXoNHSjEM0y0ee+wxLFy4ECeeeCIWL16sLtGcmpqK++67r8vHmTNnDl5//XV1iDYQ/JI+6aST8Pnnn2PevHlhtQfOOOMMGI1GnHvuueqX4UsvvYScnBxUVVV16ZxLlizBs88+i6uvvhpbt25Ffn4+Xn31VSQmJnZLg0i56qqr8Pbbb+PGG2/E2rVrcfLJJ0OWZezbtw9vv/02Pv/8c8yaNavH5zEYDHjkkUewaNEizJ07F5dffjlqamrw1FNPYfjw4bj99tu7daxf/vKXePbZZ6HT6XD55Zf3uH0MwzAM0xmcb/Qufr8fp59+Oi699FIUFRXhz3/+M0455RT84he/AACcdNJJSE9PxzXXXINly5ZBEAS8+uqrrTqaRFHE888/j3PPPRfTp0/HokWLkJ+fj3379mH37t1tduqYzWZ8/PHHOO2007Bw4UJ88803YTWp5syZgzfffBNTpkxBeno6AKhTLffv348rrrgi7HjnnHMO3n//fVxwwQU4++yzcejQIbzwwguYOHEiGhsbu6TH/fffj88++wxz5szBzTffDEmS8Mwzz2DSpEnYuXNnt7SNhD/+8Y9Yu3Ytjj/+eCxZsgQTJ06E1WrFjz/+iP/85z+wWq29cp5p06bhmmuuwYsvvqhO0dy8eTNeeeUVnH/++WGj5zpjxowZmDx5srpwz7HHHtsrbWQYHinFMEy3mD9/Pj777DNkZmZi5cqVWLVqFU444QRs2LCh3eKIbRF6Wjl+/HhkZma22n50Qctx48bh3XffhSAIWLFiBV544QUsXboUt912W5fPmZiYiP/+978444wz8Mwzz+Chhx7CKaecgkcffbTLx+gJoijigw8+wB//+Ef89NNPWLFiBe6//35s2bIFt912m1rwvDe49tpr8dZbb8Hv9+M3v/kN/vKXv+CCCy7A+vXrW62W0xlXX301gOBqgPn5+b3WRoZhGIZpD843epdnn30WEyZMwMqVK7FmzRpcfvnl+PDDD9Xpb5mZmfj444+Rn5+P3/3ud1i1ahV+/vOft9nmBQsWYO3atRg7diz+9Kc/4Y477sB///tfnHvuue2ePyUlBZ9//jny8vLw85//HAcOHFD/FopBqNMQCC7CcuKJJ4b9PcS1116LP/zhD9ixYweWLVuGzz//HK+99lq3HuxNnToVn3/+ObKzs7Fy5Uq8/PLLuP/++3HBBRd0+Rg9ITc3F5s3b8aiRYvw/vvv49Zbb8VTTz0Fq9WKRx55pFfP9de//lXNN5cvX46vvvoK//M//4M333yz28cK5YRc4JzpTQSKtDIuwzAMMyjYsWMHpk+fjr///e+chDAMwzAMwwxSnnrqKdx+++0oLS1ttSIgw0QKd0oxDMMwHXLrrbfilVdeQXV1dZcKyzIMwzAMwzDxBRFh2rRpyMzM7Fbhf4bpDK4pxTAMw7TJv/71L+zZswcvvvgibr31Vu6QYhiGYRiGGWS43W589NFHWLt2LX766Sd8+OGH0W4SE2fwSCmGYRimTYYPH46amhosWLAAr776KpKTk6PdJIZhGIZhGKYfKS0txYgRI5CWloabb74Zv//976PdJCbO4E4phmEYhmEYhmEYhmEYpt/h1fcYhmEYhmEYhmEYhmGYfoc7pRiGYRiGYRiGYRiGYZh+hwudd4KiKKisrERycjIEQYh2cxiGYRiG6WeICC6XCwUFBRBFfp7XFTh/YhiGYZjBTVfzJ+6U6oTKykoUFhZGuxkMwzAMw0SZ8vJyDB06NNrNGBBw/sQwDMMwDNB5/sSdUp0QWm2qrKwMaWlpUBQFACCKYoe2IAgQBKFdW5ZlCIIAn88Hg8EAnU6nbg/1IiqKEmbrdDoQUbs2EUEUxXbtrra9Jz6Jotiu3ZFPsiwjEAjAZDKBiOLCp0jjJMsyvF4vEhMTEVqHYKD7FGmcBEGAx+OB2Wzu0L+B5FOkcTr6fhEPPkUSJ0VR0NTUhMTERACIC58ijVPo85GQkKBqM9B96ont8/lgNBrV9vamT263G4WFhbwCZTcIaVVeXo6UlJRePz4Rwev1IiEhYdCPxGItgrAOGqyFBmuhwVposBYafamF0+nsWv5ETJs8++yzNGHCBBo7diwBoKKiIiIiqqmpoZqaGiIiqqyspLq6OiIiOnLkCDU0NBAR0eHDh8lmsxERUWlpKTkcDiIiKikpIZfLRURExcXF5HK5qLi4mPbt20der5eIiPbu3Ut+v58kSaK9e/eSJEnk9/tp7969RETk9XrVtng8HiouLiYiIpfLRSUlJURE5HA4qLS0lIiIbDYbHT58mIiIGhoa6MiRI0REVFdXR5WVlb3uk8fjISKioqKibvm0b9++ME3iwadI41RXV0c//PADSZIUNz5FGidJkmjLli2qf/HgU6RxcrvdVFxcTLt3744bnyKJk8vlok2bNpEkSXHjU6RxkiSJtm/frvoXDz5FGqeGhgYqLi6mgwcP9olPDoeDAKjHZjonpFnoepNlmWRZ7tRWFKVDW5IkUhSFJEmioqIiCgQCYdtDf2tpE1GHduj87dldbXtPfWrP7swnSZJo//795PP54sanSOLk9/tp//79JElS3PgUaZyO/nzEg0+RxikQCFBxcTH5fL648SnSOPl8PiouLqZAIBA3PkUap0juF7HuU6Rx6uh+0VOfupo/cadUJ/R1UtWeHasXLfvEPrFP7BP7xD4NNp+4U6rr9MdDvYHWaco+sU/sE/vEPrFPg9GnruZPAlHz/CCmTZxOJ1JTU+FwOHp9+DkRwe12w2Kx8LBB1kKFtdBgLTRYiyCsgwZrodHXWvRlLhCvhDSz2Wy9Xv4gNM3S5XIhKSlJnfoeq9NL+3rKrCiKaGxshNlshl6vjwufIi1/4Ha7kZyczOUPBCHs8xEPPvWk/EHLqe7x4FOkcZJblAgJnX+g+xRpnCK5X8S6T5HGCUC794ue+uR2u7uUP/ESMlGEiFBbW6t+EAYzrIUGa6HBWmiwFkFYBw3WQoO1iF1Ciaooil2yQwlye3aoBicRob6+Xj1PaLsgCK1sAB3aofO3Z3e17T31qT27M5+ICHV1dZ36MZB8iiROgiCgvr5e/WctHnyKNE5Hfz7iwadI4wQAtbW16j7x4FOkcRJFEbW1terx48GnSOMUyf0i1n2KNE4d3S96w6euwCOlOqErT0cVRYHf7+/nljHMwKZlwW6GYZhYhkdKdZ+uaiY3L3TCMEzX4RyKYZiBQFdzAV59r4f4/X4cOnRIHQrXXVoOdxvssBYag0WLtLQ05OXlqb3uR0NEcLlcSE5ObnefwQJrEYR10GAtNFiLgQcRobq6Gna7PeJjDJbvyq7AWgQZTDp0lEPxPVGDtdBgLTRYC41Y0II7pbpIqNPp6LmolZWV0Ol0GDp0aNgQOABdsgOBAPR6vTrkraOBa909dqzZHflERJAkCQaDIWba21OfemIHAgFVi3jxqaVNRGhqalKn2xQUFLQ53xkAGhoaYLFY1CXvQ5+VeJjDfbQfHfkEADabTa0ZEg8+RRInRVHQ0NCApKQkAIgLnyKNEwBYrVYkJiZCr9fHhU+R2kQEm82GxMREdRh5b/rE9D6hDqmcnBwkJiZ2OxFu+V3J/1CwFsDg0YGI4PF41GlY+fn5be5js9mQlJQU11p0BdZCg7XQYC00YkGLwfEoIQKee+45TJw4EbNnzwYA9cZfX1+vzrmsqqpCY2MjsrOzYTAYYDAY1CJ6IVsURRiNxla2IAgwmUxISUmBKIowmUxISEgAgDA7ISEBJpMpzBYEoZVtNBohimIrOzS892hbr9eH2Xq9Xm17SzsSn462u+KTKIpISUmJK596EqeEhAS18yFefDraj8zMTGRmZsJqtUKWZdTU1MBqtaqfLbvdDlEUodfr4XK5AADl5eWqXVpaCrfbDQA4dOgQvF4vAKCkpESdTltcXAxJkqAoCoqLi6EoCiRJQnFxMYDgSMeSkhIAgNfrxaFDhwAAbrcbpaWlAIKF/8rLywEADocDFRUVAAC73Y6qqioAwY6BmpqaVveItnwCgIqKCjgcjm75JEkShg0bptrx4FMkcfL7/WpHQrz4FGmcRFFEUlIS6urq4sanSOPkcrkwbNgw1e4Ln5jIaPlQL2QHAgHYbDbk5OQgIyMDCQkJ6ndL6HuoM9tsNiM5ObnVe9t6dffYsWZ35lN7WsSy3RdxSkhIQHJyMsxmc9z41F68MzIykJ2dDbvdjkAg0OpzJooiCgsL1X8wQ533R9uyLHdoE1ErG0CHdqgt7dkt7wWR2G350ZFPgiBg2LBhqg/x4FOkcSIiDBs2TH1wEw8+RRonACgsLFQfbsWDT5HGqaP7RW/41CWI6ZDQMoah5RJbLkPtdrtp9+7d5PF41GWkiahbdiAQaHN7W6/uHjvW7M58ak+LWLb7Kk4ttYgXn9qyQ5+hpqamNpd7VxSFGhoaOl36fTAsYS/LMtlstrBrY6D7FEmcZFmmhoYGdZ948CnSOCmKQlarNUybge5TT2ybzRbW3t70qatLGjNEzz77LE2YMIHGjh1LANRlrlsuT3348GH66aefyOPxkM/no0AgQEQUZnu9XjUOLe3Q94WiKOR2u9XrwOPxqNtDeZksy+pS1rIsU1NTUytbkiR1ieuWdiAQIJ/P18r2+/1htt/vV9ve0o7Ep6PtrvqkKAr5/f648inSOLXUI158ai9ODoeD9uzZQ4cPH2613LuiKLRv3z6yWq1ENLiXsG9qaiKbzUZ79uyJG596EiebzUZOpzOufIokTrW1tVRcXEyKosSNT5HGSVEU2rNnD9nt9l73qav5Exc674SOinOFngSPGDFCHV3SHWiQDDPuCqyFxmDSorPPkKIoqKiowJAhQwZNjYj2YC2CsA4arIWGoiiora1FTk5On2jBhc67T0gzm82GtLS0sCmXHo8HpaWlGDlyJEym4IjcSKaa+/1+GI3Gfp+C3t92Zz6FtDAYDOrU2Fhpe3+XCghdE715zGj71J7t9XpRWlqKYcOGqaPilRajQMrLyzF06FAufwCgsrISeXl5g7r8AVGwVEp1dTUKCgogCEJc+BRpnCRJQmVlJYYOHap+Zga6T5HGiShY4zE3N7fV/aKnPrnd7i7lT9wp1Ql92SnFMIMd/gwxDNNTmgJN0It6uPwuJBuTISkSzAZzr56DO6W6D+dPDNO38OeIYZie0tc5VFfzp8H9aDXKhHqsuV+QtWgJa6GhKAqsVmvYk7/BCmsRhHXQYC0An+zDy7texry352Hu23Mx7+15WL1rNXyyL9pNY/oY/q7UYC2CsA4a/P2gwVposBYarEVs5VDcKRVlBvMH4Wiuu+46XHDBBb12vHnz5mH58uW9drz+hK8Ljaampmg3IWZgLYKwDhqDWYumQBP+uvOveGHnC3D6nQAAp9+J53c+j7/t/BuaAoNXm8ECf1dqcA4VhK8JjcH8/XA0rIUGa6ExmLWItRyKO6WiiCAIai2EwU5oXnNXCAQCfdya6MLXhYYoilwvpxnWIgjroDHYtdCLeryx7402//b6vtehF/X93CKmP+HvSg3OoYLwNaEx2L8fWsJaaLAWGoNdi1jLoQZnFGKEUEHrwTbM+N1338WUKVNgNpuRmZmJ+fPnY8WKFXjllVfw4YcfqoXVvv76a5SWlkIQBLz11luYO3cuEhIS8Prrr6OhoQGXX345hgwZgsTEREyZMgX/+Mc/1HNce+21+Oabb/DUU0+pxwstSb5r1y4sXLgQSUlJyM3NxVVXXaUuOQ4Elyy/8sorYbFYkJ+fjyeeeCLsieEDDzyAyZMnt/Jr+vTp+L//+78e6zNYr4u2UBQF9fX1/OQTrEUI1kFjsGvh8rvUp3tH4/Q74Qq4+rlFTH8yWL8rOYdqn8F6TbTFYP9+aAlrocFaaAx2LZx+Z0zlUNwp1UVCF6yiKGF26IsvVAW/O3bLbW39fvQr0vPEik1EqKysxOWXX45FixZhz549+Prrr3HBBRdg5cqVuPjii3HmmWeisrISVVVVOPHEE9Vj3HPPPVi2bBn27t2LM844A01NTZg5cyY+/vhj/PTTT1i6dCmuuuoqfP/99wCAJ598EieeeCKWLFmCyspKVFZWorCwEDabDaeddhpmzJiBLVu24NNPP0VNTQ0uvfRS9Vy33347NmzYgI8++ghffPEF1q1bhx9//FH14brrrsPevXuxefNmdduPP/6InTt34tprr+2xXm1dH/0dp2hce0d/tkK2z+cL26ctW5blDm0iamWHzt+eHTp/e3Z77e2qHYlPgUAg7nyKJE4+ny/ufIo0Tn6/P+586op9xHkEZoMZKca2i2amGFOQbEjuVZ+Y2KPl9+ZgoKqqCpdffrmah3z99de48MILce+996o5VFVVFaqqqnDSSSep77vnnntw2223Ye/evViwYAG8Xi9mzpyJTz75BLt27VJzqM2bNwMAnnrqKTWHCh2vsLAQdrtdzaF++OEHfPbZZ2oOFeKOO+5Qc6gvv/xSzaFChNq+ZcsWddu2bduwc+dOLFq0qMcaDbZroiPieVRcd2EtNFgLjcGqxdaarUg0JHaaQ/Un3CnVDs899xwmTpyI2bNnAwBqa2sBAPX19eoToZa9q6F/Fo+2W/7D0NIO/aNtNBrh9/vVL1Gv1xtmA8Ev2JZ2y3/IQraiKPD7/a1sWZbVD1xLW5KkMFuSJLXtLe1IfDracSthwwABAABJREFUbulTaWkpJEnCBRdcgLy8PEyZMgU33XQTjEYjLBYLjEYj0tPT1WVbQ34sW7YM55xzDkaMGIGcnBzk5ORgxYoVmDJlCgoLC/HrX/8aCxYswJtvvgkAsFgsMBgMSExMRGZmJrKysqDT6fD0009j+vTp+MMf/oBRo0Zh6tSpePnll7F27Vrs27cPLpcLf//73/Hoo4/i9NNPx5gxY/C3v/0Nsiyr/7AMHToU8+fPx+rVq1X/Vq9ejblz56KgoKBX4gQEh6FHK079ee2F2lVTUwOr1QogmHjb7XZ1uVKXK9hbX15ertqlpaVwu90AgEOHDqntLCkpUdtQXFysnqO4uBiKokCSJBQXF6u6lJSUqD4fOnQIAOB2u9Wnwi6XC+Xl5QAAh8OBiooKAIDdbkdVVRUAwGq1oqamBkD4PaItnwCgoqICDoejWz5JkoT8/HzVjgefIomT3+9HU1MTRFGMG58ijZMoijAajairq4sbnzqLU0NDAz448AEu/OhCfFf5HS4ffzna4srxV8LldvWqT0xsMRinalVVVUGSJFx44YUYPnw4pkyZgptvvhnJycmwWCwwmUzIy8tDXl4ejEaj+r7ly5fjwgsvxIgRI5Cfn48hQ4ZgxYoVmD59OkaOHIlf//rXOPPMM/H2228DAFJTU2E0GpGYmKgeT6fT4dlnn8WMGTPwhz/8AePHj8eMGTPUHGr//v1wuVx45ZVXsGrVKpx++umYPHkyVq9eHdaxO3ToUCxYsEDNoQCoOdTIkSN7pM9gvCbaQxRF5OfnD9qpSS1hLTRYC43BqIVCCl7Y8QKu+/y6TnMoSZH6t3HEdIjD4SAAZLPZiIhIlmWSZZmIiNxuN+3evZuamppIURRSFIWIqFu23+8nWZZbbW/r1d1jx5qtKAoFAgE6/fTTKTk5mS6++GJ68cUXqaGhgWRZpquuuorOO++8sPcdPHiQANC6devCtgcCAXrggQdo8uTJlJ6eThaLhfR6PV1yySXqPnPnzqXbbrstrC0XX3wxGQwGslgsYS8A9Mknn9D27dsJAJWWloa1fcaMGbRs2TL1OO+99x6lpaWRx+Mhr9dLmZmZ9Morr/SaXn6/P2qx789rz+PxqJ+hlp+tkC3LMlVVVZEkSer20Htb2pIkdWgritLKDrWlPTvUlvbsttrbHbstPzrySZIkqqmpCbs2BrpPkcRJkiSqqqpSjxsPPkUaJ1mWqbq6mgKBQNz41JHd4Gmg27+6nSavmUyT10ym2766jdx+Nz3343N00hsn0eQ1k+mkN06i5358jrySt1d9CuUCDoeDmK7RkWZNTU20Z88eampqivj4Lb8rBwuSJLXKoaxWKymKouZQLTl06BABoPXr17c6Tkc5FBGpOVRLOsqh/v3vf6s5VFlZWdj7ZsyYEXas999/n9LS0qipqYl8Ph9lZmbS3//+9x7rM9iuiY4+R7IsU01NjXr/HMywFhqshcZg06KhqYFu+OIGNYd6cNOD5Al42s2heouu5k9cBbSLhHpRW/amiqKoPo1p+VSmqzY1j0oJzdc/ep+2iOQ8sWTr9Xp8+eWX2LhxI7744gs888wz+O1vf4vvvvuu1f4tdUlKSgrbvmrVKjz11FN48sknMWXKFFgsFixfvlx9+t3e+RsbG3HuuefikUcewdHk5+fjwIEDrdrQ8jih33/xi1/AZDLhgw8+gNFoRCAQwCWXXNKj66EtohWn/mxL6PejP1tAcORVy89ZW/sAgE6ni8gWBKFdu63rsLP29qZ9dHuV5hFlOp1ObcNA96mr9tF+hI4ZTz5FEidFUcL0iAef2rM3VW7C79b/DrVNtdAJOlw67lJcP/l6JBoSsWjyIiyZugROvxMpxhRIigSTzoSW9IZPTGSE7l2hn6ERsKEcqGUu1B37aNrbHsmxY80OIYoivvjiC2zcuBFffvllqxzqaE1DJCYmhm1/7LHH8NRTT+GJJ57A1KlTkZiYiNtvvz1s5H5ofyJS2xLKof74xz+2amNBQYE6wrDluUKf8ZZtO+ecc2AymfD++++rOdRFF13U6n3dtVsSzTi1pC/PGfpdaZ7aHPpshWj5OQt9XwiCEGbLsqzmWW3Zofe2tHU6nTr9ui2biCCKYrv20feC7tpt+dGRTyFkWVavk4HuU6RxOnpafTz41JM4tff9NJB9asveWr0Vd6+7G7WeWhhFI66bfB2unXwtTKIJ106+tlUOZRAM6r2/pz51lcEzXi0GEQQBBoOh1RdpvCMIAk4++WTcf//92LZtG4xGIz744AMkJCR0uXbHhg0bcN555+FXv/oVpk2bhpEjR2L//v1h+xiNxlbHO/bYY7F7924MHz4co0ePDntZLBaMHDkSBoMhrNaBw+FodWy9Xo9rrrkGq1evxurVq/HLX/4SZrM5QkXCGazXRVuIooicnJxBNbS2PViLIKyDxmDQwif78OiWR7H0y6WobapFgaUAD578IO6afRdyLDkAALPBDIPOgExzJgw6A8yG3rkXM5HRX+UPQklx6J/ueC9/EPIDAGbOnIn7778fW7duhcFgwAcffACTyaSev6UfoTa09GPDhg0499xzcdlll2HatGk45phjUFRUFOZTqLOopU/Tp0/H7t27MWTIEIwYMQKjR4/GMcccg5EjR8JisWDo0KFqDhXy4+gcyuv1QqfT4eqrr8bLL7+MNWvW4LLLLgvrvOpJnELXRrTj1J/XXn19fZvlDwKBAJc/aC55kJOTM+jLH3i9XpSVlSEnJwdNTU1x41OkcbLb7WrHTrz4dHSc6urq8MruV3DdF9eh1hPMof530v/issLLYDFYUFFRAb/bD4POAJ/NB6/HC7PB3Os+dQliOqQvh58rikI+n2/QDDMmIvruu+/o97//PW3ZsoXKysro7bffJqPRSJ988gk98MADdMwxx9C+ffuorq6O/H6/OvR827ZtYce5/fbbqbCwkDZs2EB79uyh66+/nlJSUsKGri9ZsoRmz55Nhw4dorq6OpJlmSoqKig7O5suvvhi2rx5Mx04cIA+++wzuvbaa9XpGtdffz2NGDGCvvrqK9q1axdddNFFlJycTMuXLw9rw/79+0mn05FOp6Pvvvuu1zQaTNdFZ58hWZapsrJy0Ayt7QjWIgjroBHvWhRZi+iCDy9Qh5rfvvZ2OmA70Oa+fa0FT9/rPn1d/uDo78qW249+dffYsWaHXps2baKHHnqINm/eTGVlZfTWW2+1mUPV1taSz+dTc6gff/wx7HihHGr9+vW0Z88eWrx4sZpDhfYJ5VAHDx6kuro6kiSJjhw5ouZQ33//PR04cIA+/fRTNYdSFIUWL15MI0aMoP/+97/0008/qTlUaPpe6PhFRUVqDrVp06Ze0yt0TUQzTv11fo/HQ3v27CG3293m9O4jR45w+YPm8geVlZWDvvyBogSnt1ZWVpIkSXHjU6RxCgQCdOTIkbDPzED3qaVt89jo1//5tZpDLfliCe1r2NemTx3dL/qr/AFP34syg200TEpKCr799ls8+eSTcDqdGDZsGP70pz9h4cKFmD59OtatW4dZs2ahsbERa9euxfDhw9s8zu9+9zscPHgQCxYsQGJiIpYuXYrzzz9f7cEGgBUrVuCaa67BxIkT0dTUhEOHDmH48OHYsGEDfvOb3+CMM86Az+fDsGHDcOaZZ6qjDR5//HHceOONOOecc5CSkoK7774b5eXlSEhICGvDmDFjcNJJJ8FqteL444/vVZ0G23XREQaDIdpNiBlYiyCsg0Y8aqGQgtf2vIYnf3wSASWAFGMKbph2Ay4ZewnM+vZHQcWjFvFAX5Q/AKCOiGlrn7aI9DyxYgPBAuTr1q3DU0891a0c6mitQznUmWee2SqHCu0TyqEmTZrUZg61YMGCVjmUIAh44okncOONN+Lcc88Ny6FCo8lDxx87dqyaQ51wwgm9plFPr6veaMPR9NU5Q7+Lotjqc6YoCkwmU9g+IWJ9unZP7bbKHxgMBi5/0GyHZmN0VgphIPnUkR8d+WQymeLOJwDYXb8bd35zJyoaK6AX9bhm0jW4btJ1SDGFr7YX2p+I2r1f9Ff5A4Gog4nQDJxOJ1JTU+FwOJCSEh7I0PC6ESNGtOqwYOIHt9uNIUOG4E9/+hMWL16sbicijBkzBjfffDPuuOOOKLZw4MKfIYZhWlLjrsHvNvwO31UFa+TMyJmBZdOXYVb+rKi2q6NcgGkbzp8YgHOovoQ/RwzDtISI8FbRW3h0y6MIKAHkmHNw+6zbcebwM6EXozMWqav5U/wWohgAEFGropKDlVjSYtu2bfjHP/6BkpIS/Pjjj7jyyisBAOedd566T11dHZ599llUV1dj0aJFvXr+WNIi2iiKgoqKim4VyotXWIsgrINGvGnxZdmXuOiji/Bd1XcwikYsnrIYT5/6dJc6pOJNC6Zz+LtSI5a0iGYOFUs6RBu+J2qwFhqshUa8aeEOuPGbb3+D33//ewSUAGbnzsZTpz6Fc0ae02mHVCxowdP3okw8F6jtLrGkxapVq1BUVASj0YiZM2di3bp1yMrKUv+ek5ODrKwsvPjii0hPT+/188eSFtGmtwrIxwOsRRDWQSMetHAH3Hj4+4fxYcmHAICRqSNx64xbcVrhadCJXR/6HQ9aMN2Dvys1YkmLaOZQsaRDtOF7ogZrocFaaMSLFvtt+3Hn13ei1FkKnaDDFROuwNIpS5GWkNblY0RbC+6UiiKCIECv5xAAsaXFjBkzsHXr1g736cuncLGkRbQRRREZGRnRbkZMwFoEYR004kGL7bXb8T/r/gdHGo9AgIDzRp+HG6fdiCFJQ7p1nHjQguke/F2pEUtaRDOHiiUdog3fEzVYCw3WQiNetPhn8T/x++9/D5/sQ0ZCBpbPXI5zRp4Dg9j1OpuxoMWgeJywatUqTJo0CZMnT8Zrr70W7eao8DBjDdZCg7XQUBQF5eXlcTO0tiewFkFYB42BrEVACeC57c/hms+uwZHGI8gyZ2HliSvxfyf8X7c7pICBrQUTGfxdqcFaBGEdNPieqMFaaLAWGgNdiyapCb9b/zus3LgSPtmHadnT8NS8p3DB6Au61SEFxIYWcf844aeffsIbb7yBrVu3gohw6qmn4pxzzkFaWlq0mwaAhxm3hLXQYC2CCIKA5ORkXo0QrEUI1kFjoGpx2HkY/7Puf7CzficA4JQhp+DXM36NiZkTIz7mQNWC6Rn8XanBWgRhHYLwPVGDtdBgLTQGshaHHIdwx9d34ID9AAQIuHTcpbhp2k3INGdGdLxY0CLuO6X27t2LE088UV2VYtq0afjss8/wy1/+Msot42HGLWEtNFgLDUEQYqYDOdqwFkFYB42BpgUR4f3i9/HIlkfQJDXBYrBg8eTFuGLCFbAYLD069kDTguk5/F2pwVoEYR00+J6owVposBYaA1WLTw99ivs23geP5EGqKRXLZiwLjo7SdW90VEtiQYuYf5zw7bff4txzz0VBQQEEQcAHH3zQap/nnnsOw4cPR0JCAo4//nhs3rxZ/dvkyZPx9ddfw263w2az4euvv0ZFRUU/etA+RASfz8fDjMFatIS10FAUBWVlZQN2aG1vwloEYR00BpIWNq8Ny9cux32b7kOT1ISJmRPx2M8ew/VTru9xhxQwsLRgegf+rtRgLYKwDhp8T9RgLTRYC42BpoVf9uOh7x7C3d/eDY/kwcSMifjT3D/h0nGX9qhDCogNLWK+U8rtdmPatGl47rnn2vz7W2+9hTvuuAP33nsvfvzxR0ybNg0LFixAbW0tAGDixIlYtmwZTjvtNFx44YU44YQToNN1fTWfvoaf6GiwFhqsRRBBEJCenj4gh9b2NqxFENZBY6BosaFiAy786EJ8Vf4VdIIOV064Es+d/hzmDJ3Ta20fKFoMNGK1JmcI/q7UYC2CsA5B+J6owVposBYaA0mLclc5rvr0KrxV9BYA4ILRF+Dp057G8fnH98rxY0GLmL9zL1y4EAsXLmz3748//jiWLFmCRYsWAQBeeOEFfPLJJ3j55Zdxzz33AABuuOEG3HDDDQCA66+/HmPGjGn3eD6fDz6fT/3d6XQCgNpzGPopiiIURVGfxoR+CoLQLVun04GIQERh29uiu8eONbszn9rTIpbtznyKxAaC11c8+dSRHfr96M9WyE5KSlLboSgKBEGAIAhhtizLqmZt2aH3trRD11t7NhFBFMV27fba21W7LT868yklJSXufOpunADAYrGEXT8D3aeexCkpKUm9Z8aaTx6/B8/seAav730dADAkaQhunX4rzhh2Box6Y6/HKSUlRd3e2z4NRmK9JqcgCDH1kDGasBZBWAeN0D2RYS1awlpoDBQt/nv4v/i/9f8HV8CFZEMybp5xMy4ZewlMOlOvnSMWtIj5kVId4ff7sXXrVsyfP1/dJooi5s+fj02bNqnbQqOmioqKsHnzZixYsKDdYz788MNITU1VX4WFhWHHqK+vR319vWqHktVAIABZllvZfr9f3ael7fP5oCiK2gkW+sfc6/WG2UCww6ulHeo0a2krigK/39/KlmUZgUCglS1JUpgtSZLadkmS8MEHH2D06NHQ6/VYvnx5l3zyer1YunQpMjIyIIoitm3bBiLC4sWLkZmZCVEU8f333+PUU0/F8uXLW/nUUpO+8CnSOIXi0d04hfQI+b59+/Yu+SRJEjweD4go5nzqi2sv1K6amhpYrVYAQFVVFex2OxRFwbZt22Cz2QAA5eXlcLlcAIDS0lK43W4AwKFDh9R2lpSUqG0oLi5Wz1FcXAxFUSBJEoqLi1VdSkpKVJ8PHToEIDhCs7S0FADgcrlQXl4OAHA4HOr0X7vdjqqqKgCA1WpFTU0NgPB7RFs+AUBFRQUcDke3fPJ6vTh48CD2798fNz5FEiePx4MffvgBiqLEjU+RxklRFOzatQvV1dUx59PO6p245KNL1A6pU7NPxfPzn8fPsn+GqoqqXo+TzWbDwYMHUVZW1mc+DTZa1uQ0m81qTc5YIVanaoXyJ51Oh+XLl3fpPUSk5k+CIGD79u1tbps3b16bx4xVLSKlLd+7+r540qEnKIqCgwcPDtpO9ZawFhqshUasaxFQAnhsy2NYvnY5XAEXxqSNwSM/ewRXjr+yVzukgBjRggYQAOif//yn+ntFRQUBoI0bN4btd9ddd9Fxxx2n/n7CCSfQhAkTaNasWfTDDz90eA6v10sOh0N9lZeXEwCy2WxERCTLMsmyTEREbrebdu/eTU1NTaQoCimKQkTULVuSpDa3t/Xq7rE7sq+55hoCQADIYDDQqFGj6P777ye/30+KolBOTg7dfffddOT/2bvyuKjK9f89szIsg6BsooCA+25qZQta3rRuZtvN0lzLci2zxbqWpqVWmuaW2qLcsvqVWd3SbuaSmVqWmoqiiKyyiIDAwOxzzvP7YzwvMzDAMGzDMN/Phw8PhzPveb/P855zvvMuz5uTQxqNxqkyd+/eTXK5nI4cOUJ5eXlkMpnoxx9/JLlcTocPH2bHioqKqKyszGlfOGNv27aN8bH9+fDDD0kQBNq6dSs7JpFIqF27djR06FB6/fXXqbS0tEbfAKDg4GAaNWoUnTp1yu66tueo1WoaNmwY7du3j/1f9IfI3Ww2O83J1heNHfu67KZue7a2Tqdj95DtvSXagiBQWVmZ3XHxs7a26K+a7Ko+tVgsdr52ZIvXrMl2VN/62I541MaJ53kqLy+3a0etnZMrceJ5nj0/PIWTq3ES7w9b37Q0J5PZRNuSttHATwZSn8Q+dMsXt9Cn5z4lrVHbpHES7w/b+jZmnMrKyggAlZWVUWvBr7/+Svfeey9FRERU008iNmzYQNHR0aRUKmno0KF07Ngx9r9z585Rr169qKSkhK5du0bdunWjVatWOX392nym1+spOTmZ9Hq9S9yI7N+VzYma9JPZbCYiotDQUFqwYAHl5uaSRqNxqkxRKx05coTy8/PJbDY7PFZcXOywzIb4ojb9VPX/tvppyZIlVFpaWqNvbPXT6dOn7c5zpJ/2799fqz+cQUu1iZZCbfeRIAhUXl7eZnxRG7y+qITXF5VwZ1/kV+TThN0TqE9iH+qT2IcWHFpAueW5TXa9pvSFs/rJ7ZfvNQZsZ03VBaVSCaWycXsfa4NUKoXOZIFMIkG5wYQAHzksggCVvOmnH48ePRrbtm2DwWDAjz/+iDlz5kAmk2Hu3Lm4evUqRo0axRLMkxOjTmlpaYiIiMCwYcPY+bbHRAQHBzv8vLhUwlWo1WpcuHDBrr62ywzE/xMRysrKcOTIEbz11ltITEzE4cOH0bFjR3au6BsiwpUrV/Daa69hzJgxyMrKsrvm1q1bMXr0aBQVFeHVV1/FmDFjcPbsWXTp0qUad2f9CFRfvtdWwXEc/P39W8V676aG6AtxJlxbBcdxdsv32jLENuEuuKK9goWHF+Kvgr8AAIPDBmPuwLkYGDqwyWMl+kJw0xHPloCYk3PatGl48MEHq/1fzMm5efNm3HjjjXjvvfcwatQopKSkIDQ01C4nZ2BgoNvl5BSXaulNFkglEpQbzExD+SqaVt6KGsFoNOLHH3/E7NmzIZfLq+knZ+FIK9VHPzV02ZparUZKSordscDAwGr/JyKUlpbi6NGjWLFiBbZt24YjR4441E8AcOXKFbz66qu49957kZ2dbVf+tm3bmH5auHAh7r33Xpw9exaxsbEOuTsD7/K9Srjb+6El4fVFJby+qIS7+uJw7mG88tsrKDWWwlfmixn9Z+DRHo9CJVM12TXdwRetevlehw4dIJVK2TR/EQUFBQgPD29Q2Rs3bkSvXr0wZMgQAE23fM9g5rHl13QMXrYXN7y5D4OX7cWWX9Nhsgh2S6UaewmVIAiQy+UIDw9HZGQkpk+fjpEjR+L7779na0rvvPNOSCQSHDx4EFeuXMFjjz2GyMhI+Pn5oV+/fvjiiy8YpylTpuCZZ55BdnY2OI5DTEwMpkyZgrlz5yI7OxsSiQRdunSBwWCotnzvk08+weDBgxEQEICIiAg8+uijuHr1KuNx8OBBSCQS/PTTTxg8eDD8/PwwbNgwpKSk2HHiOA7t27dHeHg4OnTogA4dOkClUsFsNrPcIu3bt0doaCh69uyJSZMm4dChQ6ioqMALL7zAYsPzPBQKBcLDwxEUFIT+/fvj5ZdfxuXLl1k7EOverl07tGvXDn369MHGjRuh1+uxd+9eO39IJBLExMQ4HSfv8r3KpTk8z+PkyZPe5XtpadDr9bh06RJSUlI8hpMrcdJqtfjrr7/A87zHcHI1TjzPIykpifFrSU4/ZfyEh75/CH8V/AWlVIlpPadhfsx8DAob1CxxKikpwaVLl7zL92xw9913480338QDDzzg8P+2OTl79eqFzZs3w9fXF1u3bmXnPP300zh58iR++eUXyOXyOnNyajQaux/APienrS2+b8gmt2B9bCKCwcxjswMNZTTzduc15DpVbcA6gBkeHo6oqCjMmDGD6aeAgAAAwB133AGO43Dw4EEUFRUx/eTr64u+ffviiy++YGXaaiVH+kk8RkQYPnw4nn32WVYXW/0UHh6Oxx57DFevXmVlHzx4EBzHYd++fRg8eDB8fX2ZfrLlxHEcwsLCEB4ejrCwMISFhUGlUrFzbP/fs2dPTJs2DUeOHEFFRQVeeuklh74JCwtzqJ/EcwMDAxEWFobevXvj/ffft9NPVbk7GxtBEJiWaYrYO9Mmq/40x/Wr3luCIIDnebbcXzxue75o8zxfq01E1Wzx+jXZYl1qsh3Vtz62Ix61cbJYLLh06RJMJpPHcHI1TiaTCZcuXbLT362dk6txMpvNSE1NBc/zbsHJaDZi3cl1mLVvFkqNpeii7oLlty3HpJ6ToJKpmjROtT0vGiNOzqBVd0opFArccMMN2L9/PzsmCAL279+Pm2++uUFlz549G8nJyfjrL+uIb4cOHQBYR6nEkSoxdxIAyOVySCQS6EwWmImDkSfoTBZYIIHBIji0dWYBmw6mYe3+VGj01kag0Vuwdn8q3j+YBjOss6j0Zh48V2lbIKlmcxwHhUIBwDrLRrSlUinkcnk1WyKRsLrLZDLIZDKoVCoYjUZcuHABAPD1118jLy8Pw4YNA8/zuOGGG7B7924kJSVh+vTpmDhxIk6dOgWJRIK1a9diyZIl6NSpE/Lz8/Hnn39i7dq1WLp0KTp16oS8vDz8+eefdrPQRNtisWDp0qX4+++/8e233+Ly5cuYMmWKHQ8AWLJkCd5991389ddfkMvlmDZtmh0nMQ62nGxjI9riKJpcLkdERAQmTJiA3bt3s5tMKpWymTkKhQJarRbbt29HfHw8aweOePj6+gKwfomx9YfIvWpsaouTj48P41ETJ1vblpNoKxQKxruqbctPtJVKpZ0NWIWqrS3Wt6b25kzbq8pJrFdISAib2RYWFga1Wg2JRILu3buzEdvIyEjWkx8VFcV8HhUVxeoZExPDyo+NjWXxjI2NZaOosbGxzF+i4FUqlYiKimKxFG1/f39ERkYCsI4WR0REMDssLAyAtXMyJCQEgP0zwhEnAIiIiGC2s5yUSiUiIyMRFxfnMZxciZNKpULv3r0hkUg8hpOrcZJIJIiNjUVoaGiLcdLxOiQWJOLFQy+i3FyO2MBYvHXbW5h7w1x0j+1eb06uxikwMBCRkZHo1KlTk8XJk+COOTmJCGVaA8r1RuhMFpRW6FFhMFWzS8p10BrNqDBasOngpRo1VIXRAq3RjGsaLXQmq11SrqtmVxhMDgdZahvUE+suDhapVCro9XqcPXsWgHUW2uXLlzFs2DCUl5dj4MCB2L17N06cOIEnn3wSEydOxJEjRyAIAtauXYtFixYx/fTbb79hzZo1WLp0KSIjI5Gbm4s///yTdaoClQNHJpMJr732Gk6dOoWvv/4aGRkZmDJlih0PAFi4cCHeffdd/PHHH5BKpZg2bZodJzEOtpzEYzUNvrZv3x4TJkzA999/b+cnUUsZjUaUl5dj+/btiIuLY/exIx6i5jGZTFizZg3zR25uLn777bdqsakpTuIApMjD0wf1RB5FRUXVOuwlEgmkUinrpHfHgRWgeQaLLBYLIiMjme0JnFyNU3Z2NiIjI6HX6z2Gk6txKi0tZd+PWppTXlkeJu+ajA+TPgSBcHv727Hhzg24MfhGtkqnKeMkrtARebTEoJ7bL9+rqKjApUuX2N8ZGRk4deoUgoODERUVhfnz52Py5MkYPHgwhg4divfeew9arZbtxucqNm7ciI0bN7IXVFFREYKDg1lAQ0NDce3aNbuXtcEioN/S/TWWaYtgPwUOLxiBbUczHP5/29EMPJ0Qi1vf/gXXtCaH59giafFIKCTWLzdio1Aqlaz3V6FQ2NlVe4oPHDiAPXv2YNasWUw4qNVqhISEQCaTITQ0FM899xxkMhmMRiNmz56Nn3/+Gf/3f/+HwYMHIzAwECqVClKpFOHh4TAYDFAoFAgICIBEIkFYWBg4jrMTI0ajESqVClOnToXJZIKPjw9iY2OxcuVK3HrrrdBoNEyoAMDixYuRkJAAi8WC559/Hvfffz+0Wi3rBCkrK2OjlID1y8+VK1eqiSqJRAKZTMbsHj16oLy8HIWFhYiIiADP89i1axf7YqPVahEREYGdO3cysWO7Q6M46+3VV1+FVCpFQkIC1Go180dYWJid6BBjU1OcxNhIpVKYzWYQERQKBRMfcrkcZrMZHMcxuyonmUwGk8kEmUwGqVRazRY7o2xto9HIOqaMRiN8fHyYeBJHTMU42drOcLK1LRaLHScxNoWFhZDL5ejQoQMKCgqgUqkQHBzMZky1a9cOubm5CAoKglqtRnZ2NkJDQ+Hv789esiqVCpmZmYiOjoZSqUR6ejri4uIgkUiQnp6Orl27QhCsyfx69OgBs9mMrKwsdOvWDUajEbm5uYiPj4dOp8PVq1cRGxuLiooKlJSUIDo6GhqNBuXl5ejcuTM0Gg30ej0iIyNRWloKs9mMiIgIu2dETZzy8/MREBBQb04qlQoXLlzwKE71jZPJZEJBQQECAgKg1Wo9glND4mQ0GlFRUdEinCoCK/DvI/9GvjYfHDiMjR2L+9rdhyHRQ6DX61uk7WVlZTVJnBo6+9rdUFRUBJ7nWUegiLCwMDYwBQBjx45FWVkZ/Pz8sG3bNjYY4givvPIK5s+fz/7WaDTo3Lkz6zQVB3VEu6KiAkDlYJLezGPAmwecqn+lhsp0+P9KDXXQKQ11bsldAKoPrIiDPLa27aCeVCrF/v37sWfPHsyZM4ctYwsJCUFkZCSb6fPiiy+yJcc9evTA3r178e233+KWW25BYGAg2rVrx/ST2LkREBAAmUzGOm5tIWqjJ554AgBYp+r69esxdOhQ6HQ6u6UYy5YtQ0JCAogIL7/8Mu69916YzWZWTllZmd3SQFE/VR3UEyHaon4qKSlBWFgYpFIpdu/eXU0//fDDD8x/trrOx8cHOp0Or732GtNP4gx0qVRqx722AbCqceI4zq6t2tqOeFS1bQdEbW1HA5KOOAHWmNjajgb76sOpKg/bgcoOHTqwa4k+4zgOXbp0Ybq1c+fOzI6JiWF2ly5dWIzFZyEAdO3atZotkUjYbEmFQoG4uDjGuUuXLgCsu+OKHfkBAQGsLQQGBrKBBDHGgP2SVNtnhO2zybYdiPdVfTlxHIdu3bp5FCdbHvXhJKZL8fPz8xhOQP3j1L59e7Rv3x4cx7Uop7+u/IUXf30RxYZiKKVKTO87HRO6T4C/j3V35eZoexzHIS4urkniJHZu1QW375Q6fvw4RowYwf4WBc/kyZORmJiIcePGobCwEIsWLcKVK1cwYMAA/PTTT9WEVn0xe/ZszJ49GxqNBoGBgU6JKjNZnC4/xF+J4goTG92rCo3egmtaE0L8lU4JKuvLTGZj1y2qfvzxR/j7+7NOm/Hjx2Pp0qVsFEbsxBDPX758OXbs2IHc3FyYTNaRRV9fX7sZVyJsX9ZiYwccv7hPnjyJ119/HadPn2Y7rgFATk4OevXqxc6/4YYbGA9xBLa4uJiNwAcEBODEiRNM+FWdxSbaIkTbdoaU+HvEiBHYtGkTiAglJSXYtGkT7r//fhw7dgwxMTGs7uPHj7fmtNDrERISgo8++gj9+vUDETF/1FeASCQS1nHTFkSVGBtHD0ye56HT6djf7vpia46XNRHh4sWLiI2NZT5s7ZxciZNcLofFYgHP8x7DydU48TyP4uJiNqunuTiZBTN+0v6EbX9ug0ACQlWhmD1wNu7tci+kXOUXz+Zse4Ig4OLFi+jSpQu7P1pCVHka3DUnZ2NrqPpCHLiy1U+vv/663cwjETzP16ifGooTJ05gyZIlOH36NEpKSph+ys7OttNP/fr1Y7Z471y9erVO/VQXRP1km/fRkX665557mH4SUZt+chXigFlz5oZ1V/A8j0uXLiEuLq7WzuS2AJ7nkZ6ejpiYGKfbtqeC53mkpaUhNjbW64vr7SI+Pr5FctcKJOCjsx/h/dPvQyABnf07Y97gebiz853WbSCaEe7wvHD7p9Tw4cPrfEHNmTMHc+bMaaYa1QyVXIrkpaPsXtK12XKpFGqVzKGoUqtkCA3wwTezKpch1laej6z+DxZROMjlcnTs2BFyuRxExKb02WLlypVYt24d3nvvPfTp0wd+fn547rnn7KaHuwKtVovRo0dj1KhR2L59O0JDQ5GdnY3Ro0dXK9u2w0V8eIgCDLB2iIgPlvqImvPnz0OtVqN9+/bsmJ+fH+Lj41k5N9xwAwIDA/Hhhx9i2bJl7LzVq1dj5MiRCAwMZMtNGgrbpXFtHRKJBFFRUW3+xQlYfREdHd3mfeH1QyVa4v7IKMvAvw//G+eKzwEAEjolYFa/WegV0ssux0Fzw9su6oemzslpO9P86tWraNeuHVtGEBoaWm35nkQigUouxalX74BEwl2flW2CTGYd0LC1DQYjFAo5FDJZnRpq58ybYDSaoFL5XF8eZYaPj9LO5nkeUuIByJ2eaZ6QkIAtW7aA4zh07NgRKpUKJpMJer0eAFjHuUwmw9tvv830U/fu3aFWq/H888/DYDCwWdHiTGjAOvta1ABijo6qM83Fz44ePRojR47E9u3bERwcjMzMTIwZMwYGg8FOQ9nmALFdriZ2oon3j0KhqLakr7aZ5qJ+CgoKYuX7+voiPj4eBoMBcXFx+Oijj+z0k8hj9erVuO222xAaGooOHTrYLW8T/VHfWdlVl+819kxzMTbijHLRNhgMbKa5wWBotpnmtsv3fH190aFDB+Tn50OlUiEoKAhyuRzl5eUICgrC5cuX2SzSzMxMNos0IyODzSJNS0tjs0hTU1NZB35qaiqbRZqWloYePXrAZDKx2b4Gg4HNjLWdwSzOoouOjkZZWRmbGVtaWspmxl67do3NjLV9RhQUFLCZsSKn4OBg5ObmspmxznKKiopCdHQ00tLSEB8f7xGcGhKn6Oho6PV6FBYWegwnV+JUWlrKJlcUFhY2K6cOnTtg4ZGFOJp/FABwW8RtmBA+AbdE32I307y52l5gYCCkUim0Wi0CAwMbNU7OagqveqsBriQ6FwTrji9yjqCUcvBVyCCDAB+ZpJotJR4WXsDUYV0cXn/qsC4wmS3wVcigkkshESptKfHVbPElBzifE0GlUiE+Pt5u1xTbtfaiqAKAw4cPY8yYMXj88cfRs2dPxMTE4OLFi9VyK4iwXWsviiqgei6BCxcuoLi4GK+//joSEhLQvXt35OXlVeMBwI6TeK2G5kTIz8/H559/jjFjxrAyquZEEAWhRCJhglPkER4ejk6dOiEkJKRa/gBbUVXf/AEWizVPWFvIiSDWy9F6Z47jUFRUxBLmuuu69OZYa282m6FUKu0SVLZ2Tq7ESVzqJq599wROrsZJ9IGj91NjcyIivH/4fYzbNQ7nis/BV+qLeQPnYfnNyyEpljQaJ1fjpNFooFQqkZOT40107gSaMyen7UxzceZbhw4d7GYwi0uuAv18EKBSwlchQzt/Ffx9FNXsoABf+Cnl4IXaNZRFEOCnlCNY7QdfhQx+SjmCAnyr2f4+Coczf2vLyRkQEID4+HjExsay2cS2uR5tZ5r/8ccfuO+++/D4449j8ODBiI+Px8WLF+2WAVadaS52rNQ201zUT++88w5uv/129O7dm20KYssDgB0n8VoNzclZXFyMzz//HPfff79dmVXzVFbVTyKP8PBw9O7dGyEhIdVmZdd3prltnMSOoqbIyVk196ZtbKrGqaEzzZ3JyWm7fE+cYRoREYF27dqxpaPiDNTOnTuzFBcxMTFs6VaXLl1YPePi4lgdunbtymazi7NIZTJZvWf7iisbxLx/gHVmrDhjLzg4mM2CtX1GhIWFVeMEWGfGinlGneUkzuLs1q2bx3BqSJyUSiX8/f09ipMrcWrfvj2bPd6cnHTtdHj0x0dxNP8o5BI5ZvSfgbcT3sZNvW9qMCdX4yQuARdnrzd2nJyB28+Uaim4snxPRH2WUM0cbg3WtqMZ0OgtUKtkmDqsC2YNj4Pi+uynplhCVZMYqklUdevWDTt37sTRo0fRrl07rF69GgUFBejVq1eDlu9FRUVBoVDggw8+wNSpU5Gamoq33nqrGg9b/zkrqmyPSSQSEBGKi4utyVTLytiWxoGBgXjnnXcYD3Fk7MqVK2z6+caNG1FRUcE6r5xZ6taQ5XtiLinv8j2e5csB3HMJFdB8y/cuXLjgXb4nl8NkMnmX711fvldYWIj4+Pgm5VRiLMGSA0twMOcgAKBP+z6YM2AObu54MziOc4u2JwgCy7fmXb5nRUvl5Gwu+MilTmmolkZ8fHyN+qkhEPXT+vXrMWPGDJw8eRJvvvlmI9XaHkTENFFV/bRixQq7c41GY636qSkhDpjZ6pm2CnE3LfGLY1uGuDTJu2TN6ovU1FQ2Y6wtQ2wX3bp1a5ble0SE7ee3Y/WJ1eCJR4RfBJ4d+CxGdxkNCSdpsZnmgHs8L9p2a6wHxBvXtjNHIpE4HM1y1gYAhZTD0wmxOL7wHzjx6kgcX/gPPJ0QC6Vcys53pey6bFs4c/5rr72GQYMGYdSoURgxYgQiIiJw//3323GxLbvqtWriERISgsTERHz99dcYNGgQ3n77baxatarGMuriVNs5Go0GHTt2RKdOnXDzzTfjgw8+wOTJk/H333+jY8eOduX89NNPiIiIQMeOHXHTTTfhr7/+wo4dO1h+s6plN3acbDt/Gjv2ddlNxakuu+q9Jf7Ex8fbddjZni/atqOzjmyO46rZ4vVrssW61GQ7qm99bEc8auMklUoRFxcHuVzuMZxciZNUKmWdB57CydU4ifeHKCCagtOR/CN46IeHcDDnIGQSGSb2mogNd27ALZ1uYZ9xh7Yn3h8ymazJ4tTacPz4cQwcOBADBw4EYM3JOXDgQCxatAgAMG7cOKxatQqLFi3CgAEDcOrUqUbJyenKTHNXZ/uCN+Pp26trKOKts3GbYravo933xLo7mmm+YMECDBw4kOmnsLAw3H///Q2eaR4SEoKtW7dix44d6N27N1avXo3ly5dX4yH6T+Thykzzqvppy5YtmDhxIv7++2+0b9+e8eB53qF++uyzz5CQkOCQh6M4uTrTXBAE9lxoCzPN69p9T6VSeXffu77jXlxcnHf3veu778XFxXl337tuixtyNTWnU+dPYd4v87Dy+ErwxOOm8Juw5rY1iDPHQSqRtnjbk0gkUCqVLbr7HkcNySjYBiDOlCopKUG7du3Yi0kikUCn0yEzMxOxsbF2nQjO5pSqipqOO/p/a7Tr4tQaudbFyVVbXDLYEv5oKk6ObL1ej4yMDMTGxtrNthLvM46zLmGUSqXsuPil0dbmeZ59AXVkA/ZiVczjIebAcWQTWZO91mTbPgtcsR3xqI2TbdsQvyS3dk6uxEl86dluVNDaObkaJ/H+EDtlGpOTUTBi9YnV+DLlSwBA54DOmN1/Nu6KuQsyiczt2p7YFsRjjR0nMc9CWVkZm93lRe1oDv0kviu9+qn1ca2Lk1c/1W0bDAa2m6iPj49XP3n1U52cRH+I94gncHI1TmK+NplMZqcfGptT8rVkPH/weeRW5FoH93pMxLS+0xCoDHSbtgegxudFc+kn70ypGtAcI32CIMBgMLjVaEtLjiCJiTs9iZMrcbJYLHbJUj2Bk6s5pQRBwMmTJ1mPvruOtjTHCJLBYEBqaiouXrzoMZxciZNOp8Px48fZi84TOLkaJ0EQkJSUhCtXrjQqp31J+zDuh3GsQ2p01GhsHrkZceY4QIBbtr3S0lKkpqYiOzvbm1OqDUF8D3lh/w5vq7DVJm0dgiDg0qVLTGO1Zdg+39s6vL6oRFPfI0SEr1K+wsQfJyK3IhchqhC8fvPrmD1gNgKVgU1yTVfhFs8L8qJWlJWVEQAqKSkhIiKe54nneSIi0mq1dO7cOdLr9SQIAgmCQERUL9v2p6bjrpbtbnZ9OLtDfRuDk6s2z/Mt5o/mjIdOp2P3kO29JdqCIJDJZLI7Ln7W1rZYLLXagiBUs8W61GSL16zJdlTf+tiOeNTGied5slgsZDabPYaTK3HieZ6MRiM7xxM4uRon8f6w9U1DOJktZvrozEc04JMB1CexD932xW302bnPSGfSNRunhtgWi8UuBo0ZJ1ELlJWVkRe1Y8OGDdSzZ0/q1q0bAaCUlBQiIiooKKCCggIiIsrKyqKkpCTS6/VkNBrJbDYTEdnZBoOBxcHWFt8XgiAwm8j6PhGP63Q61r50Omv75Xme9Hp9NdtisZDBYKhmm81mMhqN1WyTyWRnm0wmVndb2xVOVW1nOYnt1JM4NSRO4rPRkzg5ipNGo6Hk5GTKysqiwsJCIiLKycmh4uJiEgSBMjMz6dq1a0RElJmZyZ5faWlpVF5eTkREqamprJ4pKSmsDufPn2fvl/Pnz5PFYiGTyUTnz59nfhHvbZ1OR6mpqUREVF5eTmlpaURk/Q6VmZlJREQlJSWUnZ1NRETFxcWUk5NDRESFhYWUl5dHRPbPiLy8vGqciIiys7PZdzJnOen1erJYLJScnOwxnBoSJ4vFQhqNxqM4uRKnq1evUk5ODgmC0OicKkwVNOOHGdQnsQ/1SexDj+18jP7O+9tt254gCJSenk6lpaWNHidn9ZN3+V4dEKefO5pyJo4E22alrw/IZpqx7VTjtgivLyrRlnxR1z1EZM0tYZsnpq3C6wsrvH6oRGP6Ir8iH/8+/G8cLzgOABgaPhRzB87FgNABjVDTpkdTt4vatIAXjuFdvte8y/cc+cKd7bo4eZfvNXz5nslkYpv9CG66hMoV25Xle+Jv7/I96w7jtrlaWzsnV+PEX8+xp1Ao2L3VGJzSytLw/K/PI1OTCQknwfge4zG9z3QEqYLctu0BqPF50dA4eZfvNTLEAAqCYGeLjVhsHPWxgcrlU1XPcfTj6nXcxa6Lk+3SMHeob2NwctW29YWncKrLrnpviT+XLl1iSxJt7zlbW3zJ1mQTUTVbvH5NtliXmmxH9a2P7YhHbZx4nkdaWhrbmdETOLkSJ/76zjFiuZ7AydU4ifeHuJTXVU6703fjwe8fxPGC4/CR+uDpvk9jdcJqDAgd0GruJ/H+sFgsTRYnL1yDKFQlksbbKEa0bZdqiccd/TT0Oi1tO8PJkS/c2W6KONn6wVM4OWNXvbfEL5UZGRnsWWd7z9nabWGjGCJCWlqaXVxaOydX48RxHNLS0kBEHsPJ1TgB1qX9YodKY3DalbELE36cgExNJoJ9grH45sWYP3g+gn2D3brt1fa8aK6NYrydUjWguXaPUalUMJlMrBG01ZxSJpMJKpXKozi5Giexh5njOI/hVFucxHo5yhcjlUrh7++PiooKAO6Z1wdonlxFPM+jR48eSE9P9xhOrsTJbDZDoVBAKpV6DCdX4ySVShESEmL3TqoPp/Pp5/H8gefx8m8vo8JcgTh1HN66/S2MUo+CghQtwsnVOFVUVKBHjx7Iy8vz5pRyMzTFoB6RdTaM7Qxb8bijn4Zcxx3sujjV5At3tpsiTgDg4+MDjuOatO7NyckZ21GHvVQqRbdu3exmL9ieL9ptYVBPIpGgR48edn5r7ZxcjRMA9OjRw27GTGvn5GqcOI5Dt27d2EYxDeGkM+uw6MgivHrkVRh4A/p16IdVt63CA/EPQC6Ru/39VNvzotkG9ciLWtHUOaXENehVjzv6qW/Z7mbXxakmX7iz3VRxsvWFp3ByZDuTU0rM1SAeFz9ra7eVnFIGg8GbU+p6ng7b50Zr5+RqnMT7w5WcUn/m/0kjvxpJfRL7UL//9KPFRxZTfnl+i3NqiC3mfmmKOHlzSjmP5swpZft+aOs5pcxms0dxcjVOBoOBBMGbU0oQBEpLS/PmlLqeU8pgMHhzSl3nZDAYvDmlyJpTKjs7mwShYTmlDiUdorHfjKU+iX2ob2JfWnxoMV3VXm1V95MgCJSamurNKeXOaOqcUkajEUql0m7qcVuE1xeVaEu+qOse4q8vyYmLi6vXFFBPhNcXVnj9UAlXfGHmzdhwagO2nd0GAiHMNwxzBs7BP7v8E3KpvIlr3HRo6nbhzSlVfzRHTimDwWA3M6Ym1Ldsd7Pr4gRYZz4rFAqWb8Rd6u4qJ1ds4fpsbbFNeQKn2uzackoRES5duoS4uDjIZDIIgnvm9XHFdsSjNk5EhPT0dMTExEAul3sEJ1fjZDab2bNXXMbV2jm5Giez2Yz09HTEx8fbLcWrD6c9mXuw+Ohi6Cw6qBVqzB0wFw90fQBKmbJV3U+CINT4vGhonJzNKeXtlKoDTdkp5YUXbR3ee8gLL5oP6aXpePm3l3H+2nkAwIjOIzB7wGx0D+7ewjVzf3g7peoPr37ywoumhfc+8sKLloGJN2HlXyvxfyn/BwDoGdwT82+Yj5s63tTCNXM/OKufZM1Yp1YNsVexau+i2Kfn6mgHUeUuIW19pK8mX7izXRcnV23bHmdP4VSTLf7tqBef4zjodDqoVKpaR15aerSlOUaQOI6D0WiEXC5v07vHCIIAvV4PX19fAPAITq7GSbw/fHx8mG8c8eB5Hl9e/BKrT6yGkTfCX+6Pp/o9hX91/Rf8FH6sXu7AqSG27UyRxo6TF+4Hsf2IMW7L8PrCCq8fKkFEdjMJ2zK8vqiE1xeVcNUXOeU5eOHXF3Cu+BwAYGzcWMwdOBdhfmFNVdUmhzu0C2+i8xrQHInOBcE6zdgdkk1XTaD93XffIT4+HjKZDPPmzXOKk8FgwFNPPYXg4GBIJBL8/fffICI88cQTaN++PSQSCY4dO4YRI0Zg3rx51TiJZbX1ROcWi4WV4ymcaouTWC9HSYwFQcD58+dZQmN3TDYNNE8CbYPBgNzcXFy8eNFjOLkSJ51Oh6SkJDYl2BM4uRoncbr1lStXauRUpC/C9P9Nx4o/V8DIG9FL3QsrhqzAlN5TUHyl2O04uRqn0tJS5ObmIjs725vo3M1gO6hna9sOSLlqi3G0Pe7op6HXqY8t6iepVIp58+Y59VlBEDB9+nQEB1t3aBL1U9Vjw4cPx7PPPlujL5qba0PspoqT2CY8iZMz7afqfSYIAi5fvsw0oe09Z2uLy9tqsoncMzFzfTjxPI/c3Nw2v3sxkXX5Xm5uLnie9xhOrsbJYrEgJyfH7p6pi9OB7AN4ZNcjOFd8Dv5yfywYsgALb1yIUN9Qt+Dkapxqe140BienQF7UiqZOdF6T7einscomIpo8eTIBIAAkl8spLi6OlixZQiaTiQRBoNDQUHrppZcoJyeHNBqNU2Xu3r2b5HI5HTlyhPLy8shkMtGPP/5IcrmcDh8+zI4VFRVRWVlZo3Latm0b4yORSKhdu3Y0dOhQWrJkCUvg5myZBw4cYDFv6Ti1hN2cnOpKdC7a4vk12a0xMbOXk5dTU3Pan7mfbvu/26hPYh8a+MlAWvnXSiqsKGzVnFoqTt5E586juRKd12QLQtMmm544caJD/aTVaslkMlFoaCi98MILlJWVRRqNxilO3333HdNPGRkZZDQamX767bffKC8vjzQaDRUVFVFpaWmjcnKkn4YMGUJLliyhq1ev1isp+J49e5h+crek4G0t0TlR60g27YkJtL2cPI+TiTfR4gOLqU9iH+qT2IfG7BhDP6f8TIIgtFpOzRUnZ/WTt1OqDtTmSL1eT8nJyezlUl8wEWysILIYiSquWn8btQ2tdp2YPHkyjR49mvLz8ykzM5Pef/994jiOli9fTuXl5QSADhw4UK8y169fT1FRUXUecwTbLwSuYNu2baRWqyk/P5/y8vIoOTmZPvroI4qLi6OYmBjKzc11uqxffvnFriOyudFQX7Qm1HUPCYJA5eXlbcIXdcHrCyu8fqhETb7QmrS05OgSJp7u2XkP/S/jf2ThLS1U06ZHU7cLb6dU/dHUg3pVNZRQcZUEi5EEY4XdOY0xgGJr2+qnjIwM2rhxI3EcR8uWLSONRkMAaP/+/fUqc926dUwricdF/VSVS62+cIGTqJ/y8vIoLy+Pzp07Rx9++CHTT+KXHWfKdIdBPdvO5caOfUtxqsnW6XSUnJxMWq22Woe9IAhUVlZWZ+d9WxiE4HmeysvL2/zuxYJg3aWzvLzc7vqtnZOrcRIHnMT/18QjT5NHE3+cyDTVi7++SFmlWW7JydU41fa8aK5BPe/yvRaGRDADR9YCK7sCK+Otv4+8B1gMTX5tpVKJ8PBwREdHY+bMmRg5ciS+//57BAQEAADuuOMOcByHgwcPori4GI899hgiIyPh6+uLvn374osvvmBlTZkyBXPnzkV2djY4jkNMTIzDYwAwfPhwzJs3j332008/xZAhQ9CuXTtERERg/PjxbLkkABw8eBAcx2H//v0YPHgwfH19MWzYMKSkpNjx4TgO4eHhiIiIQM+ePfHEE0/g6NGjqKiowEsvvcTOEwQBK1asQJcuXaBSqdC/f398/fXXAKzLPUaMGAEACAoKAsdxmDJlSmO63SlYri/Na+sgIly9epVNFW3L8PrCCq8fKkFEKCkpsfPFuaJzGLdrHHZc3AEAuDf2XmwauQmjY0ZDKvHc3Qq97cJ9IebpEnd6Em3bHJKu2rYailsZD25lV3BH1oLjjey8xrhO1RxFon6KiYnBrFmzMHLkSPzwww8sieudd94JiUSCgwcP4tq1axg/fjwiIyPh5+eHfv364YsvvmBlTpkyBc888wzTSl26dMHUqVOZfpJIJOjSpQs4jsOIESPw3HPPsbps374dQ4YMgVqtRmRkJCZMmICrV6+ysg8ePAiJRIIDBw5g8ODB8PPzwy233IKUlJRq/CIiIhAREYFevXrhySefZPppwYIF7BwiwooVKxAbGwtfX1/0798fO3fuBMdxyMzMxB133AHAqp8kEgmmTp1aoy8d/TRGbET91BSxr8tuCk5O3QdV7i0xZ5+49Fk8bnu+aEul0lptjuOq2eL1a7LFutRkO6pvfWxHPGrjBFjTsIjneAInV+MkkUjYdyxP4eRqnDiOQ1FREYioRh5/5P+BcbvH4e+rf0MlU+G5Qc9hybAliAqMcktOrsaptudFY3ByBt5E540JIsCsc/p0jgTg6Hrg17crDxpKK/8eNhfgnOw3lPsCNi9lV6BSqVBYWIiUlBR0794dO3fuxLBhwxAcHIzCwkLccMMNWLBgAdRqNXbv3o2JEyciLi4OQ4cOxdq1axEXF4cPPvgAf/31F6RSKRQKRbVjjmA2m/HGG2+ge/fuuHr1KubPn48pU6bgxx9/tDtv4cKFePfddxESEoIZM2Zg2rRpOHLkSK2cQkNDMWHCBGzduhU8z0MqlWLFihXYvn07Nm/ejK5du+LQoUN4/PHHERISgltvvRU7d+7EQw89hJSUFKjVaqhUqgb5tb7gOM5uO+O2DIlEgtjY2JauhlvA6wsrvH6wQm/WQyaRwa+DH3jiYTAbsCt9F1YcWwELWRDsE4xZA2bh/vj7oZR6/vPE2y48AK1YQ3n1k1c/uRu8z8RKeH1RCa8vKlGbL3iBx6bTm/DBmQ9AIMSoYzDvhnkY0XkEJM6+V1oR3KFdeDulGhNmHbC8o3Pn+rYH5iUBx7Y4/v+xLcAtzwLv9QV0xXWX9+884PouSvUFEWH//v3Ys2cP5s6di9BQa7K24OBghIeHAwAiIyPxwgsvsM/MnTsXe/bswVdffYWhQ4ciMDAQAQEBkEql7DMAHB6rimnTprEka126dMG6deswZMgQVFRUwN/fn523bNkyJCQkAABefvll/POf/2Q7BdSGHj16oLy8HMXFxQgMDMTy5cuxb98+3HzzzQCA2NhYHD58GFu2bEFCQgKCg4MBWAVZu3bt6uHJxoHoC9te6rYKIkJ5eTkCAgK8vvD6AoDXDwBg5I3YenYrPr/wOTQmDdQKNR7r8RjG9xyP7ee3I8w3DHMHzkW/kH4tXdVmg7ddeABaoYZyB/0k1iM6Ohpr167F0KFDvfrJq5+8z0QbeH1RCa8vKlGTL4r0RXj50Ms4duUYAGBk1EjMGzQP0YHRLVXVJoc7tAtvp5STEGyy1AOV21CLSwWICCCC02H0DwO0RdZRPUcwlAK6Iut5Tggqdv3rU/AA1GoDwK5du+Dv7w+z2QxBEDB+/HgsXryY7YxGVLm1rsViwfLly7Fjxw7k5uayXQN9fX3ZObbLJqouoXD0t/i548eP4/XXX8fp06fZjmsAkJWVhV69erHP9O3bl31WFGkFBQWIioqyK7cqV7E8juOQmpoKnU6Hf/zjH3b1MZlMGDhwYLW61uVLR3A2BrXFxmKxQKFQNKgcV+2m4FSbLf5d9d4SUVxcDD8/P7blvTg91NbmW+EW9o541MYJAEpKSqBSqSCTyTyCkytxEgQBxcXF7AuXJ3CqT5zEDqnNZzaze0Rj0mDLGeuX81W3r0KEXwT85H7suu7OqTHiJC5l9PX1ZdPIG5OTF67DKf0EOK+fgCbRUBzqfue7o35asmQJTp8+jZKSEq9+QtvVT1Wf94BXP3n1U3UeFosFJSUl8PPzA8dxHsHJ1TjxPI9r167B39+f3Usnrp7AS4deQpG+CEqpEk/2fhKP93oc/kr/VsHJ1TgRUY3Pi+bST543/6yRsHHjRvTq1QtDhgwBALb+1nZ76qKiIuZss9kMXqIE/p0H0wuZsLyUDfw7D8bnM8AvuFzNNkzcDQqIAHzaOa6ATzuQfwToib0QXs6B/rk04N95EF7OgWF+enVb6sO2wRUEgdk8zzORZGsLgoCEhAScOnUKycnJ0Gg0+M9//gOFQsHW41ssFvYwf/vtt7Fu3TosWLAAe/bswYkTJzBq1CgYDAbmA9s8SEaj0U5wira4Jbdoa7VajB49Gv7+/vj8889x7NgxfPnll+z/Vbd7FnmI9TKbzYyT+LdYF7E+586dg1qtRvv27dkW4rt378aff/6J48eP49SpUzh16hS7rm15tjxsbYPBUI0TEdnZRqOxmm0bm9riJD4ILBaLQ05ms9nOtvWHaJtMJhYbW7ulONnysLXFejna7l0ikUAmk7Et3i9fvuwxW9iXlZXVi5PFYkF0dDSzPYGTK3EymUzsRegpnJyNU35+PmQSGT6/8Dkc4YsLXyAmMAYByoBWw6mx4lReXo7o6GhmNwUnL5yDS/qJ5wG5r3P6aX46hGl7AXUdGiogAsK0vXXqJ37BZZio8otqa9NPfn5++Oyzz7z6CW1PP4k8ioqKvPrJq5+c4pSVlYXo6Gjo9XqP4eRqnMrKyuDn5weJRIKrhVex7tg6PPnzkyjSF6Gjb0csv3U57g25FyatqdVwcjVOEomE6eqm4OQUyIta0aS7xxgrSDiwjGixutqPcGBZtR1k6lV2HfbkyZNp7NixDs+5du0a231PPH7vvffS1KlT2TkWi4W6du1KY8eOZeesXr2aoqOj7cpcs2YNRUdH2/FISEigZ555hgRBoOPHjxMAysrKYrtifPLJJwSATp48SYIg0C/Xd8O7du0aK/vkyZMEgNLT00kQrLvHBAYGVuNaUFBA7du3p0mTJrF4KpVK+uSTT2r0zeHDhwkAFRUV1elLRz+NESfbHUIaO/YtxcmRrdPp2D3kaGcIQRCouLjYu3vM9d1jSkpK2vzuMTzPU3FxMTvHEzjVJ07FumK2A4yjn2J9cavj1BhxEu8P2/o2Jifv7nv1R5PvvlcPDVXfsmuz3VE/CYJVN3j1U9vRT4JQ9+57Xv3k1U9VbbPZTCUlJXbXb+2cXImTzqQjk8VERboiMlqMdOLKCRrz7Rjqk9iHZv48ky4WXWx1nBoSp9qeF82ln7zL95yEOCVN/C3a4nRh8Xd9bJL7ArfOBwHgjm2xTjf3aQfc+DS42+YDsupr/V25jiO7tjJtOYl2165d8fXXX+Po0aMICgrC6tWrUVBQgF69etXpg5r+5jgOUVFRUCgUWL9+PZ544gmkpKTgzTffrHZ92zJqqiMRoaCgAESE0tJS/P7771i+fDkCAwPx1ltvAQDUajVeeOEFPPfccxAEAbfeeivKyspw5MgRqNVqTJ48GTExMeA4Drt27cI999wDlUoFf39/p3xZl9+djY1wfepjY8W7Ie2jqa8p/l313gKsftBqtSw3haNzgMrdVeprc1zNu13U1d5qqktj2VXrKwgCysvLoVarWR1aOydnbVseAFibqPoMbq2cnI2TgTfAV+4LtUINjUmDqlAr1AiQB7QqTo0VJ0f3R1O0PS/qj6bQTwDqraE8VT9t2LABTz/9NE6dOuXVT2i7+qnqfebVT5W2Vz/Z7+Qm+kIsv7Vzqm+casrLmTg6ET+m/4ixcWMRoHRNS7XW+6m250Vz6Sfv8r0WBMdx4OQ+4G6ZB7yYCryYZv19y7MOO6RaEq+++ioGDRqEUaNGYfjw4QgPD8f999/f4HJDQkKQmJiIr7/+GgMGDMDbb7+NVatWuVSWRqNBREQEIiMjcfPNN2PLli2YPHky/v77b0RERLDz3njjDbz22mtYsWIFevbsidGjR2P37t3o0qULAGtS0iVLluDll19GWFgY5syZ02Ce9QHHcVAoFHWKnLYAiUSCzp072z0c2yq8vrCirfrhXPE5jNs1Dr/n/Y7Hejzm8JwJPSbAIlgc/s/T0VbbRVtGa9FQTa2fduzYgd69e+Pdd9/16ievfmLwPhMr4fVFJdq6L/RmPT468xE2n9nMBvfEvJxfnP8CD3Z9kHVItSW4Q7vgiGrJzucFNBoNAgMDUVZWBrVabfc/cc1nly5d6tzBxBGIiG2z29ZfoF5fVKIt+aKue0gQBJSWlrJZMW0ZXl9Y0db8YBEs+DjpY2w+vRkWsmBAyABsGrkJ/zn3H7tRvgk9JuCJfk9AKW2b26E3dbuoTQt44RhNqZ+AtvWurAteX1jR1vxQ233U1t6VtcHri0q0dV+YeTOGfzW8xtnmBx85CLlU3gI1a1k0ZbtwVj95l++1MMRpxl54fWELry8qodfrW2RraXeE1xdWtBU/XNZcxiuHX8HpwtMAgBsjbsScgXPgr/DHtD7T8FS/p1inlEWwtNkOKRFtpV14UQnvu7ISXl9Y4fVDJbzPxEp4fVGJtuyLUmOpww4pwDpjqtxcjmBpcDPXyj3Q0u2i7XWRuhG804wr4fVFJby+qIREIkFkZGSbHM2pCq8vrGgLfiAifH3xazz0w0M4XXgaKpkKswfMxpqENRgQMgAAoJKrIJfK0V7VHnKpHCq5qmUr3cJoC+2itUK4vnOZIAh2NjnYYa4+NsdxkMsrR7TF445+GnIdd7Dr4lSTL9zZboo4AYBcLgfHcR7DyRm76r0lXN+ePSIigmlJ23vO1uZ5vlabiKrZ4vVrssW61GQ7qm99bEc8auPEcRwiIyPt4tLaObkaJyJCZGQkOI7zGE7OxMlkMeHjpI/hJ/eDWuF4to6Yl7O1cGrMONX2vGgMTs7Aq95aEEQEs9ls9zJtq/D6ohJeX1RCEAS7rcPbMry+sMLT/VCkL8IzB57Bkt+XQG/Ro1f7Xng34V083e/pankOPN0X9YHXF+6DjRs3olevXhgyZAgA4OrVqwDst6e2jZXZbGbC1dY2mUzsHFvbaDQy8avX69m70mAw2NmA9X1qaxuNxmq2IAhsi2tbm+d5mM3marbFYrGzLRYLq7ut7QqnqraznETd4EmcXImTxWJh5XsKJ2fiVFRUVG27d0EQcOHCBZSUlADwvC3s68PJYDCgqKgIFy9e9BhOrsYpPT0dRUVFqKio8BhOdcXp4pWLmLRrEt47+R6O5R+rMS/n+B7jYREsrYJTY8dJEAQkJydDo9E0CSdn4M0pVQfEdZAlJSVo164dezFJJBLodDpkZmYiNjYWSqV12YQ4OuOsbTabIZPJWBb92sJR37Ldza6NkyggxJE+d6hvQzk1xDabzXajnp7AyZGt1+uRkZGB2NhYKBQKAJU7aYnIz89HeHg420FFvFdsbZ7n2W5OjmwAbORQtKVSKRtpcGSLIwc12bbPAldsRzxq4wRYv9x16NABMpnMIzi5Eiee53HlyhU2ouMJnET7UO4hLD66GCXGEsgkMozrPg7Tek9DqF+oQ04AcOXKFYSGhkImk7klp+Zqe0SEq1evIiQkhOWTaUxOWq3Wm1Oqnmhq/QSAvSvbsn6y9YVMJmP3lrvU3aufmu6aBoMBmZmZiI6Oho+Pj1c/efVTnZwsFguKiooQGhoKjuM8glNtcfrl8i9YdHQRNCYNVDIVnh/0PMZ2HYutSVvx2YXP7PNy9n0CSpnS7Tk1RZyIqMbnRXPpJ+9MqRrQXCN9CoUCJpOJvWhaerSlpUaQTCYTFAqFR3FqSJwAq+jwJE41xUmsl6NefPGBKY5GeNrIRH04WSwWREREMNsTOLkSJ5PJBL1eD4lE4jGcisuL8cLPL+CZX55BibEEkapILL91OZ7u/jT0RfoaOUkkEigUChQWFrodp+Zue+Xl5YiIiGB2U3DywjWIQlUisd+2nuNq3+a6Lpvj7Je62x6v+tOQ67iDXRcn0Reif1u6vo3ByVVbbBOexKkuu+q9Jf5ERkay/Fq295ytbZsU3pHNcVw1W7x+TbZtO3RkO6pvfWxHPGrjJJVKERERwTqwPYGTq3GSy+WIiIiAVCr1GE6O4mTkjVj+53LMOzgPGpMGsYGxWHHbCvyrx7/gI/PB1D5TcfCRg/h13K84+MhBTO0zFUqZ0q05NWWcanteNAYnZ+CdKVUHmnqkz2Kx2AWyrY70EVnXnYojGO5Q34ZyaohtsViYLzyFkyPbmZlStrMfPG1koiqPukb6iouLERQU1KZH+nieR2FhIRvla+2ckoqT8MpvryCnIgccOPwz9p94uu/TiGkXUycnACgsLET79u29M6WIUFxcjODgYO9MKTdBc+y+J74rRZHcVuH1hRVtzQ917b5XVFSEDh06sOdaW4XXF5VoC75IK03Di4deRGqJdXBpTOwYzBowC50COtmdJwgCSkpKEBQU5LG+cBZN2S68u+81Mmx7FG2PiS8925efs7btl3NH5TiCK9dxJ9sRqv6/IT5tCdsRGqs8T+FUmy3+XfXeAiq/JNZ2DgC7nvj62BxX88iEbTt0ZNdUl8ayq9ZX/BJedZSiNXNy1q7Kw3akqLVysggWbDq9CR+f/RgCCeig6oBZA2ZhbNxYKKQKpziJnS41vZ+am1NLtj3bTipHZTYGJy+88MILL7zwwj1BRPgm9Ru89edbMPAGqBVqzB4wGw91e6jG3Ynrk4jbi6aFt1OqBcFx9rultGV4fVEJry8qIZFIEBoa2tLVcAt4fWGFJ/ghrTQNr/z2Cs5fOw8AuL3T7Zg9YDZ6te9Vr3I8wReNBa8v2h6878pKeH1hhdcPlfA+Eyvh9UUlPNUXGpMGS39fij2ZewAAfTv0xbODnsXQ8KE1Drp7qi9cgTv4om3PVWthiLmUvCsovb6whdcXlRAEAfn5+XbLldoqvL6wojX7QSABn53/DON2jcP5a+fhL/fHvEHzsPL2lfXukAJaty8aG15ftD1435WV8PrCCq8fKuF9JlbC64tKeKIvTheexiM/PII9mXsg5aQY32M81t+xHjdG3FjrKhBP9IWrcAdfeDulWhjuuub9u+++Q3x8PKRSKebNm+fUZ4gITz31FIKDg8FxHE6dOuXw2PDhwx2W6Y6+SExMRLt27Zr9uvXxxeuvv44BAwbUes6UKVNw//33N6xSLQTvqGclvL6wojX64Yr2Cp7e+zTe+vMtGHkj+of0x5rhazCtzzT4yn1dLrc1+qKp4PVF24M76oaW0E+A+/nCq59aHt5nYiW8vqiEp/hCIAEfJX2Eyf+bjNyKXISqQvH6sNfxwpAX0F7V3qkyPMUXjYGW9oW3U6oFIU4zbgkhMWXKFJbPQ6FQID4+HkuXLmU7uj399NN4+OGHcfnyZbzxxhtOlfnTTz8hMTERu3btQn5+Pvr06ePw2DfffFOtzIb6IjExkfGRSCTo1KkTpk6dynZNbE5wHIfvvvvO7lhNwicmJobV29fXF3379sXHH39cL1+88MIL2L9/fyPU3P0gkUg8OhljfeD1hRWt0Q8/ZfyEB79/EH/k/wGFRIFpfaZhwx0bcFPHmxr0/G+NvmgqeH3R9tBSGsrd9BPQMF949ZNXP3k6vL6ohKf4olBXiKf2PoW1J9eCJx43R9yM9Xeux/3x90Muca5zxVN80RhwB194c0q1IIgIZrMZPMdDJpGh3FSOAEUALIIFKrmqya8/evRobNu2DUajET/++CNmz54NuVyOuXPn4urVqxg1ahQ6duzodHlpaWmIiIjAsGHDaj0WHBxc7bOiLxoiMNVqNVJSUiAIAk6fPo2pU6ciLy8Pe/bscak8s9ns0ufqi6VLl2L69OnQ6XTYsWMHpk+fjtDQUIwZM8YpX/j7+8Pf378Zatr8EKeTRkREtPmXhtcXVrQmP5QZy7D82HL8mPEjACAuMA6zB87GHZ3vgFTS8OTZrckXTQ2vL9oeWlJDuZN+Ahquobz6yfPgfSZWwuuLSniCL37L+Q0LjyxEiaEESqkSU3pPwaRek6BW1m9nXE/wRWPArNVBqpCD12ggVavBm8yQ+7k+g99VtN0IuAlIQth6diuGfzUcCV8lYPhXw7Ht7DYYeWOTX1upVCI8PBzR0dGYOXMmRo4cie+//x4BAQEAgDvuuAMcx+HgwYMoLi7GY489hsjISDYi9cUXX7CypkyZgrlz5yI7OxscxyEmJsbhMQDVpp9/+umnGDJkCNq3b4+IiAiMHz/eboTu4MGD4DgO+/fvx+DBg+Hr64thw4YhJSXFjg/HcQgPD0fHjh1x991345lnnsG+ffug1+vx008/4dZbb0W7du3Qvn173HvvvUhLS2OfzczMBMdx+PLLL5GQkAAfHx989tlnDv323//+F4MGDYKPjw9iY2OxZMkSNkIqcnzggQcY58TERCxZsgSnT59mo3qJiYmsvICAAISHhyM2NhYLFixAcHAwDhw4wP5fWlqKJ598EiEhIVCr1bjjjjtw+vRp9v+qo4g8z2P+/PmM60svvdSq8yuoVE3fQdta4PWFFa3BD3/k/4GHvn8IP2b8CAknwUNdH8KmkZvwj+h/NEqHlIjW4IvmgtcX7gkxR4UgCHa2+F4iItftWjSUeF6jXMfGBir1U1RUFGbMmFGrfioqKnKon8QyndVPRIThw4fj2WefZXX55JNPMHjwYKjVakRFRTH9JJYt6qd9+/ZV00+2nDiOQ1hYGDp27IjRo0dj7ty52LdvH3Q6Hf73v/9V00+XLl1in83IyHCon2z9JV6rqn56/fXXYTabQUQO9dO2bdsc6iex7ICAAISFhaFLly7V9BMRoaSkpJp+EpdGAsDixYuZfiIiWCyWWvVTXe3D0U9jtr2a7Kr3lmgrlUq7cxzZPM/XahNRNVu8fk22eP2a7Jrq66ztCieVSuVxnFyNk0qlapWcDCYDVv61ErP2z0KJoQRRAVFYdssyPNXnKaiVapc4KZVKt41TbTwaLU5GI0o+/hipt9yKS7fcitRbbkXJxx9DMBoblZMz8HZKNSKICDqzzukfrVmLj5I+wuYzm6ExaQBYdw/YdGYTPjrzESpMFU6XZfvSdBUqlQoGg4F19uzcuRP5+fkYNmwYDAYDbrjhBuzevRtnz57FU089hYkTJ+LPP/8EAKxduxZLly5Fp06dkJ+fj7/++svhMUcwm8144403cPr0aXz33XfIzMzElClTqp23cOFCvPvuuzh+/DhkMhmmTZtWJx9BEGCxWKDVajF//nwcP34c+/fvh0QiwQMPPFAtodvLL7+MZ599FufPn8eoUaOqlfnbb79h0qRJePbZZ5GcnIwtW7YgMTERy5YtAwDGcdu2bYzzuHHj8Pzzz6N3797Iz89Hfn4+xo0bV61sQRCwc+dOlJSUwMfHh43y/etf/8LVq1fxv//9DydOnMCgQYNw55134tq1aw55v/vuu0hMTMTWrVtx+PBhXLt2Dd9++22tvnJXSCQSBAcHt+kRDBFeX1jh7n4w8ka889c7mP7zdBToChDuG44lw5Zg4Y0LEeEf0ajXcndfNCe8vnAfbNy4Eb169cKQIUMAgA0yFRUVoaioiNni+9dsNjNBq9FrUGG0ap8yXRm0Jm01u1RbCq1JW6eG0pq10Jq0KKkosWoukxal2lKHttFoHQgUBAEmkwmAVXCLM35sbVtBb7FYYLFYoFKpoNfrcfbsWQDAl19+icuXL2PYsGEoLy/HwIEDsXv3bpw4cQJPPvkkJk6ciCNHjkAQBKxduxaLFi1iWum3337DmjVrsHTpUkRGRiI3Nxd//vknDAYD87Fom0wmvPbaazh9+jS++eYbZGRkYMqUKXY8gEr99Mcff0AqlWLatGl2nMQ4iJyUSiUEQYBer4dGo8H8+fNx9OhR7Nmzh+kn8XzxOi+//DJmzZqFs2fPYtSoUWywDgCMRiMOHTqESZMmYebMmTh79iw2b97M9BMR4dChQwCAjz/+GBkZGfjrr7/wyCOP4Nlnn0Xv3r2Rk5ODzMxMjBs3rtqXQKPRyPSTOFvMYrHg4YcfxtWrV/HDDz/gjz/+wKBBgzBy5EjWJm3LMZvNWLVqFRITE7Flyxb8+uuvTD+J5xhtvqjZ2gaDwc4GrN8JbG2xjdnatnFypu1ZLBY7W/RxUVER04T5+fkoLS2FRCKBXq9HeXk5AODy5cvMzszMhFarBWDtVBTrmZaWxuqQmpoKi8UCQRCQmprK9HRqaiqLuzi4azAYkJGRAQDQarXIzMwEAJSXl+Py5csAgLKyMuTm5gKwDrbm5+cDAK5du4aCggLGQ3xGFBQUVOMEALm5uSgrK6sXJ4vFguDgYGZ7AidX45SVlYXg4GDo9fpWxSm9JB3jvh+HT5I/AQAktE/A+3e+j9vDb0d2VrZLcSotLYXZbIZEInG7ODVH2zNrdSja8gGK338fgsb6DhU0GhS//z6KtnwAs1bXaJycArUBrF69mnr16kU9e/akuXPnkiAITn+2rKyMAFBZWVm1/+n1ekpOTia9Xk9ERFqTlvok9nHq57YvbiOtSUvDPh/m8P/DPh9GWpOWbvviNqfK05q09fLJ5MmTaezYsUREJAgC7d27l5RKJb3wwgtUUlJCAOiXX36ptYx//vOf9Pzzz7O/16xZQ9HR0XbnODqWkJBAzz77rN0xQRDIaDSSIAj0119/EQAqLy8nIqJffvmFANC+ffvY+bt37yYAzPfbtm2jwMBA9v+LFy9St27daPDgwQ7rXlhYSAAoKSmJiIgyMjIIAL333nt251Ut984776Tly5fbnfPpp59SREQE+xsAffvtt3bnLF68mPr371+tHtHR0aRQKMjPz49kMhkBoODgYDp37hwJgkC//fYbqdVqMhgMdp+Li4ujLVu2OCw7IiKC3nnnHfa32WymTp06sXi7E6reQ1XB8zxlZ2cTz/PNXDP3g9cXVrizH84Xn6f7v7ufPZfn/TKPUq+lNtn13NkXzY2m9kVtWsALxxB9VlJSQkTWGInx0Wq1dO7cOdLr9SQIAgmC0KIaqsJYQUTE6lKbbaufeJ6nn3/+mZRKJT3//PN07do1AkAHDhyotZx//vOfNH/+fHZ89erVTCuJ54j6SfxbEARKSEigZ555plp5giCQwWCgY8eOEQDSaDQkCALTT3v37mXn79q1iwCQTqcjQRCYzhHLTElJYfrJUd1F/XTmzBkiIkpPT2f6yfb8rVu3Mv0kCALTT7Z1/uSTTygiIoL9DYC++eYbu2suWrSI+vfvX60udemnQ4cOMf1k+9m4uDjavHkzERErWyxT1E/i+VX1U13tw9GPs+3KFVun01FycjJptVp2b4n3Gc/zlJmZSRaLhR0XP2trWyyWWm1BEKrZ4vVrssW61GTbPgtcsR3xqI2TxWKh7OxsMplMHsPJ1TiZTCbKzs4mi8XSajh9f+l7Grp9KPVJ7EM3fXYTbUvaRhWGyme2q3Eym82UlZVld8+4S5yao+3xRiNdGDKUkrv3qPZzYchQ4k2mRuHkrH7y+JxShYWF2LBhA86dOwe5XI7bb78df/zxB26++eYWrVcHVQdcM1xjo3tVoTFpUGIsQQdVB5QYS5qkDrt27YK/vz/MZjMEQcD48ePZVOqq4Hkey5cvx1dffYXc3FyYTCYYjUb4+jZ8zemJEyfw+uuv4/Tp0ygpKWEjkNnZ2ejVq3Kb9H79+jE7IsI64+Dq1auIiooCYO019vf3hyAIMBgMuPXWW/HRRx8BsPbmLlq0CMeOHbMboc3OzkafPn1YuYMHD661rqdPn8aRI0fYzCjA6huDwQCdTueSP1588UVMmTIF+fn5ePHFFzFz5kx069aNXa+iogLt29vvIqHX6x32PpeVlSE/Px833ngjOyaTyTB48OBGmU3X3OA4DgEBAW63q1BLwOsLK9zRD7zAI/FcIjac2gCLYEGgMhBP93saD3d7GCpZ0y0pc0dftBS8vnBfiLPXbGexSSQSFitXYtbYGspRXWqyAcf6acmSJUw/iUvNAOsMmJr0U13Xrelv8djJkycd6qfLly/b6af+/fuzz4q5rgoLC+30U0BAQDX9xHFcjfrp8uXL6Nu3L6vL4MGDa/VfbfpJr9cz/WTLr6pdteza9NOZM2dq1E/p6enVytRoNEw/icer6idn20dVOPM5V2zxb4lEUu0+IyIEBgbWeP+JkEqlLtkcx9Vo1xQ/2/o6qktj2VXrS0QICAiATCZjdWjtnJy1q/KQyWQICAio9gx2R046sw7Lji3D92nfAwB6BPfAvEHzMKzjMLv6uhonqVQKtVpt9/+m5lST3ZxtT6/V48xn3+CGe+9gM6SqQtBowGvKIWkf3CicnIHHd0oB1imu4rQzs9mM0NDQJrmOSqbCsfHHnD5fLpFDrVA7FFVqhRqhqlBsv2e709euL0aMGIFNmzZBoVCgY8eOkMmszUGcpmiLlStXYu3atXjvvffQt29f+Pn5Yd68eXbTw12BVqvFqFGjMGrUKHz22WcICQlBdnY2Ro0aVa1s260qbcWeiICAAJw8eRISiQQRERF2+UXGjBmD6OhofPjhh+jYsSMEQUCfPn2qXcPPz6/W+lZUVGDJkiV48MEHq/3Px8fHeeI26NChA+Lj4xEfH48dO3agb9++GDJkCHr16oWKigpERETg4MGD1T7XElstNzc4jmsTPJ2B1xdWuJsfcspzsPDwQpy8ehIAMCRsCOYMnINBYYOa/Nru5ouWhNcXrR+tSUN59ZNXP7k7vM/ESnh9UYnW4ovk4mS8dOglZGmywIHDQ10fwoz+MxDmF9Zo12gtvmgsGA0m7F+XiIAvExGmAGSTHoJErXbYMSVRqyFVBzRr/dy+U+rQoUNYuXIlTpw4gfz8fHz77be4//777c7ZuHEjVq5ciStXrqB///5Yv349hg4dCgAICQnBCy+8gKioKMhkMsyYMQNxcXFNUleO4+Ard36mjN6sx/ge47H5zOZq/5vQYwIsgqVe5dUXfn5+iI+Pd+rcI0eOYOzYsXj88ccBWMXMxYsX7UbiXMGFCxdQXFyMFStWICwsDAqFAsePH3epLIlE4pBPcXExUlJS8OGHH+K2224DABw+fNilawwaNAgpKSm1+k0ul1dL7KZQKJxK9ta5c2c88sgjWLBgAb7//nsMGjQIV65cgUwmY0lAa0NgYCAiIiJw7Ngx3H777QCsnbJiLqrWBkEQcPnyZXTu3LnN54rx+sIKd/EDEeG7S9/hrT/fgs6ig0qmwuTekzGx58R67wDjKtzFF+4Ary9aP1qThnIn/fTWW2+hU6dOMJlMNeburAte/eTVT54Mry8q4e6+ICJsP78dq0+shkWwINgnGHMHzsXYuLGQS+V1F1APuLsvGgs8L+CXj3eA27oZXUqvAAAKhUBE5OYj6PHHUfz++9U+E/T44+BNZkjkjevz2uD2nVJarRb9+/fHtGnTHI6ufPnll5g/fz42b96MG2+8Ee+99x5GjRqFlJQUhIaGoqSkBLt27UJmZiZUKhXuvvtuHDp0iL1wWhI+Mh882fdJcODw2YXPoDFpoFaoMaHHBDzR7wkopcqWriJD165d8fXXX+Po0aMICgrC6tWrUVBQ0GBRFRUVBYVCgfXr1+Opp55CcnIy3njjjUaqtRVBQUFo3749PvjgA0RERCA7Oxsvv/yyS2UtWrQI9957L6KiovDwww9DIpHg9OnTOHv2LN58800A1h349u/fj1tuuQVKpRJBQUGIiYlBRkYGTp06hU6dOiEgIIDt+FAVzz77LPr27Yvjx49j5MiRuPnmm3H//ffjnXfeQbdu3ZCXl4fdu3fjgQcecLjc8Nlnn8Vbb72Frl27okePHli9erXD0dvWAI7jEBQU5F2SA68vRLiDH64ZrmHp70uxP3s/AKB7cHfMHjAbCZ0SIOGaT9i4gy/cBV5ftD20Fg3VHPrp6aefRlJSEtMhjQWvfvLqJ0+A1xeVcGdfXDNcw2tHXsOhHOumB4PDBuPZG57FgJABTXI9d/ZFY4CIcHjHHmg3rEX01UwAQLnCF1m33I0hT01AQNc4+EU9BQAo2b4dgkYDiVqNoMcfR4enn4KkhudsU8HtuwXvvvtuvPnmm3jggQcc/n/16tWYPn06pk6dil69emHz5s3w9fXF1q1bAQD79u1DfHw8goODoVKp8M9//hN//PFHjdczGo3QaDR2P0DTbGkMAEqZElP6TMHBRw7i13G/4uAjBzGlzxQoJIom3VbWFs6cv3DhQgwaNAijRo3C8OHDERYWxmasVeXk6Fo18QgJCcG2bdvw9ddfo2/fvnj77bexcuXKGsuoi5Oj4xzH4YsvvsCJEyfQp08fPPfcc3bXqK3uVY/fdddd2LVrF37++WcMGTIEN910E9asWYOoqCj2uXfffRd79+5F586dMXDgQBARHnzwQYwePRojRoxASEgI2w7a0TV79eqFu+66C4sXLwYA7N69G7fffjumTp2Kbt264dFHH0VWVhZbhlq1nPnz52PixImYPHkybr75ZgQEBNjdP3XF29GPs+2kIXbVe0sQBHAcB39/f1Z323vO1m51W7C6sK0sAKjVanaOJ3ByJU6AdZYCx3EtwulQziE8+N8HsT97P6ScFI91fwwb79iIEZ1HgARyiZOrcRLvj9ruoZaKU3O3PcB6f1R9pjR22/PCfcBxHJQyJab2mWqnoab2meo2HVIA8Oqrr9rpp/Dw8Goz/l1BSEgIEhMTsWPHDvTu3RvvvPMOVq1a1fAK20AikeD//u//HOqn+mLUqFEO9VN0dDQ7p6p+AoCHHnqomn6qCb1792b6ieM4/Pjjjw71U1iY4yVAzz//fK36qTWB4ziWL6etw+uLSrirL/7M/xMPf/8wDuUcglwix9TeU7Fm+Jom65AC3NcXjYHjPx/FrlEPo8Oi5xB9NRMGqQJnb7obAe9vwcPvv4GYgT0BABKlEkFPPIGuRw4j/ugRdD1yGEFPTGv2DikArWv3PVTZ1cxoNJJUKq2209mkSZPovvvuIyKi33//nQYMGEB6vZ4sFgvdc8899N1339V4jcWLFxOAaj8pKSlERFRQUEAFBQVERJSVlUVJSUmk1+vJaDSS2Wxm9RJtg8HAstDb2mJ9DAYD6fV6lhFfp9OxLP7izig8z5NOpyMia8Z8cacyW1ssq6ptNpvJaDRWs00mk51tup5h32g02tn15STycIWTWJYncXIlTiaTiSoqKtguGZ7AqaY4aTQadg/l5eVRYWEhERHl5ORQcXEx8TxPx48fp+LiYiIiyszMZLs3pKWlsR0aU1NTWT1TUlJYHc6fP08mk4ksFgudP3+eLBYLmUwmOn/+PPOLeG/rdDpKTbXulFZeXk5paWlEZN1BKjMzk4iISkpKKDs7m4iIiouLKScnh4isuznm5eURkf0zwhEnIqLs7Gy2I5WznHQ6HaWlpVFycrLHcHIlThUVFfTHH38Qz/PNyulC2gV69ddX2W5do3aMol1puyjlYkqLtT2e5+n06dOUm5vrdnFq7rZXXFxMaWlplJ6e3iScvLvv1R/12b3YFQiCwHZWa+vw+sKKtuaH2u4jnucpLS3NuzsreX1hC3fzhZk309oTa6lvYl/qk9iH7tpxF+1O301m3tzk13Y3XzQGzv1+hr65byLbRe90j960Y9zTdGLXL8Rf/x5YDUYtCRYj8RVFJFiMREZto9bJWf3EEdlMs3BzcBxnl1MqLy8PkZGROHr0qN1uei+99BJ+/fVXHDtmTZi5cOFCfPPNN5BIJLjzzjuxdu3aGntFjUYjjEYj+1uj0aBz584oKSlBu3bt2IisRCKBTqdDZmYmYmNj2VRicfTeWVsQBLaO1fZ4TfzrU7a72XVxqskX7mzXxclV29YXnsLJka3X65GRkYHY2FgoFAoA1ntLvM84jkN5eTn8/f3ZcXHHCVub53m2k4gjG7BvX4IgsB1ZarKJCBKJpEbb9lngiu2IR22cOI6DTqeDj48P282itXNyJU6CIKCiogIBAdYEjM3BKakoCa/89gqyy7MBAPfE3IOZ/Wcipl1Mi7Y98f7w8/NjvnGXODV32wMAnU4HlUrF6tuYnLRaLQIDA1FWVga1unlyhrV2aDSaGn1mMBiQkZGBLl26uJzk2vZd6Ykj3fWB1xdWtDU/1HYfERG0Wi2bWdyW4fVFJdzJF3kVeVhwaAFOFZ4CAIzoPALPDHwG8UHO5etrKNzJFw1Fxvl0/P3GKnT7+1dISYAADindhyDs0X/hxodGQaaoITeUxQD8tho4tgUwlAI+7YAbnwZumw/IXHs3V0VtWsAWbp9TqjGwbNkyuy1oa4NSqaxxrXpTQBS9Xnh9YQtRULV1f4jLk1r7y6IxIPqirS8l4jjObvleU8IsmPFh0of4KOkj8MQj2CcYMwfMxNjYsfBppJd1Q1B1eWtbhugLsYPKC88Hx9Vvu2lPhtcXVnj9UAnv+6ESXl9Uwl18sTdrLxYfXYxyUzlUMhWm952OCT0nNOkGX1XhLr5oCK5kX8GRN1cj/vD/0FOwAABSo/vA/6F/4d6J90GhqkWrmnTAkfeAX9+uPGYorfz7lnmAovni4fY5pWpDhw4dIJVKUVBQYHe8oKAA4eHhDSp748aN6NWrF4YMGQIAuHr1KgCgqKgIRUVFzBYFsNlsZl8WbW2TycTOsbWNRiMEQYDBYIDRaGRfrgwGg50NWHtybW1xJpetLQgC257X1uZ5HmazuZptsVjsbIvFwupua9eXk1h3VzgZDAYIguBRnFyJk8VigU6nAxF5DKfa4iTWq6CgANeuXQMA5Ofno7S0FDzP4+TJkygpKQEAXL58GeXl5QCAzMxMaLVaAEBGRgarZ1paGqtDamoqu0ZqaioEQYDFYkFqairzS1paGuOckZEBwLrBQmZmJgCgvLwcly9fBgCUlZUhNzcXgHXr7/z8fADAtWvX2HPI9hnhiBMA5ObmoqysrF6c9Ho9Ll26hJSUFI/h5EqctFot/vrrL/A836ScMsoyMP778dhyZgt44jE0eChW37Qaj3Z/FPmX892i7fE8j6SkJMbPneLU3G2vpKQEly5dQlZWVpNx8sK9IL6f2vrgDeD1hQivHyrB8zwuXbrU5geyAK8vbNHSvjBYDFj6+1LMPzgf5aZyxLeLx9u3v40n+z7ZrB1SQMv7oiEoKSrDN/PfQM49d6PXoR+gECzIDI9D1syXMfKrrbjjqUdq75ACAKnMOkPKEY5tsf6/GdGql+8BwI033oihQ4di/fr1AKxfiqOiojBnzhyXdwixhTjlrLi4GMHBwawjQCaToaKiAtnZ2S4t3xOXFdgesz0OWF+utnZtSx9aehlbbUtBnOVkW6ancHIlTmJy3qZavtcSnGqybZfvyWTWh59MJmP3mVQqRUVFBXx9fSGVSmGxWCCRSCCRSOxsk8kEmUxWow1YO8BsbYVCwb6AOrIFQYBMJqvRtn0WuGI74lEbJ6lUCpPJBIlEAvn1LVpbOydX4sTzPHQ6HUvw3diczGYzdqTuwJqTa2DgDfCV+eLJfk/ikfhHEKAMcKu2J94fPj4+kMvlbhWn5m57HMex+kml0kbnZDAY2uTyvTVr1uCjjz4CEWHkyJG1pj+oiuZYvie+q9r6bFqvL6xoa36oa/mewWCAj49Pm/BFbfD6ohIt6YvUklS8dOglXCq9BA4c7ou7D7MHzEaEf0Sz1kNEa2wXOq0Be9/ZjNDvPkM7YwUAICc4EsZ7H8Lt08dBHRLsfGEVBcCqbjX//8U0wK9DA2vs/PI9t58pVVFRgVOnTuHUqVMAwLaFzc625vaYP38+PvzwQ/znP//B+fPnMXPmTGi1WkydOrVB1606U0ocqb127Robqb127ZrLM6VMJhP7Ui/aQPVZLED1GSriCK+t7Q6zimx5uMJJ7ODwJE6uxEkQBJZDyFM4OTNTqrCwkM18KCgogEajAcdxKC0tZTMfcnNzUVFhfQhnZ2dDp9MxW6xnZmYmKz89PZ3tqJWeng4i605a6enpzF/iDA6j0cieKzqdjtkVFRVsNodGo2GzOTQaDZvNUVpaisLCQgD2zwhHnADrLA/RdpaTxWKBSqVCRkaGx3ByJU4mkwkFBQUQc2w1JqdCXSGe2vMUVvy1AgbegJ7qnlgxZAWe7PMkSq+Wul3b4zgORqPR4fuppePU3G2vvLwcKpUKeXl5TcapraGwsBAbNmzAiRMnkJSUhBMnTtS6e3Fzg+O4NpM7qC54fWGF1w+V4DgOKpXK6wt4fWGLlvAFEeGrlK/w2O7HcKn0Etop2+GVG1/Baze/1mIdUkDrahcmkxm7V2/FXwkj0e3LLWhnrMBV/w5IeehJDPzyU9z775nOd0gVpwH/fQZQ+FtzSDmCTzvAp3kH4Nx+ptTBgwcxYsSIascnT56MxMREAMCGDRuwcuVKXLlyBQMGDMC6detw4403Nsr1xd69pkp0bjQaoVAo2KhObeFoyRlDjWHXxkns5HDVj+7IyVVb7NixzW3W2jk5M1PKUaJzIsKlS5cQFxfHZlY4muXVGhMz1zZbzREP8UtzTEwMmynV2jm5EieLxYJLly6ha9eurP6NwWlf1j4s/WMpykxlkEvkGN9zPKb0nIL2vu2bnJOrcRLvj9jYWMjlcreKU3O3PUEQkJ6eji5dukAmkzU6p7aY6LywsBCDBw/G6dOn4ePjg9tvvx1ffPEF4uLinPp8c8yUMhqNUCqVreJLRVPC6wsr2pofaruPeJ5HWloa4uLi2nyeLa8vKtHcvigzlmHJ70uwN2svAKB/SH88O+hZDAkf0uTXrgutoV3wvIBfEr8BPtqEyJI8AECpTwDyR4zBTTMfR8duXZwvTJNvzRd18hOAeODRz4G8U8Chd6qfm7Cg0XJKeUyi8+HDh9f6ZRkA5syZgzlz5jRTjRoXYodUWwfHcaxToq3D64tKSCQSREVF2S1lbKuQSCSIjo5u875obD+Um8qx4tgK/JD+AwAgRh2D2QNm4x/R/wAH9342e++PSnjvj+o4dOgQVq5ciRMnTiA/P79a+gPAOitcHNTr378/1q9fj6FDhwIAQkJC8MILLyAqKgoymQwzZsxwukOqueB9V1bC6wsrvH6wwvtMrITXF5VoTl/8ffVvLDi0APnafEg5KR7r8Rim952OYFU9lpg1Idy5XRARjnyzD5r1a9HlijWvZYVchaxbRuGG6Y/j5ht6O1+Y7po1ofmxLdbd9gAg6iZAIgVuex7guCbdfc9ZuF8U3ATNkehcHCF2h2TT7pBAWxw59yROrsZJzJHiSZxcSXTOcRyKiorYMh1PSsxc32TTZrMZSqUSly5d8hhOrsTJaDQiNzcXHMc1mNP+lP14+PuH8UP6D+DA4YH4B7Cs7zIMDRwKqUTq9knBRR84ej+1dJyau+1pNBoolUrk5OR4E51fh1arRf/+/bFx40aH///yyy8xf/58LF68GCdPnkT//v0xatQo1p5KSkqwa9cuZGZmIjc3F0ePHsWhQ4eak0Kt8C7VqoTXF1Z4/VAJjuPazIyxuuD1RSWawxe8wGPL6S2Y+tNU5GvzEeYbhqW3LMX8wfPdpkMKcN92cXL/H/j+7kfRfuEz6HIlDUapHOeG3gX/9Zvw0Kbl6OJsh5RJCxxaBaztDxxZa+2QCusDjFkHTNgJdBsNyH2sM6JeTLXmkHoxFbjl2WbvkAJawfK9lkZTL98zGAzshmjry/eMRiObfuwO9W3J5Xu2vvAETjXZzizfu3jxIrp27epdvldlqZYncHJ1+d7FixfRvXt3l5fvWciC9SfX4z/J/wGBEKoKxawBs3Bf3H2QctJm5+RqnMT7Iz4+3rt8TxDslvp6l+/Zg+McbxQzZMgQbNiwAYCVc+fOnTF37ly8/PLL2LFjBw4ePMg6tVauXAkiwksvveTwGkajkQ1WAFb91Llz5ybTTwDsktS2Vf1k6wulUsnuLXepu1c/Nd01DQYDMjMzER0dDR8fH69+8uqnOjmZzWakp6cjPj4eEomk0TkV6Arw6pFX8eeVPwEAt3a8FXMHzEXPDj3dru2ZzWZcunQJ3bp1A8dxLR6n5L/OIuWt1eiZbM3daOEkuNhnGGImjsPAe4aDu35enXHiTZD8/Sno13fAaa2DTBQUCxr6JCT9x0PwCazGSRAEZGVlsZnRLaGfvDOlnIToaPEGFm2xEYuBq48NwK5DyvYcRz+uXsdd7Lo4KZVKXLlyBXfddRf8/PwQFBTkdNnfffcde/HOmzcPHMfhv//9L+Lj4yGTyfDcc88hMTGxXmU2BidXbVFY/ve//3W7OIl2VlYWOI7D6dOnazzn119/BcdxKCsrq/P6Ve8t8Sc+Pp6t9ba952xtqVRaq81xXDVbvH5NtliXmmxH9a2P7YhHbZykUini4uIgl8s9hpMrcZJKpSyflCucLpVdwqO7H0ViciIIhDs634H373wfD3V7CHKpvEU4uRon8f4Qd4xzpzg1d9sT7w+xQ6opOHkSTCYTTpw4gZEjR7JjEokEI0eOxO+//w4A6Ny5M44ePQqDwQCe53Hw4EF07969xjJXrFiBwMBA9tO5c2cATTfTXIRot+WZ5oB1huE//vEPpp+c5VRVP1ksFuzcuZM9W5599lmmn9x9Vrb4xUgikWDnzp1uGSexs4jjOJw8ebJGTvv27QPHcSguLq6z7RUVFVWbRSqRSKBSqdjMUU+aGVvf2b4WiwVxcXHM9gROrsYpOzsbcXFx0Ov1jc7puzPf4eHvH8afV/6EUqLEk92fxDu3vwM/nZ9btr3S0lIEBFh3VW7JOGWmZOHriXMhTH6UdUglxw9C2cJlGLnlHQT1iYVEJqubkyBA+/s2COsHAz++AE57FbxfODBiIa7c9zmudR0H+AY55CTqKZFHi8w0p0ZEcnIyLVq0iEaMGEGxsbEUHh5Offv2pUmTJtFnn31GBoOhMS/XLCgrKyMAVFJSQkREPM8Tz/NERKTVauncuXOk1+tJEAQSBIGIqF627U9Nx10tuzZ78uTJBIAAkEwmo5iYGHrxxRdJp9M1SvnR0dG0evVqu+MHDhxg1wRAoaGh9OCDD9KlS5fYOS+++CL17t2bLl68SFeuXHH6mqGhofTSSy9RTk4OaTQadmzBggWUk5NDZWVlpNPp6lWms/Gz5aRWq2nYsGG0b9++BpXN8zwBoG+++cbpz06ePJnGjh1rdzw9PZ0A0MmTJ+2OL1q0iNVZIpFQp06d6Mknn6SioiKn257ZbKb8/HwymUw1niPG/Nq1aw7P0el07B6yvbdEWxAEMplMdsfFz9raFoulVlsQhGq2WJeabPGaNdmO6lsf2xGP2jjxPE8Wi4XMZrPHcHIlTjzPk9FoZOc4y4kXeNqatJUGfjKQ+iT2oWGfD6NtZ7eR1qRtcU6uxkm8P2x94y5xau62J94ftvVtTE6iFigrK6OmQlNqKAD07bffsr9zc3MJAB09etTuvBdffJGGDh3K/v73v/9NPXr0oF69etHcuXOZ3xzBYDBQWVkZ+7l8+XKT6yfbGDt6d7ladm22Vz959ZM76CdBEEin01FycjJptVqvfvLqJ6c4mc1m5pPG4qQ36emtY29Rn8Q+1CexD937zb20J30PWfhKbeKObc9isbB7sCXilH+5gHY89TL93asvJXfvQcnde9D3Ix+kfZs+J62mwnlOFgvx538ken8Y0WK19eetaOJ/fo34onSnONX2vGgu/dQoM6VOnjyJkSNHYuDAgTh8+DBuvPFGzJs3D2+88QYef/xxEBEWLlyIjh074u2337ab3u2uaI6cUsL1acYWnQ6wWGApLgaZzRD0egBNO9InCALuuusu5OfnIyUlBStXrsSWLVvw2muvNcoIEtmMYtqOIAHAhQsXkJOTg+3bt+PcuXO47777oNPpYDAYkJaWhgEDBqBr167o0KGDU5xKSkpw9epVjBw5EiEhIQgICEBpaSmuXr2KUaNGISQkBCqVCiqVqklG+gBg69atyM3Nxf79+9GhQweMGTMGFy5ccClOOp0O+uttgK8yOlvXSJ8gCA45mc1mO04A0Lt3b2RkZCAzMxPbtm3DTz/9hJkzZzJ+Yt1ransWiwXh4eGQSCQ1chLrWJWHszmlBEHAyZMnWY9+Wx7pMxgMSE1NxcWLFz2Gkytx0ul0OH78OJsS7AynU+mn8OTPT2L1idUwC2YMCh2EZQOW4e4Od8NX7tvinFyNkyAISEpKwpUrV9wuTs3d9kpLS5Gamors7OxWl1PKnTXUsmXLcP78eZw7dw7r1q1jM8wcQalUQq1W2/00NUwmEwSDAWQ2g792DbBYmIZqSowePRr5+flIS0vD6tWrsWXLFixevLjJr3vhwgXk5ubiq6++YvpJfOenpqZi0KBB6Nq1K0JDQ50qr6Kigmmljh07IiAgwOExlUrldJn1xdatW5GXl4fDhw8z/ZSenu5SWVWXkDYVevfujby8PGRlZWHbtm3Ys2cPZs2a5fTnpVIpwsPD2SzXpoBwfUmzqLHaMmyf720dje2LTE0mJv40EdvPbwcAjI4ZjY13bsTI6JGQcO69IKul7pGyEg2+eXEFLt89Gr1//Q5K3oys0C7IeupF3Pl1Iu54+lEofZ3M6ZT1O7jEuyH5v0eBgrMghR+EwU8AU/8H3Pk6EBTtVDFu8byotcvKScTExNDGjRvZaFhNOHr0KI0bN46WLVvWGJdtFjT1TCneYKCr69bRhSFDKbl7D7owZChdXbeeeIPBqdEWV21xVMj2+IMPPkgDBw4kQRDYSJ3tZ/v370+LFy9mvbOLFy+mzp07k0KhoIiICJozZw4JgkAJCQl2o18AHI76CIJAn332GQGg8+fPU3R0tN1nJk+eTIIg0Lvvvkt9+vQhX19f6tSpE82YMYM0Gg0RUbXRQwD0yy+/VDt24MAB2rZtGwUGBjJOqampdN9991FoaCj5+fnR4MGDae/evXZ+io6OpjfffJOmTp1K/v7+1LlzZ9qyZYtdXGAzIicIAhuB3rRpExUVFdGjjz5KHTt2JJVKRX369KHPPvvMzu8JCQk0a9YseuaZZ6h9+/Y0fPhwhyN9WVlZ9K9//YsCAwMpKCiI7rvvPsrIyCBBsB+5s+Vc9VhCQgI7v3///nZcn3vuOQoKCrLj9sEHH1CPHj1IqVRS9+7dacOGDazujkYRd+3aRV27diUfHx8aPnw4bd261TtTyjvS16hx4nnnZ0oJgkDfpX5HN312E/VJ7EM3fHoDrT2xlkoNpW7FydU4ifeHd6ZU654p1RwaClVmShmNRpJKpXbHiIgmTZpE9913X73Lt8WGDRuoZ8+e1K1bNwJAKSkpRERUUFBABQUFRGR9nyUlJZFeryej0Uhms5nVS7QNBgOLg60tvi8EQSBer3esoa7rMp7nSafTEdH1EX29vpptsVjYLDRb22w2k9ForGZPnDiRxowZQ0REJpOJTCYTPfjggzRgwAAymUwUHR1NK1eutOPUr18/Wrx4MRkMBjKbzbR48WLq1KkT008zZ84knucd6iee5+30k8hJ1E+nT5+upp8mTZpEBoOhmn56+umnqbi4mIiI9u3b55R+2rt3L9NPIqfk5GQaM2ZMNf1kG6eoqCiH+kmn07H4iTpH5CTqp/Xr11NRURGNGzeOIiIimH76z3/+YxenhIQEmjlzJs2ZM4fat29PCQkJZDQaCQDt2LGDxSwtLY0eeughpp/uvfdeysjIIKPRSK+99lo1znv27HGon/R6PdNPYjskInrmmWeYfhJnzG3ZsoW6d+/O9NN7773H2t6FCxcIAB0/fpy1t++//57i4+PJx8eHEhIS6MMPPyQAVFhYyHiYTCY7W6PRUHJyMmVlZVFhYSEREeXk5FBxcTEJgkCZmZl07do1IiLKzMxkz6+0tDQqLy8nIqsWFu+RlJQUVp/z58+z98v58+fZrJLz58+ze1K8t3U6HaWmphIRUXl5OaWlpRGR9TtUZmYmERGVlJRQdnY2EREVFxdTTk4OEREVFhZSXl5etWdEXl5eNU5ERNnZ2exZ6SwnvV5PFouFkpOTPYZTQ+JksVhIo9E0iNOVK1fou9TvaPCng6lPYh+66bObaPPRzZR/Nb9FOLkSp6tXr1JOTg4JgtAscSot0dC3r6+lw/2HsplR+24cTj+8sZ6uXs6rF6eyi0dI99G9bGaUsKQD0TdPU9G5X11qe+L3utLS0kaPk7P6qVE6pUwmU5Oe35KozZF6vZ6Sk5OZsBEEgXit1ukfS3k5XV23jjVM25+r69aRpbzc6bJEge0sbDuliIiSkpIoPDycbrzxRiKydsasWbPG7jNipxQR0Y4dO0itVtOPP/5IWVlZdOzYMfrggw+IyHrDd+rUiZYuXUr5+fmUn299QIlix1Z4f/PNN0xUXblyhUaPHk2PPPII5efnsxtjzZo1dODAAcrIyKD9+/dT9+7daebMmURkFXspKSkEgHbu3En5+fk1HhNFlYhTp07R5s2bKSkpiS5evEivvvoq+fj4UFZWFjsnOjqagoODaePGjZSamkorVqwgiURCFy5cYOdUFfvXrl0jALRu3TrKycmhlStX0t9//01paWm0bt06kkqldOzYMXZ+QkIC+fv704svvkgXLlyg8+fPs04psVyTyUQ9e/akadOm0ZkzZyg5OZnGjx9P3bt3J6PRSOXl5fTII4/Q6NGjmc+NRiP9+eefBID27dtH+fn57CG0ePFi6t+/P6tDRkYG9e7dm8LCwtix7du3U0REBO3cuZPS09Np586dFBwcTImJiewzAOjvv/8mIuuDTalU0vz58+nChQu0fft2CgsLqxZzW1S9h6pC/NJd3/btifD6wgpn/VCiL6H5v8xn08kf+O4B2pe1j3iBb6aaNj28baISTe2LpuyUag4NVfU9RUQ0dOhQmjNnDvub53mKjIykFStW1Lt8R6jvoJ4gCGSpqCBLRYVVI9VhO6OhnC3PtqPU0QCKrV11UO/MmTNMPwlC3YN6X331FanVatq9ezdlZmbSsWPH2GCXqJ+WLFlC+fn5lJeXR4IgOBzUs9VPBQUFNGrUKKafxC8Za9asof3791N6ejrTTzNmzCAi6xcGsXPk66+/pry8PDIajezYzp07KS8vjwwGQ7VBvb///ps2bdpESUlJlJKSQgsXLiQfHx/KzMxk59jqp4sXL9Ly5ctJIpHQ+fPnGYeqg3qiflq7di3l5OTQO++8QydPnqS0tDRau3Yt00/i+aJ+euGFF6rpJ7FcUT9NnTqVzpw5Q+fOnWP6yWAwkEajYfopLy+P8vPzyWAw0LFjx1inXF5eHuvoqTqoZ6ufxGOffvopRURE0Ndff03p6en09ddfM/0kfvmzHdQT9dNzzz1HFy5coE8//ZTpp4Ys3zMYDN5BveuDeiaTqc0P6gmCdfmeONjrKieNQUMv/foS01ePfP8IHck5wnzd3JwasnzPcH0SSFPGyWgy06412+jA4NvYO+rQoGH0zctvU0F6dv04FV4i+voJEhYHWjukXm9HwhcTiE89QMRbnOZRlVNtz4vmGtRrlHmj4k4GTXW+O0C4Pp1N/C1mrCeb5WqCToeLNwx2qjxpUBDi9+/DtU+3O/z/tU+3o/0TT+DSnSPBl5TUWV63E8ch8fUFxzm3awcA7Nq1C/7+/rBYLDAajZBIJFi/fr0dJyKy+6x4PCsrC+Hh4bjzzjshl8sRFRWFIUOGgIgQHBwMqVQKf39/hIeHs3Kqlpufn49Vq1YhMjIS3bp1AxFBqVRCpVLZfW7evHnsszExMXjjjTcwc+ZMvP/++5DL5QgJCQEABAUFISwsDBzHsWPBwcEICwuz85XIqV+/fujXrx/jt3TpUnz77bf473//izlz5jA/3XPPPZg1axaIrLsOrVmzBgcOHEC3bt3syiQi6HQ6vPrqq5BKpbj99tsRGRmJ559/nvl9zpw52LNnD7766iu2NBQAunbtirfffhscV7l7jG25X375JQRBwIcffsh2Xdi6dSuCgoLwyy+/4K677oJKpYLRaGQ+ICJ06NDBzg/icSJCUlIS/P39wfM8W9by7rvvMl8vXrwYq1atwgMPPACO4xATE4Nz585hy5YtmDRpUrV4btq0CXFxcVi1ahU4jkO3bt1w5swZvPPOOw7bkm1dgOr3llj2pUuXvLvHXN89Ji0trc3vHsPzPFJTU2vdfe9wzmEsOroIhfpCSDkpHur6EJ7q9xRCVCHWMW/OcXtrKU6uxkm8P7y771l330tLS2uy3feaEk2loSoqKnDp0iX2d0ZGBk6dOoXg4GBERUVh/vz5mDx5MgYPHoyhQ4fivffeg1arxdSpU+tVn8YC6fUtqqHg5+d0XWvST84gOzsb4eHhGDlyJORyOaKjo5keEPVTQEAA00GOYKufunfvDoVCAblcDh8fH7vP2eqnLl26MP20adMmKBQKtiQvODgY4eHh4Diu2jFH6N+/P/r378/e42+88Qa+++47fP/995gzZw47z1Y/LViwAO+99x5++eUXhwnzbfVTQkICIiMj8cILLwCw6oW5c+fi559/dqif3nnnnWr6SYSonz766KNq+ungwYN2+kn0ARExHdm+fXu74wCQlJSEgICAavpJxOuvv45Vq1bhwQcfZPopOTmZ6aeqEPXTu+++y/RTUlIS3nnnHYf+dwaCICA9PZ1tDNKWIb4fYmNjPXLjivpAbBfi7nv1xbmic3jx0Iu4XH4ZEk6Ch+MfxlP9nkKYf1irWx4p+sJ2973GBM8LOPjp9+A/eB+x13IAAGVKf+Qm/BM3zpiAW3vGO++z8ivAr++AO/kfQLCAA0CxI8ANeQIUfxcglQMSCeBiDNzhedFoV50/f77DnyVLluCLL75oFXmkbNGQnFLOQBbSAZZr1yBoNA7/L2g0sJSUQBbSwanyBBdySiUkJODUqVM4fPgwJk6ciKlTp+K+++6zywMkcjKbzexlbDKZ8NBDD0Gv1yM2NhbTp0/Ht99+C61W61ROqc6dO8Pf3x+RkZHQarXYsWMHAEClUoGI7PIjmUwm7Nu3D3feeSc6deqEgIAATJo0CcXFxdDpdLXujiPCNv+SeB4AlJSU4Pnnn0fPnj0RFBSEgIAAnD9/HpmZmXZf+vr27QugMhdTeHg48vLy7DiNHz8eAQEBUKvV2LlzJz788EN0794dPM/jjTfeQN++fREcHIyAgADs2bMH2dnZdnEaOHCgXWzEl6bI6fTp07h06RLUajX8/f0REBCA9u3bw2Aw4OLFiy7llOrevTuOHTuGY8eOYcGCBRg5ciQTk8XFxUhLS8OTTz6JgIAAds1ly5YhLS0NRFStvZ0/fx5Dhw61a3vi/VM1Ns7mlBI7NysqKgB4Vg6c+ub14XkePXr0QHp6usdwciVOZrMZCoUCUqm0GqfUzFQs+2MZZu6fiUJ9ITr6dcSrA17F5M6TEeYX5racXI2TVCpFSEiI3TuptXMCXGt7FRUV6NGjB/Ly8lpdTimgaTTU8ePHMXDgQAwcOJBdY+DAgVi0aBEAYNy4cVi1ahUWLVqEAQMG4NSpU/jpp5+qDeTUF02tn4DG11AmU+X7t7XpJ3HAx7az1quf2oZ+EmPjaPc9r37y6idHnLKzs9GjRw8YDIZ6cSoqLsLGYxvx+P8ex+XyywhWBGPxzYsxNXoqpAZpi3JyNU5lZWVo164dpFJpo8ZJr9fjyHcH8NNdD6LjW/9G52s50Ml8cO62MWj/4QfoPetRRHSPdY5TcR7KvnkeWDsA3PGPwQkWoPNQlN/9PnJuXw30HIPScm2D255UKoWvry90Ol2TxMkZNFqGvb///tvh8dLSUly6dAmvvfYaDhw4gKioqMa6ZJNi9uzZmD17NjQaDQIDA9nIkTjzRLTFh71cLgfJZOh+8oRTM5WICBK5HBK12qGokqjVkIeEIPqLL9ixWmc++fhAZrMNtkKhAFC5lXxVWyKRICAgAPHx8SAibNu2DQMGDMAnn3yCJ554gm2pK54vl8vZy0+hUCA6OhopKSnYu3cv9u7di1mzZqFLly44ePAgFAqFXY+zj499srZDhw5BrVYjNDQUarXabqaM7fbbEokEeXl5uPfeezFjxgwsW7YM7du3x2+//YYnn3wSJpMJKpWKjRpLpVJm2yaPrDqqLJb/yiuvYN++fVi1ahXi4uKgUqnwr3/9CxaLxW7LcvHzSqWSHbPdahwAVq9ejZEjR7K2InJ6++23sW7dOqxZswb9+vWDr68vnnvuOZhMJrs4+fv72/EQry9yqqiowA033IDt27dXi32HDh3sfCbaCoWClSOXy5kt8lAoFOjVqxcA4K233sI///lPLF26FG+88QaL9QcffIAbb7zR7priLASx7rY8xHLFuotxqCk2MpmM1cv2i1BERAQAsNleYp07d+7M/B4TE8PsLl26sHLi4uKYbdvjL9oSiQRdu3ZldY2LiwNgbaddunQBAPj5+SEmJgYAmKgEgMDAQJa8t127dmjXrh0A64iyCNtnhCNOABAZGcnq7iwnjuNgNBoRHx/PYtzaObkSJ6VSicjISBCRHadsYzZeOf0KMjWZAIBR0aMwa8AsxKhjWB3dlZOrcRJ9IN5znsAJcC1OgPULY6dOnVgdG5OTKM6aCk2hoYYPH17jTBsRc+bMsZvZ0hhwRT8BAFQq64wl1K2fANRLQ9VVHqdSWT/XSvWT+Nurn9qWfhL/7tChA2srXv3k1U+1cYqJiYHRaISvr6/TnIr1xVh0ahGO5B0BAAwNH4pnBzyLfmH97Gb6tDatERQUBJPJZLeypKFxKs2+hqRnXkOP9FMIBmCSyHBp0HB0n/IoHhhxExs8qJNTpzDg8Br4HV4DzmDtCKPQ3qAhT0LS7xH4K/zgd/250hhtj4gQGhrKnhctoZ8arVPql19+qfF/Go0GEyZMwMsvv4zPP/+8sS7ZrBCdbjulzfbFKi4RgK+v02Xyej2CJ05E0caN1f4XPHEiiOchrcd0chG2L/ua7KrnS6VS/Pvf/8b8+fMxYcIEhISE4MqVK+wz5eXlrNdWPKZSqXDffffhvvvuw5w5c9CjRw+cPXsWgwYNgkKhYA8qWx8BQGxsLLt5xOO2I0e2x0+ePAlBELB69Wrm+6+++srunGoxqIO3+PfRo0cxZcoUPPDAAwCsSx0yMzMxfPhwh5+vesz274iICHYT2p575MgRjB07FhMnTgRg7Xi7ePEievXqVWt5oi/E44MGDcKXX36JsLCwGnc0UigU4Hnerr7iw0Xs8KvNT6+++iruuOMOzJo1Cx07dkTHjh2RkZGBxx9/3OH1qpbXs2dPfP/993bHjx07Vus1bY9XvbcA6wjh5cuX2YPa0TlApVCur23bCVrVrslftdW3Me2q9eV5HllZWUxgeQInZ21bHkSEgoICdO7c2eoX4vHB6Q+w5fQWWMiCIGUQZgyYgQfjH4SPzP4LnbtycjVOzt4frYmTq7aj+6OxOTUlPF1DOQOO4yC5rqGc6ZQSDIZaNZRgsdSrPFchkUiYfho/fjxCQkLYqDVgjZ+on0SoVCqMGTMGY8aMYfopKSkJN9xwA3uXO0KXLl3s9JMtBEGw43LixAkIgoB3332X6dUvv/yyQVxFHD16FJMnT8YDDzwAImL6KSEhod5lhYeHIz4+vtrxI0eO4L777sPjjz8OjrMutRX1U01wpCVF/RQaGorAwECHsXfkc7GDyJlZfAsXLsSdd96JmTNnMv2Unp6OCRMmONXeRP1kiz/++KPO69YGQRCQnZ1t9yWyrUIQBGRlZSEmJsa7fO+6L2JjY51qF3/k/4GFRxaiSF8EuUSOyb0mY1KvSQhUBjZDbZsW4j0SHx9f43dkZ3Hh7xScW74KPc8eRQ8QeHC42PtmRE0Yh/vH3AFIOOfuQ94MnPwUkl/fBiquWJfpBXUBN+RJoP9jgCrIukyvge+tqnCH50WzXFWtVuO1117DkSNHmuNyrQZSlQrtn5qODrNnQ3K9o0GiVqPD7Nlo/9R0SK6P3DUX/vWvf0EqlWLjxo2444478Omnn+K3335DUlISJk+ebPcgT0xMxMcff4yzZ88iPT0d27dvh0qlQnR0NABrD+uhQ4eQm5vLpg7WBo7jqo0IAkB8fDzMZjPWr1+P9PR0fPrpp9i8eXOj8O3atSu++eYbnDp1CqdPn8b48eMbfT10165dsXfvXhw9ehTnz5/H008/zaZV1gRHvpgwYQI6dOiAsWPH4rfffkNGRgYOHjyIZ555Bjk51nXKMTExOHPmDFJSUlBUVASz2YzQ0FCoVCr89NNPKCgoYNNOHeHmm29Gv379sHz5cgDAkiVLsGLFCqxbtw4XL15EUlIStm3bhtWrVzv8/IwZM5CamooXX3wRKSkp+Pzzz5GYmFgPb1WHVCpFt27d2ryIALy+AAC9WQ8BAtRhaggQUGIowSu/vYKNpzbCQhbcFHET1t+5HuN7jK/WIeWJ8LaJSniyL1qbhmrI8j1b23YJla1tNBpBRFYNNf1JxxpqulVDERFbdkBEdvkaRduV9AdiXcQlVKJ+Wr9+Pe644w5s374dv/76K5KSkjBp0iTWLk0mE7Zt24aPP/4Yf//9Ny5dusT0kzgLLioqiumnnJycap0YjjiJM5Bsl+9FR0fDbDZj3bp1uHDhAj799FNs2bKFldOQ5XtxcXFMPx0/fpzpJ1vf2NZbjJlYvjOcunbtin379uHgwYPV9JNtnIjILja2nfZmsxkTJkxA+/btmX66ePEi9u/fj2eeeQYZGRngeZ7pp+TkZBQVFUGr1aJDhw5QqVTYvXs38vPzUVZWZreM1pbTwIEDmX4yGAx4/fXX8dZbb2H16tW4ePEizpw5gw8//BCrV692uHxP1E/PP/88UlJSsH37dvznP/9xGJv6LN/z9fX1Lt+7vnyvW7du3uV715fvdevWrc7le2bBjHd+fwcz9s1Akb4IHX074tW+r2LOwDkwl5vdilNDlu+p1eoGLd/LunQZ//f4XJgnPIzeZ49AAkJK3ACUvfImei59Hn3/mQCpXFY3J6MBV/dvAjYOBbf7OXAVV4CAcBhueQkZI7cBw+agnJc3WduTSqXw8fFp0eV7oGZCWloa+fv7N9flGg313T2GyLndW0Sb53myaLUkmExkLi4mwWSy/m2zG42rZddmV909Rjy+fPlyCgkJodLSUho3bhyp1Wrq3Lkzbdu2zW73mG+++YZuvPFGUqvV5OfnRzfddBPt3buXlXP06FHq168fKZVKAkCCIDjcPaaqL8aOHUuTJ0+2O7569Wq2JfCoUaPoP//5D4uJIFTu1nLgwAFWpnjsl19+YeVU3T0mPT2dRowYQSqVijp37kzr16+nhIQEeuaZZ9g54i46tvXp378/LVq0iP2NKrvH2J5bXFxMY8eOJX9/fwoNDaWFCxfSpEmTaOzYseycqtcUru9WYFsukXU7z0mTJlGHDh1IqVRSbGwsTZ8+nUpLS0kQBLp69Sr94x//IH9/fzt/fPjhh9S5c2eSSCSUkJBAglB99xjxup9//jkplUrKysoiQRBo+/btNGDAAFIoFBQUFES33347q1PV3WOIKrc0ViqVdNttt9HHH39c6+4xOp2O3UOOdoYQBIEqbHZGctcdPFzd7aI+nPjrW2a31d1jDGYDbTi5gYZ9Poz6JPahYZ8Po/Un11Oxvpge+f4R2nRqE5XqSlsVp4bGSbw/xM96AqeG2Dqdzq6+jcmpKXffcwatUUM1tX4SY+OMhqpv2bXZ7qifBEGg++67z6ufhLajnwSh7t33vPrJq5+q2mazmXQ6nd31q3LKKs2i8bvGs9315h2YR5eKL7ktJ1fjZLFYqKKigv2/Ppzycgpox8yFdKJXP7aj3q47x9LeDdtJp6lwnpPZTHTxZxI23WLdTW+xmoS3oon/6VWi4oxma3u1PS+aSz81W6fUZ599ZrcFvbtjw4YN1LNnT+rWrRsBoJSUFCIiKigooIKCAiIiysrKoqSkJNLr9WQ0GslsNhMR2dkGg4EFx9bW6/VksVhIr9ezL+RExB4U4stGbHQ6nY6IrI1Er9dXsy3Xt7WsapvNZjIajdVsk8lkZ4tbTBuNRju7vpxEHq5wsvWJp3ByJU4mk4k9JD2FU01x0mg07B7Ky8ujwsJCIiLKycmh4uJislgs9Ndff1FxcTEREWVmZrKHWlpaGpWXlxMRUWpqKqtnSkoKq8P58+fJZDKRxWKh8+fPk8ViIZPJROfPn2d+Ee9tnU5HqampRERUXl5OaWlpRGT9YpWZmUlERCUlJZSdbd2+tbi4mHJycoiIqLCwkPLy8ojI/hnhiBMRUXZ2Nvui5iwnrVZLqampdO7cOY/h5GycKowVtOHkBiaQbH/Wn1xPueW5VFpa2qo4NUacLBYLnTp1ivHzBE6uxqm4uJhSU1MpPT29STi1dKdUa9NQRFSrz/R6PSUnJ7P3iCsQBIF1arV1eH1hRVvzQ233kcViodTUVKb92jK8vqhEXb74X/r/6KbPbqI+iX1o6Pah9NGZj0hr0jZzLZsHrrSL0hIN7VzwFh3rO4h1Ru25dRT9b+UHpC2ppz7I+oNo692sM4rejCD6YR5R/tl6Mmk4mvIecVY/cUSNsyjxzJkzDo+XlZXhxIkTWL58ORYvXozZs2c3xuWaDWKizpKSErRr185uG2qdTofMzEzExsbaJXGkOvIWuJrboLHKbinby6l12M3JSa/XIyMjA7GxsXaJP23vM8FDt7D3cnKek5k3Y/hXw6ExVU9orFaocfCRg5BJZK2KkyfGyZM5abVaBAYGsun+jQ1P1FBe/eTl5OXUtNcUl2BFR0fDx8fH+7z3cnKZk9akxaoTq7AzdScAoFtQN8wdMBe3Rd4GqVTaKjk1ZpyMRjN+Xv0x2u/8FO11pQCAK4Fh0N7zIG55+lG0CwtxnlP+WUgOvgnu4k/Wh4RUDur9IIQbnoC08xDQdT95SttzVj81Wk6pAQMGYODAgRgwYIDdT0JCApYvX4758+dj1qxZjXW5ZofoaIlEYmdzXO3JW2uzgcr1+VXPcfTj6nXcxa6NU22+cGe7KeIEVCYs9RROzthV7y3xoSuubxaP254v2lKptFab47hqtnj9mmyxLjXZjupbH9sRj9o4AdZk/OI5nsDJ2ThpTBqHHVLi/8rN5a2OU2PESbw/aruHWhsnV23Aen9UfaY0JqemhCdpqObKKSV+KRe/qFe1Ace5iqraglC/nFKWGvL62OZfcpVTVdtZTkQEi8XiUZxcjZOtPzyFkys5pYgIaWlpLHeMu+b1aY78S0ajERUVFbh48aLHcGpInCoqKtjmBADwd87f+Nf3/8LO1J3gwOGeiHvw/p3vo59/P1y5cqVVcHIlTsXFxcjKygIR1cgpOycX/12zDb8njEK3T9ejva4U13zbIene8eiybQvuXfwMSnQVznEqSgN98zQkH9wG7uJPIE6C0s7/AB77Cqa730Oa0ZrEvCXaHhEhNTUVmuu72bZETqlGmymVlZXl8LharUZQUFBjXKJFII70OerdExtNly5dHCbprgtE1mSHVbcAbovw+qISbckXdd1DgiAgMzMTMTEx7ItnW0Vb9cXveb9jQOgAjNwxstaZUnKp3MGnPRtttU04QlP7ojYt0BjwRA3V1DOlAGvHgFKprHa8KupbtrvZdXESfaFQKFiHtbvU3VVOrtpim2jMMluaU012bTOlACA9PR1dunRhM13ETvfWOlvF1ZkdgPUZ27lzZ8hkMo/g5GqcLBYLrly5go4dOwIAvkr9Cqv+WgWTYEKQMgizBszC/XH3w0fu02o4uRoni8WCrKwsdOnShd0z4jmCQDj0f/+DafMGRBdZ388apR9yb7sbQ2ZMQmSvOOc5aQsh/PoOuBOJ4ARrpzJ1SQAGT4MQPwpSparF2x4R1fi8aK6ZUo3WKSXCaDTCYrHAz8+vMYttMTRlp5QXXrR1eO8hL2pChakCK4+vxDep32DdiHU4V3wOW85sqXbezH4zMbXPVKjkzbtbqRdtC03dKSXCkzSUVz954UXTwnsfeVEf6M16yCQylJvK4a/wR3JxMhYdXYSMsgwMDB2IeYPmYVDYoJauZouCiPD77kMoWvMeuuZeAADoZUpk3DgS/Z4cj/ibBjo/YcBQBhxZB/yxCTBbZx2h0xBgyJNAr7FAG9GtzuonWWNdsLCwEJMmTcK+ffsgCAKGDBmC7du3Iz4+vrEu4XEQexBtlxi0VXh9UQmvLypBRCgvL0dAQIDXF23IF3/m/4nXjryGPG0eOHA4WXASswbOggQSfHbhM2hMGqgVakzoMQFP9HsCSqmy7kI9EG2pTdSF1u4Lr4aqP7zvykp4fWGF1w+VaO3PxMaE1xeAkTdi69mt+PzC50xDPdbjMSSOTsS3qd/ioa4PoZ1Pu5auZrPBrNVBqpCD12ggVavBm8zISs3CmVeXoeelEwgCYJZIcWlAArpNeQwP3HkzJM4u5TfrgT8/BA6vBvQl1mMhPYGh04F+jwDKgCbj5Src4R5ptE6pBQsW4NSpU1i6dCl8fHywZcsWTJ8+Hb/88ktjXaJFIU51qzrlTZw+5+oUXIvFArlcXu24I7jDdOummtYsTilVKBQgIreob0tN1QZg5wtP4FSTzfM8+9vR1FLAuubbz8/PO/0cQElJCVQqlcdOP9db9HjvxHv4IuULAECoKhQzBszAmNgxkHNyTO0zFdP7TYfGqIFaqYZZMEPOWZ+f7sqpKeMEWPMH+Pr6QiaTeQQnV20iQklJCXx9fVluqMbk1NTwZA1Vm34SfwOuvavEdyWANqufbH0hl8vdor5e/dR4nGqzRW0g3kte/dR29VNtnPQWPbad3YbNZzaztqExabDlzBZw4DC1z1T4SH1YW2oNnBoUJ7MZJR9/jJLt2yFoNJCo1Qh6fAJiHn8cnFACPTik9hyKzhPGYcy9d0CqkDvHSeAhnPwE3KGV4MrzrP5sFw1u6JPg+42HxK+9lUcVfu7Q9oioxudFc+mnRku8sHfvXiQmJuKVV17Bc889hx9++AG//fYbS+bX2uBMos6SkhIIgoDCwkKUl5dDq9XCYDBUs3U6XTVbo9FAr9eDyNozqdfrYTAYUFZWZmcbDAbo9Xo7W6PRVLN1Oh3Ky8ur2Vqt1qFdUVFhZ1dUVLA62tqucKpqO8OpvLzc+uD0IE4NiZPRaGSJGT2FU9U4iUn6BEGAQqFwmIRPIpFAJpOxBInumiyxORJAWiwWREdHM9sTONnG6eSVk3jkh0dYh9Sdne7EovhF+Fe3f4HjOaSlpUElV8FiskBbpIVcKodgFNyaU1PHSSKRwN/fH4WFhR7DydU4lZeXIzo6mtlNwakp4Ukayhn9VFpaCkEQkJeXh2vXrrn0DjMajex91Jb1k0ajgdFoBM/zDnm0Vk5e/VRznPR6PUpKSpCbmwuJRIKSkhKvfmrD+qkuTjKJDJ9f+ByO8PmFzyGTyBiP1sLJ1ThZdDoUbfkAxe+/D+F6Um9Bo0Hx+5tQ8ul2dFiyFPkvvIqbNizH4IfvxtXioro5ZaTDcPL/gPdvhGT3c9YOKf8wXOn/DEyP7wKGPYPUnCK3bnsSiXXzGDE2rTrRuVQqRW5uLsLDw9kxPz8/nDt3DjExMY1xiRZBbYk6BcGavEv8Yg1Ujl6IIza12bbHnDm/oXZDR2Sauo62f3sKJ1fjZNsT7imcHNVXpVIhPDwcPj6OEypyHMfuvdpGKdrCSB/HcdBoNPD392e7gbV2ThKJBGbBjI1/b0RiciIEEhCkDMJT/Z7Cg10fhFKirMZDEASUlpay5M/uyKm52h7HcSgtLYVara7Xls3uzKkhtkajQUBAAKtvY3JyNlGnq/BEDVWXfjKZTCgoKGDC15V3mG2M27J+qtrePYWTK3FqK/qJiODr64uOHTuy2T9e/dS29JMzcRIEAUWGIty5407UhF/H/Yp2inathlOD4mQ2I/WWW1mHlC0kajW6HjkMXG8jdXICwKX/Atq/BFz+aQAA+QQCAx8HN3g6+HZRreZ+AlDj86K59FOjLd8DKrctt/1bfIC2doiOFn+LdkBAALp27cq2aK0PBEFAQUEBwsLC7Mpti/D6ohJtxRdSqRQymYw9DKveWwDYw6xdu3Y1niOW5YrNcTVvYS/Wqya7pro0ll21voIgoLy8HGq1mtWhtXO6cO0C/n3430gtsY6q3Bp5K2b1n4W+IX1hC1seAFibEF+M7sTJWbsx4iQIAioqKhAYGOgxnFy1Hd0fjc2pqeGpGqom/eTj44OoqChYLBa2xKY+aCvvSmfg9YUVbckPVTWUCK9+ahv6yRm7QFuAlX+txNJblkKtUNe4g3GAPIBdy905iXV0JU5arQ6KinKHHVLA/7N33uFRVfn/f907mfRK77230JuCIKBgpQlKryLqfneXVdyfumJXBKWJUhTsCquLbbGthSogSOglJCSBFEhvk6n3/P4YZiZAgMlkZjIzua/n4eFkMrn3vN+fc86cOfcU64wpS1Ex2tq1bqwj40/437OQsgMJQBsO3SYi9ZkD9TuDJFH+E93X69P12gtv9Z/cNlNKlmViYmIuaxxtT3DLC7NNHfMXvHXijoqKikpNwayYeffIu6w5tAazMBMdHM2crnOY2H4i4drw6s6eispVeLovEIh9KLX/pKKiolI9fH/2e17Y8wJFxiJW3bqKozlHa+wJxmVlBn5cvpH6//uGvt/8m8QhQ687U0q+tNdzhVw8Ab+8CCe/vfRHWug8GvrMtZ6sF+CD4a7g9dP3Nm7c6K5L1Rhsy1BsT/xrMqoXDlQvHKheOAgUL5ILk3lqx1MczT0KQJ/6fXi4+8P0qt/rqie+FREoPrgD1QsH/u6F2oeqPP4ec3eiemFF9cGB6oWDmuRFoaGQl/a+xHdnvwOgZUxLtLKWuV3n1rgTjE1mCz+t20zw++toV5gFQMn+A8RNmULuW29d9f64KVOwGE0VD0oVpMGvr8Dhz0AoIMnQbiT0ngWthoLGrYvPvI4v1BG3OTh9+nR3XapGUVZWZp8qV9NRvXCgeuFA9cKBP3uhCIWPjn/EyoMrMVgMhAeFM7PLTCZ1mER0SOVmUfizD+5G9cKBP3sRyH0o2/4V7t6HBLDvVQH4/J4dntxbRZIkdDqdfU+1QNDkapxsS1ACSZMrcbqyfgSCJlfjBNbPh/LH3fu7poritPP8Tp79/Vkull1ElmTGtBnDg10fpH54fTQaDTO6zLCeYHxpUMqkmAjRhPi0JlfiBBK/fLoV45o3aZmdAkBxcDjpg0ZRu3Ez6vTrC3DF6XtTqDPvQeSQkMt1FF9A2vkG0v4NYLFu8E3LwSg9ZyF1uANJa32/dGkPOH+tT9drL/zu9L38/HxWrVpFUQXT4QoLC6/5u5qMLMs0btw44EftnUH1woHqhQPVCwf+7MX54vPM+mEWS/YvwWAxEF83nmVDljGv27xKD0j5sw/uRvXCgb97EUh9KGdO33PHiU2yLFNWVobZbAYC67Swyp5uJMsytWvXJjU1NWA0uRKnoqIiZNl6ilSgaHI1Tra2UD19z3riXuPGjQP29L1ifTEv7XmJh395mItlF2kY3pB/tPoHT/V7itrBte2aJLPEudRz1A6rjaHMQNa5LJ/V5EqcSkpK+ObDr/jmtnE0fuExWmanoNcEc2zASFiylNFvvkBQXBR5xcXEzZ5N2107abNrF2137SRm5kyKysrsmvKzUuHXl2Fld6S9a8BiRF83nuLbV8IDmzgX3ZPiMoPHNXnz9D3boL4nNDmD2/aUeuGFFzh8+DD//ve/K/z9hAkTiI+P56mnnnLH7byGJ/dEUBSFvLw8atWq5bcdaXeheuFA9cKB6oUDf/RCCMHniZ+z5I8llJnLCNGEMLXTVKZ3mk5saKxL1/RHHzyF6oUDT3vh6f2RArEPdaPT966VdvbpuhCCnJwcateujUaj8fkn0Z6eKZWbm0tsbCxarTYgNLkSJ7PZTF5eHnXq1LGXQ3/X5GqcgMvqRyBocjVOYB34j4mJsZ9U6O+abOmECwk8vftpUousA9K3Nb+N+fHzaRndskIdZrOZwsJC4uLikCTJJzW5UvYO7T5M8mtv0DlxPwAmScOZ7oPoMP0B2g8fiHRpsLp8Hs1mMzqdjsjISEd7YTGi7FtvnR1VZh3EEXXaI/Wdi9J1AlJodMC0EeXjdOXnqTs1ef30vS+++ILXX3/9mr+fN28ejz32mF91qMpjC6A7KyKAyWSyH1fqD4XWUxXRYrFgMpns6UDQVJU4GQyGSpU3f9DkSpwADAYDtrHzQNBUlU5V+fbC1zVdLLvIs78/y670XQB0qNWBh7o9xJCmQ9DImirFyVY/fDFO3ix7YH0SZbt+IGhyNS2EwGQyeUyTpwnkPpTNU9v/VU3bTvOx9Rds7aGvn27kjKbKpm06FMX6hDqQNFWUdkaT7fMykDS5kl9FUS6rH4Ggydn0lflVFAWTyYRGo7lue+FPmkyKiXWH1rH+8HoswkKt0FrM6zaPsW3HEhoUan9vRZpMJhOSJNmv7yuanE2X13TyyBmOvPQ6nQ5tpzMCBYnEjn1oOmki9947Ak3w5ftD2e9v1KHRBBEp65FEKJLZBEn/g++fRC46b31PTFPoMwepx1SIqH3Z8rJAq09Xfp66W5MzuO1xYlJSEm3btr3m79u2bVupKVzVjTemnxuNRho2bGhPg+9P77uRJlen9509e5aGDRva04GgqSrTz8HaIASKpqpMP1cURZ1+fmnKecOGDX1++rkQgg/++IAxX41hV/ougqQgJrWZxNvD36a5qTlGg7FKcTIajZSVlSHLsk/GyZtlT5ZlgoODyc7ODhhNrsapuLiYhg0b2tOe0ORJAq0P5Q1kWaZhw4aXdZ5rKqoXVlQfHKheOAg0L5ILkpmydQprDq3BIiwMbDSQN299k0kdJ102IFURgeJFalI6m2b+A+P9Y+l6aBsaBGdadqVg4bPc+ek6et13x1UDUnbMeti1HGlJW+SlbZGWtIVdy6D5TRAcDhF1YfBCmPUD3Pw3iKjtVW3VgS+UC7ct34uNjeX777+nf//+Ff5+z549jBw50t6J9Bc8Of0cIDc3l7i4OIKCgnz+SbQnn66bzWby8/OpXdta8QNBk6txMpvN5OTkUK9ePXs59HdNrsYJrAPCdevWVaefX9Fe+KKmPH0eL+19if+l/Q+A1jGtmR8/n2HNhhGkCXJLnCwWC9nZ2dSrVw9JknwuTt4sewDZ2dnUrl2boKCggNDkaloIQW5uLrVq1bI/DXenJmenn7tKIPahPL3kUVEUcnJyqFOnjt9/waoqqhdWVB8cqF44CBQvFKHwyYlPWP7ncgwWAxHaCGZ3mc2kjpOI0EY4dw0/9+JCZi6/vbSSNr99RbjZOms+tWEbgsfdx8Dp4wiNuoEPRh3sWg7bFl/9u8GPQ8e7ITgSard2f+Z9GE+WC2f7Am5bvtejRw++/PLLa3aotmzZQo8ePdx1O69jC1D5QFUlbfuCbUtfbzpp+XR1T++7kSZX0lfqsF0zkDRVNk7uLm++oMmV/Nq+JN7oOv6kydl0RdPPbenrtRfVpenXc7/y3J7nyNfno5E0jGs7jge7PUj9iPrX1ORsWm0jKtZkG3TxxOdTdWlyNV1+kKqia3pr+rmrBHofSkVFRUXFdbJKs3h619PszdwLQLc63Xik+yMMaDTA/pkXyBQUlvLTq2/RdOtmuhlKAEiv3QTl3vEMmjORiFqxzl1IEwR711b8u33r4ZaFoAl2T6ZVKoXbBqUeffRR7r//fpo0acL8+fPtnTiLxcJbb73FsmXL+OSTT9x1u4BAluXLZsPUZFQvHKheOFC9cOCrXhQaCnl136t8m/wtAM2imvFw94e5rcVtaOVrTJ2uAr7qQ3WgeuHA370I5D6UbcDQ3TP5ZNl64pztC5kvz+TzxuzEunXr2u8bKJoqGyfA/qQ/UDRVJU516tSx149A0eRqnOrVq4fFYsG2QMhfNAH89+x/eXnvy5SYSgjRhDC5/WRmdJlBXFhcpeMkhKBevXr2130tTleWvZJSPT+tfJ86n39AF10+ABej61Iycgw3z59MdINKtHsFqQiNFklfQIXoC0BfhBJWq8a0EeUfbl6rvfDWnpxum581btw4Fi5cyP/93/9Rq1YtevToQY8ePahVqxZ/+9vfWLBgAePHj3fX7QICRVHIzMysVMACFdULB6oXDlQvHPiiF7vSdzH267F8m/wtEhL3tr6Xt4e/zZ2t7vTIgBT4pg/VheqFA3/3IpD6UN7Yk1Ov16MoCgkJCfa9wnx5zzNP7+OmKAqpqakkJycHjCZX4pSXl8fx48dRFCVgNLkaJ0VROHbsGPn5+QGjydU46fV6MjMzOX36tF9pOpx4mL/98jee3PkkJaYSWke35tVBr3JH9B2Ey+EuxSk5OZnMzExKSkp8Lk7ly55Ob+CbNz9hz62j6PjBCurq8skLiyHx7im0/WAjbafcSUzDek7FqejccXSfzoR3RyCFxcG1Tn8OjYXQaLKzs2tEG1Fek6IoHDlyxL6vcXXsyem2PaVs7Nu3j48//pgzZ84ghKBdu3ZMmjSJvn37uvM2XsOTeyLYPjTV47xVL8qjeuFA9cKBL3mhM+lYun8p/z5tPb6+QUQDHu7+MHe1vAutxjODUTZ8yYfqRvXCgae98PT+SDYCqQ/lyT05bU+Kyx9h7etPoj35dF2SJHJzc4mNjUWr1QaEJlf35MzLy6NOnTr2cujvmlyNE3DNI979VZOrcQLIz88nJibGZ/fkvFLHjvQdLNq9iJyyHDSShrFtxvJgtwdpENmgSnEym80UFhYSFxdnnyHjK3Gy3h9++vgbLGvfpmVOCgAlweGkDxpJrwcn0zS+k/NxKrmIvHMZYv+7SBbrQIqY8R2c/Q2pgj2lxC1PIN30N5RLm8UHehtRXtOVn6fu1OTsnpxuH5QKNLzVEVVRUVHxB/Zn7efpXU+TXmJ9QjOyxUgein+I1rE1a1NIlZqF2heoPKpnKioqKpVDZ9KxZP8SPj/9OQCNIxvzSPdHGNlypMdmoPsCQgh2fLudvBUraH/+BAD6oGBS+w6j29zJtOzf07607Iboi+D3N+H31WC07j9Fox7Qdy50GguyBDvesO4tpS+wzpDqNw8GLYAbnF6oUnm8utF5WloazZo1c/r96enpNG7c2B239msUxbrcoLqPYPQFVC8cqF44UL1wUN1e6M16Vh1cxYfHP0QgqBNWh4fiH2J0m9GEaEK8lo/q9sGXUL1w4M9eqH0o1/DnmLsb1Qsrqg8OVC8c+IsXCRcTeHLnk5wrti7RGtVyFPPj59MypqXb7uGLXvyx4yApi1+ny5kD1AVMkoak7oPoMPMB7h1+M5Kz+TTp4Y93YMfrUGZdqkbd9tBnLnSdAGExjvfe9DfE4McQZYVIYTFIFlONHpDyhXLhlrv26dOHefPm8ccff1zzPYWFhaxfv54uXbrwxRdfuOO2AUFYWFh1Z8FnUL1woHrhQPXCQXV5cTTnKBO+ncAHxz9AIBjadChvD3ubie0nenVAyoZaJhyoXjjwVy/UPpTr+GvMPYHqhRXVBweqFw582QuTxcSKP1cw/fvpnCs+R+3Q2jzd72leuOkFtw5I2fAVL44lnOazCfMIe3AKXc4cQEHidMd+mF94jXs/WEnH2wY7NyBlMcOB92FVT/jxKeuAVGwzGP4czPjOOkOq/IAUQHA4Qgqi2BKMkIIgOMIzIv2I6i4Xblm+l5uby0svvcSGDRsIDQ2lV69eNGrUiNDQUPLz8zl+/DjHjh2jZ8+e/Otf/+KOO+5wR969gjr9XEVFpaZisphYc3gN7x55F4uwEBsSy4PdHmR8u/GEBflGp0ZFxRt4si8QqH0otf+koqKicn0S8xN5cueTnMw7CcCgxoN4OP5hutTtUs058xzJZ9LZ++IbdNr3I8GKGYCklt2oPWE8vR+4B22okw87FQVOfAW/vAS51s21iagHvWZA75kQ3cgzAlQqhbN9AbfuKVVWVsZ///tfdu7cSWpqKmVlZdSpU4cePXpw++2306WL9yvYqVOnmDhx4mU/f/rpp4wePdqpv/f0Rue2afi+MoWyulC9cKB64UD1woG3vTidf5qndj5l7ygNbDSQ+d3n071ud4/f+3qoZcKB6oUDT3vhjQEWX+xDVQVPe6aWfweqF1ZUHxyoXjjwRS8sioWPTnzEij9XYFJMRGojmdt1LhM7TCRC67lZO9XpRWZGLr+9tJJ2274i3GwAILVhG0LH3ceA6WMJiYp07kJCQNIv8PPzkJlgfS00BnpMgd6zobZze5z6YrmoLjzphVf3lLIRFhbG+PHjferY4vbt25OQkABASUkJLVq0YMSIEdWbqUtIkkRUVJTzG7cFMKoXDlQvHKheOPCWFxbFwsZjG1mdsBqzYiZSG8mcrnO4v8P9Hu0oOYtaJhyoXjgIBC98sQ/lywRCzN2F6oUV1QcHqhcOfM2L9JJ0ntr5FAcuHACge93uPNrjUfo26OvxPFaHF/kFJfz46hqafbeJ7gbrxuMZtZug3DueQbMnEFE7zvmLnfsDfn4OUnZYf9aGQbeJ1sGoBl2hErp8rVxUJ77ghVsHpXydr7/+mmHDhhERUf1frMBaAGJjY6s7Gz6B6oUD1QsHqhcOvOFFSmEKT+16isPZhwHoVa8XD3d/mD4N+vjMh7ZaJhyoXjhQvah5qDF3oHphRfXBgeqFA1/xQgjBl2e+ZPEfiyk1lRKiCWFqp6lM7zSd2FDv5M+bXpToDHy/fCN1P/+Abrp8AC5G10V3xxhuemgy0Q3qOX+xiyfg5xfg1H+tP8ta6Dwa+syBJn3Bhdk9vlIufAFf8MLn56pt376du+++m0aNGiFJEl9++eVV71m9ejUtWrQgNDSUfv36sW/fvgqvtXnz5suW8lU3iqKQmpqKoijVnZVqR/XCgeqFA9ULB570QhEKH5/4mPu+uY/D2YcJCwrjoW4PsfLWlfRt6Pknd5VBLRMOVC8cqF7UPNSYO1C9sKL64ED1woEveJFblstff/0rz+x+hlJTKe3i2rF48GL+0uMvXhuQAu94oTeZ+WrVx/w+dCSdP1hBPV0+BWExJN09lc6ffsioZ//u/IBUfipseQjeGmAdkJJkaH8HPPAZjF4Dzfq7NCAFvlEufAVf8MLnZ0qVlpYSHx/PrFmzGDt27FW/37RpEwsWLGDNmjX069eP5cuXc/vtt3Pq1Cnq1XMU+KKiInbv3s1nn33mzexfF0mSiIuL86kvfNWF6oUD1QsHqhcOPOVFRkkGz+x6hr1ZewHoWqcr8+Pnc3Pjm33Sd7VMOFC9cCBJEnXr1lW98EFsnVzb/7IsXzctSRKSJF0zbbFYkGUZSZKIiXGcqGR73Xav8mmNRoMQ4pppIQSyLF8z7Wze3aGpovSNNMmyTGxsrD0dCJpciZMQgpiYGHteAkGTq3G6sn4EgiZX42T7rLS9x9uafjv3G8/teY48fR4aScN97e5jVpdZ1A+vjyx5v+zFxcVd9n53xclktvDTJ1sR69+iXXYKACXBYWQMGkXfh6YwoGtHFEVBCHFjTboc2LEU9m9EUkwAiBaDkfrMRrQbhSIHVTlOrrQXgdRGXKnpWu1FVTU5i8/PlBo1ahQvvvgiY8aMqfD3b7zxBnPnzmXmzJl06tSJNWvWEB4ezoYNGy5731dffcVtt91GaGjode9nMBgoKiq67B9c3qlyJm3bP/5aaYvFAkB0dPRVr9sK2pVp4Lpp2/2vlXY271XRdL309TQpimLf/CxQNLkaJyEEkZGR9oYuEDS5GidJkoiMdGx8GAiaXI0TXN5eVFWTxWJhS+IWxn49lr1ZewnRhDCz80xWDV3FoCaDXNLqjbIHEBERgSRJPhknb5Y9W/0ony9/1+RK2qIvBcVEmGL932Io9YgmFedYvXo1nTp1ok+fPgBcvHgRgJycHHJycgC4cOECeXl5AGRmZlJQUABAeno6hYWFAJw7d47i4mIAUlJSKC21xvXs2bPo9XokSeLixYuYTNYvLImJiZjNZhRFITExEUVRMJvNJCZaT2UyGo0kJSUBoNfrOXv2LGB9+JmSkgJAcXEx586dA6CwsJD09HQACgoKyMzMBCAvL48LFy54RBNAUlISRqOxUpokSSI4ONiuIxA0uRKnwsJCSktLkSQpYDS5GidJkiguLrZ/jwkETa7GyWQyER0dzZkzZ7yqqcRYwhO/PsFff/srefo8Goc35l/x/2Jh34UohUq1lL2UlBSio6PR6XRui1Nubi6/fL2Nb24bT8uXF9IqOwW9JpiTA26n3tr1xD8+l4jmjZ3TpC8k/4t/wMruSPvWISkmRKNemO95i1N9XobOozEquCVO+fn5lJWVIUlSjWwjymuSJInCwkJKSko8oskphB8BiC1btth/NhgMQqPRXPaaEEJMmzZN3HPPPZe9dtddd4mvv/76hvdYtGiRAK76d+rUKSGEEBcuXBAXLlwQQgiRkZEhsrOzhRBCnD9/XuTm5gohhEhLSxP5+flCCCFSUlJEYWGhEEKIpKQkUVxcLIQQIjExUZSUlIikpCRx8uRJodfrhRBCnDhxQhiNRmE2m8WJEyeE2WwWRqNRnDhxQgghhF6vt+dFp9OJxMREIYQQxcXFIikpSQghRGFhoUhJSRFCCJGfny/S0tKEEELk5uaK8+fPCyGEyM7OFhkZGW7XpNPphBBCnDp1qlKaTp48KZKSkkRJSUnAaHI1TtnZ2eLAgQPCYrEEjCZX42SxWMT+/fvt+gJBk6tx0ul0IikpSRw/frzKmpIuJImZX88UXd7rIrq810Xc+/m94n+p/xPZOdk+X59KSkrEnj17hMVi8ck4ebPsWSwWcejQIZGenh4wmioTp8LCQqEYy4Tl55eEeKWZEIuihXilmbD88pJQjGUiIyPDbZoKCwsFYPdL5cbYPLOVN4vFIiwWyw3TiqJcN202m4WiKMJisYjExERhNpsve11RlKvSQojrpm33v1ba2bxXVdO10jfSZLFYxJkzZ4TRaAwYTa7EyWQyiTNnztjzGgiaXI3TlfUjEDS5Giez2SySkpKE0Wj0mqZ9GfvE7Z/fLrq810V0fa+r+Of2f4rkvORqL3tGo1EkJSXZ242qxmn3L/vFZ3dOFsfbdxDH23cQhzp0Fl/eP08c/+5XYalM2SsrFsqO5Y7P8kXRQnmzrzDvXS+UskKPxMmV9iKQ2ojyeb9ee1FVTc72nyQhLj0udBPvv/8+derU4c477wRg4cKFrFu3jk6dOvHpp5/SvHlzl68tSRJbtmxh9OjRAGRkZNC4cWN2797NgAED7O9buHAh27ZtY+9e63KUwsJC2rVrx7lz5wgODr7uPQwGAwaDwf5zUVERTZs2JTc3l1q1amE2mwEICgq6blqWZWRZvmbaaDSi0WgoKytDq9Wi1WrtrwcFWVdVms3my9LBwcH2UciK0oqiEBQUdM20s3mviqagoKBrpq+nyWQyYTKZCAsLw2KxBIQmV+NkMpkoLS0lJibG/oTe3zW5GieNRkNhYSFRUVFoNJqA0ORqnK5sL1zV9NO5n3hxz4sUGYsIkoO4r+19zOg0g0bRjfyiPlksFoqLi4mJibHPtPGlOHmz7NnqR0REBFqtNiA0VSpt1iPvXom8fTFXotzyBMqA/0MODneLJr1e79SRxlXFk30ob+PsMdCuIoSgtLTUPnOyJqN6YUX1wYHqhQNvemG0GFl1cBXvH3sfgaBuWF0ejn+Yu9vcTYgmxKP3dgZ3eXHkYCJHXllKtyM70QgFBYnkjn1oOnki3e4dgXypn3pDLCY4+BFsWwzF1tk+xDa3bmDeYwqE13I5jzdCrSMOPOmFs30Bty/fe/nllwkLCwPg999/Z/Xq1bz22mvUqVOHv//97+6+nVPExMRw4cKFGw5IAYSEhBAdHc2HH35I//79GTZsGIB9+lteXp59+lt2drZ9+tuFCxfsU2QzMzPt6fT0dPtUuLS0NHQ6nT1tNBqJjIwkNTXVPv08OTnZvoQgOTnZvnQgOTkZAJPJZJ/GZzAYSEtLA0Cn09nTJSUl9il9RUVF9il9RUVF9il9BQUFZGdnu12TbUAvJSWlUppSU1OJjIzEaDQGjCZX41RcXGyffh4omlyNk236uW2KbCBocjVOZrOZyMhIzp4965KmjPwMHv3hURZuX0iRsYhm4c14ZdArzGs3D0uhpVo0uRIno9FITk4OkiT5ZJy8WfYkScJsNnvk88nX61Nubi4abTDyvrVUhLx3LRptsFs1eQNf7EP5KrblqzX9ywSoXthQfXCgeuHAW16cyjvFxG8n8t6x9xAIhjQZwuphqxnffrxPDEhB1b1ITDzPxzP+gTJ5LD0Ob0cjFJJbdqXk/z3HqE/X0X38Hc4NSCkKHPkcVveFb/9mHZCKrA+3PAGzfoSb/s+jA1Kg1pHy+IIXbp8pFR4ezsmTJ2nWrBlPPPEEmZmZfPDBBxw7dowhQ4bYO5qucOVMKaPRSHh4OJ9//rn9NYDp06dTUFDAV199VUU1jtG9/Px8+yaS4J6N0IQQpKSk0KxZM7Rard9shHY9Ta5uhGYymUhLS6NFixZIkhQQmlyNk+1LUKtWreyNg79rcjVOQgiSkpJo1aqVfWaFv2tyNU5XtheV0bQjYwfP7n6WXH0usiQzpvUY5nadS+Poxn5Xn8xmM8nJybRu3doeE1+KkzfLnm0gpUWLFmi12oDQVKnY6HKQlrblWojHkyC8tls02WavenqmlCf7UN7G0zOlLBYLZ8+epWXLlmg0Grdf359QvbCi+uBA9cKBp72wKBY2HtvI6oTVmBUz0cHRzO02lwntJhCuDXf7/aqCq16kZ+Ty20srab/tayLM1v2F0hq2IWz8ffSfNpbgqMgbXOESQsCZ/8HPz0HWEetrobHQcyr0mg21W1ZSkeuodcSBJ71wti/g9tP3IiMjyc3NpVmzZvz4448sWLAAgNDQUMrKytx6r+DgYHr16sXPP/9sH5RSFIWff/6ZRx991K338gSyLNO4cWN7J7gmU94LN4+T+h2yLNOoUSPVC9Q6Uh5XvCg2FrN432K+Tv4agMaRjXmk+yPc3uJ2giSfP3y1QtQy4aB8W1GTSE8+Qc6vb9Nt6ivWzqy+4Oo3hcZCqOcGjzyFN/tQ/o7aFjhQvbCi+uBA9cKBJ704V3SOp3Y9xcGLBwHoVb8Xj3R/hN71e/vkDJzKepGbX8KPr75Ni+8309NgnVmdUbsJ3DueQXMmEF4rzvmbp+21Dkal7rL+rI2A+InQezY06FJZKVVGrSMOfMELt995xIgRzJkzhzlz5nD69GnuuOMOAI4dO0aLFi0qfb2SkhISEhJISEgArDvAJyQk2JcCLFiwgPXr1/P+++9z4sQJ5s+fT2lpKTNnzqySDm+cHmMwGAgLCyM5Odlvdue/kSZXd+dPTk4mLCwMg8EQMJqqcnqM7eSUQNFUldNj8vLy1NNjLp0eExYW5vTpMXsy9zD267F8nfw1EhJ3NLuD5zs+z92t70ZfqvcJTa7EyWAwkJmZiSRJPhknb5Y9SZIoKyvz2Olm1aHpenH6c+f37H99DA3eH0D8ufeRkn9D9J1LRSj95mEy6L1/ekwVcXcfKpCRJImwsDCf/OLnbVQvrKg+OFC9cOAJL4QQfH76c8Z9M46DFw8SGhTKQ90eYvmQ5fRp0MdnfXfWi2Kdgc0vruHosNvo/tUGYg0lZEfXJe3+B+n7+ccMWzjP+QGprKPwyUTYcJt1QEqjhW4TYdpXcMfr1TIgBWodKY8veOH25XsFBQU8/fTTnDt3jvnz5zNy5EgAFi1aRHBwME899VSlrvfbb78xdOjQq16fPn067733HgBvvvkmS5YsISsri+7du7Ny5Ur69etXZS3g+eV75Zde+OLyiMpqcnV5xJVL1gJBU1WW7yUnJ9OmTRt1+Z4QnDlzhtatW6vL965oL66lqdRYyrIDy9h0ehMA9cPr83D3h7mz5Z1oZa1PaXIlTmazmTNnztC2bVt7/v1dU1WW7505c4ZWrVoF7PI9i9nMiT3foexcQTf9H9g4GBSPZuDDdB00GrHzDeS9a60zpkJjUfrNQ7p5AUIT7DZN3lq+5+4+VHXijeV7SUlJtG7dWl16oXoBqD6UR/XCgbu9yCnLYdHuRWw/vx2ADrU68HD3h7mlyS3Ikm/PurmRF2VGM9+v3UTkR+/QpDALgIKwGPJH3E3/h6ZQq1UlDtvIOwu/vgxH/g0IkGRof4d1E/OWg0Gu3nKp1hEHnvTC2b6A2welAg1PDkpJkoTJZEKj0aDRaALuS3RlOv0WiwWLxYJWq0UIERCaXI2TxWLBaDQSGhpqX77n75pcjZMkSej1ekJCQq6rz580uRqnK9uLijQdzj3MUzuf4lyxdSbKiGYjeKjbQ7Sr3c4nNbkSJ0VRMBgMhIaGAgSEJlfLnq1+BAcH273xd022tGKxcPiXz4j4YxXtzacAsAiJP0IHYOl8H92HjiMsIsraZupLrRur6osgNBrFbEQTEulWTd4alAokvHH6ntFoJDg42P4Ap6aiemFF9cGB6oUDd3rxU+pPPP/78xQYCgiSg5jYbiKzu86mbnhdN+XWswgh7CfNlvfCbFH44eOtiHWraZ2TAkBpcBiZg0fR96Gp1O/SwfmbFGfB9iVw4D1QrKfm0moo9J4F7UdZZ0r5AGodceBJL6rt9D2AHTt2MGXKFAYOHGifmv/hhx+yc+dOT9zOI3hr+V5ISIi6fO/S8r2QkBB1+d6ldF5eHpKkLt+TJImcnBx1+d6l5XshISEVLt8rNZSy6OdFTP9uOueKzxGrjeXJfk/yr97/Qs6XfVaTq8v30tPTkSR1+Z7Ng0Bavmc06Nm16XXSX46n5++P0t58CoPQsiPiNnb2Xk3z6e9y0z2zKCgqsWvKyM6juFSPFFGHjKxsSg2KRzR5i0DoQ3kDSZIICQmp8V8mQPXChuqDA9ULB+7wothYzJM7nmTBbwsoMBTQPKo5r9z8Co/1ecxvBqRMpTqE2QxFRQiz2fqzEPz85Ta+vm08rV5+nNY5Keg1wSQOHEW9deu5a9WLzg9IleXD/56FFd3hj3esA1JN+sDYdfDAZ9DpHp8ZkAK1jpTHF7xw+0ypL774gqlTpzJ58mQ+/PBDjh8/TqtWrXjzzTfZunUrW7dudeftPI6nl++VX3oRaDM7KvMk+sola4GgydU4mUwmzpw5Q7t27eyNg79rcjVOQghOnz5N27Zt1eV7V7QXNh0n80/y1K6nSCqwfnEe3HgwD8U/RNe6XX1ekytxMpvNnD59mvbt29vz7++aXI2TrX60adPG75fvFRXkceyblbROep96WAfTikQ4B2JHUrvf/XTuOwzp0v0qnFmlKJct9XW3Jm/NlAqkPpQ3lu8lJibStm1bdemF6gWg+lAe1QsHVfVib+Zent71NFmlWUhI3NP6HubFz6NpVFMP5NYzKAYDOWvXkf/RRyhFRcjR0cRNmULt6dNIeWASxuRkzJKGsz1upsOMSbQdfrP9M/eGGHWwdw3sWg5660Mv6nWCvnOh6wQIcfJkPi+j1hEHnvSi2pbv9ejRg7///e9MmzaNqKgoDh06RKtWrTh48CCjRo0iKyvLnbfzOJ7sVF1rCmVNRPXCgeqFA9ULB1d6YVJMvHP4HdYdXodZWI8gfrDrg9zX/j6fO4LYnahlwkEgeJF74Tynv15K5/TNRGOd1ZRNLIfr3kPzwZNp3bmvUx1jT3vh6QEWG77Uhzp16hQTJ0687OdPP/3UftrxjfDG8j1/L//uQvXCiuqDA9ULB656oTfrWfHnCj468REA9cLr8Uj8I9zV+i6CNcGeyq7bMZXqyH/3XXLfeuuq39WZP5+Qzp3YtvpDWkydSOe7hiMHO6nNYoI/34dtS6Dk0mdTXEvrnlHdJ0N4JU7mqwbUOuLAk1442xdw+5ngp06dYvDgwVe9HhMTY59q74/Ynsq680m0JEnW/TAsFnVPqUvvCSRNVY1TZcqbv2iqbNrWMAohAkaTK3HSmXRoZS3F5mKi5CiKjEW8tPclfkr9CYC+DfrySLdH6Nmwp70++bqmqsTJ9iwlkDS5Eidb/bD9rT9pyko9Tdp/F9M9+xsGSCYA0mhIYuPRtL11CkNbdrLnV1y6l7P6bPl1pyZv4Ut9qPbt29tPPi4pKaFFixaMGDHCq3m4EbZ4qahe2FB9cKB64aCyXhzPPc7/2/H/SC5MBuDWprfySPdHaFernSey51E0wVryP/qowt/lffwxbXfuYNTNgwgKDXHugooCR7+AX1+E/BTra1ENoNcs6DUDouq7Jd/eQK0jDqrbC7ffvUGDBpw5c+aq13fu3EmrVq3cfTuP4Y09pXQ6HYmJiQG7B05lNSUmJqLT6QJKkytxys/P5+DBgyiKEjCaXI2Toij8+eefdn2BoKkycTIYDBgsBjYe3ciQzUO4ZfMtDNk8hE9PfsrT/Z+mU1wnHo1/lKU3LSW8MNwvNFU1Tjqdjv3799uXVAWCJlfjpCgKR44csc+e8QdNx/dvY9/SMdR7bwD9c/5DqGTilNyaH5o/Rsm4Txk291XCYxpUOk4FBQUkJiaSlpbmMU3ewFf7UF9//TXDhg0jIiKi2vJwJeVjVtNRvbCi+uBA9cJBZbwwK2bWHlrL5P9OJrkwmZiQGBb2Wcgrg17xywEpAEthEcqlvVmvRCkqwlJc4tyAlBBw+gdYOwj+M8c6IBUWBwP/D2b9AEOe8KsBKbWOOPAFL9y+fO+VV17ho48+YsOGDYwYMYKtW7eSmprK3//+d/71r3/xl7/8xZ238ziePn3P9tRYnSllsV/H5oe/a3I1ThaLBUVRCAoKss8I8XdNrsZJkiTMZjMajea6+vxJU2XiZFSMbDi6gTWH11zVNs3rNo9xbcdRP7y+/W/9QVNV42QbNLDtqxUImqoyU8psNiPLsk/PlFIsFk7s/QHz9jeI1/9hL8MJQd0oaDuOHiMmExVbu0pxspUF22vu1uStPaXc2Yfavn07S5Ys4cCBA2RmZrJly5arlt6tXr2aJUuWkJWVRXx8PKtWraJv375XXWv06NFMmzaNsWPHOn1/byzfs8XMNmuwpqJ6YUX1wYHqhQNnvUgpTOGpnU9xOOcwcGkWevwj9Kjfwy89vJBbxJ63PuDux2aTeMuQCgem5Oho2u7aaT3B9nqk7ob/PQfn9lh/1kZA/P3WpXr1O3kg955HrSMOPOlFtS3f++c//4miKAwbNgydTsfgwYMJCQnhscce87sBqfLYOqrlp7ZVJV1+MKb8+s3ym4tVlJYk6Zpp2zWulXZX3q+nyZW0TYdtLavtmoGgqaK0M5rKf+EKFE2u5Nf2JfNG1/EnTc6mNRoNQQTxyclPqIhPT37KvG7z7H/jL5pcSVdWhz9qciVO5QdhfFGTBBz88SPC962is/kkABYhsT90AObO4+k5bAJhEVFciSt5r+jz1N2avIE7+1ClpaXEx8cza9asCgeTNm3axIIFC1izZg39+vVj+fLl3H777Zw6dYp69erZ31dUVMTu3bv57LPPqqzP3ZQfSKzpqF5YUX1woHrh4HpeCCHYdGoTrx94Hb1ZT3hQODM6z2BSx0nEhMR4OadVp6CojK3LNtD4q49pp8undGBH4iZPJvftt696b9yUKViMpmsPSmUehl9egMQfrT9rgqHLOOtgVONe4OeDOWodcVDdXrh9ppQNo9HImTNnKCkpoVOnTkRG+ubO+zdCPX3PO0/X1dP31NP3rjXzoSafvpdvzGfo5qEVtExWtk3cRlxInF9pqmqc1NP3rq4fvnb6nsVsImHreuofWUNz5TwABqHlj8ghaLuNo9uguwkLj3RrnBQlME7fs+HuPpQkSVfNlOrXrx99+vThzTffBKyamzZtyl/+8hf++c9/2t/34Ycf8sMPP/DRNfYksWEwGDAYDPafi4qKaNq0qUf6T7b3njp1inbt2hEUFOT37X1VyifA6dOnad26NcHBwQGhSe0/qf0nd8Xpyu9b5TVd1F3kmV3PsDtzNwCda3Xm4R4Pc1Ojm0Dgs5oqilNxmYHv3t5ErU0baFJk3XamIDwGzcy59J47mZx16686fa/OvAeRLrUZl2nKP4v45UWkY/+xlidJhvZ3IvWZg9L8JpA1XtHkybLnSnvh65pcLXuKolyzvfBW/8ntw2GzZs2iuLiY4OBgOnXqRN++fYmMjKS0tJRZs2a5+3Yewxt7SplMJjp06EBKSkrA7IHj6p4dKSkpdOjQAZPJFDCaXI1TcXEx0dHRaDSagNHkapw0Gg2RkZGUlJQEjCZn4mRRLKzdu5aIoAiigytuwKODo4nURvqNJnfFyWQyERwcjEajCRhNrsZJo9FQt25du47q1pSfm82v7/w/8l/pRN9DT9NcOU+xCOOX6NHsHbiOAX//jI4D7uRidq7b41RSUkKHDh3IyMjw6z2lvNWHMhqNHDhwgOHDh9tfk2WZ4cOH8/vvv1/23s2bN192Ct+1eOWVV4iJibH/a9rUely6J/pPer3eOpv00mAU+G97X14TuFY+NRoNLVq0IC0tLWA0uRIntf+k9p8q0mSxWOjQoQPJycmXafou+TvGfj2W3Zm70cpaprSbwhOtnmBwk8EYDUaf1lQ+TqV6I/9Z/x+2D7+HbutfpUnRRUqCwzl723iabXyX2NsHIYeGEjdrFm137aTNrl203bWTmBkzkENCLtNUlH4a3eYHYXVf+4AUrW8l/453yBr0KrQeQk5efkDUp8LCQmJjY9FoNDWyjSivSaPREB4ejk6n84gmZ3D7TCmNRkNmZuZlU7/BakyDBg0wm83uvJ3H8fSeUiaTCY1Gg0aj7illsVjQarUIoe4pZTQaCQ0NxVY9/V2Tq3GSJAm9Xk9ISMh19fmTphvFKakwiUW7F3Ek5wgrh67kWO4x1h5ee1XbNL/bfGZ0mUFYUJjPa3JnnBRFwWAwEBoaCqh7Sun1evsgXXVpyrlwnqRvl9Hx/GfEYO3EZBPLobp302LwFFp16gOS5NE4gXXA0rYE3N1x8tZMKU/1oSTp8plSGRkZNG7cmN27dzNgwAD7+xYuXMi2bdvYu3cvYO34tmvXjnPnzhF8g2PCvT1TCrjs88Ef23t3lU9ZljEYDAQFBdn3o/R3TWr/Se0/uStOknT5/ouFhkJe2vsS36d8D0DL6JY82v1RhjYbiozsF5pkWUYRsHXTT5jWraZj5mlrmxgUTEb/4XSbM4km/XpeFTPbzDHbsnS7Dl0e8u4ViL1rkczWAQjRtB+i9xzkTvegaIIDrj650l74uiZXyx5wzfbCW/0nt+0pVVRUZDeouLjY/oUBwGKxsHXr1qs6Wf6EzWjb/1VNazQaLBYLqamptG7d2l4gvLEPiafSVdmzQ5IkuxeBosnVOIF1BL68F/6uydX8WiwWuxeBoulaaZNiYuPRjaw5tAaTYiIsKIz0knTmdJ2DjMzHJz+myFhEdHA0kztMZna32YRoHKel+KKmK9PuiJMQ4rL6EQiaXI2Ts/XDU5oyUk5x7tvFdMv+hv6S9clZGg043XgM7W+dwvDWXbgST8Wpos9Td8fJk/hqHyomJsb+1PVGhISEEBLi5JHibkBRFFJTU2nTps1lsa6J2Lxo2bJldWelWlEUhbS0NPtWEDUZmxetW7eu0fXDoBjQylqKzEXEhMSQVZrFkzueZP/F/ciSzD2t7+HBLg/SNKap/Uu0ryOE4Ofvfidn5UriUw4BYJI1pPUcTOeZk4gfMgCB9fPLNthifZMOjUaLKCtACo8FiwmQYM9bSLtWgKEICRD1uyD1fRDReSwER4Asgx/4UlnU9sKBL7QXbrtrbGwstWrVQpIk2rVrR1xcnP1fnTp1mDVrFo888oi7bhcQaDQa2rVr55UOr6+jeuFA9cJBTfHiZN5JJv13EqsOrsKkmOhZryfLhyxncsfJhAaFMrPLTH6b8BvbJm7jtwm/MbPLzMsGpGoSNaVMOEN1eXH22F72vzGOehv70y/nC8IkI6flVvzS6nFC5/7A8Lmv0rSCASlP4u/lwtt9qDp16qDRaK4acLpw4QINGjSo0rW9sf2BbfmebUASfH95hDOawPXle82aNVOX7xUXExkZiUajLt/TaKzLcWrq8j2DwYDBYmDj0Y0M2TyEof8eypDNQ/gi8QteH/o6vev05rn+z/HPXv+kNLPULzSVlZWxa+dhPh4zm4YL5hCfcggLEsld+qN95XVaP/kozYYMwHIpZjZN586dA7Medq1AWtIW+fW2SEvawq7lYC5DOrwJyVAEtVpTMuQFzo94F3pNp0BnCrg24srle7blvoGiqSrL90JDQwNj+d62bdsQQnDrrbfyxRdfUKtWLfvvgoODad68OY0aNXLHrbyKp5fvGQwGtFqt/Ym/r0/v89SURYvFgslkIiQkxD6t1N81VWX6uV6vJzw8XJ1+LknodDrCwsKuq8+fNJXXYVJMrD20lnePvotFWIjURjK903QmdZxERFDEZTokScJoNBIUFGT/4u2Lmjxd9hRFoaysjPDwcEBdvqfT6QgNDbV74ylNCMHxPd9j3rGM+LJ92EgI6kZ+23H0GD6JmFp1q63sgXX5WHBwsD3v7oyTp5fveboPJUkVb3Tet29fVq1aBVg1N2vWjEcfffSyjc5dxZP9J1ucyn8++Hp778l2RJZlysrKCA4OrvHL99T+U83oP90oTkbFyIajG1hzeM2VTRPzus3j/vb3Uzustt9o2v9nIsdeW0GPQ7+hFdaB+JQ23Wn0wAS6jBuFHBJyzThh1CHtXgHbFl/lBYMfty7TSz+I3HsmIqJOQLcR5fPoSnvh65pcjRNwzfbC7zY6v+WWWxgyZAhJSUmMHj2aW265xf5vwIABfjcg5Y0nfTqdjvT0dL8aSb2RpqqMpKanp6PT6QJKkytxys/P5+TJkyiKEjCaXI2ToiicOHHCri8QNNni9HvK70z8diLrjqzDIiz0bdCX5zo9x+TWk4kOib5Kk16v5/z585w+fdpnNXmj7Ol0Oo4cOWL/oAsETa7GSVGsJ85lZWV5TFNi4mkO/PAhp14eSOcfHyC+bB8WIbFb258d3ZfS6tEvaRg/ktja9aq17BUUFJCenk5aWppfbnTuiT5USUkJCQkJJCQkAFYPEhIS7LNpFixYwPr163n//fc5ceIE8+fPp7S0lJkzZ7pTmsdQFIX09HR7B7smo3phRVEUMjIyarwPoJaJIDmIT05+UuHvPj35KTEhMV7OkWucPJPOxllPIE8dT9+En9EKC+eatqfksX8xYvMGutx/D/KNlk0HaWHv1XuTArBvPbQcDIMfg8i67hfgw6jthQOfaC+Em2nRooV47rnnRGpqqrsvXS0UFhYKQOTn5wshhLBYLMJisdwwrSjKddNms/m6aUVRrkoLIa6btt3/Wmln865qUjWpmjynqcxUJpbuWyq6vd9NdHmvixj4yUDxzqF3RImxxG81BWKcaromfZlO7NuySpx9rrMQi6KFWBQtDM/UEtsXjxN7vv9E6EqL/U5TVeJk6wsUFhYKT+LOPtSvv/4qgKv+TZ8+3f6eVatWiWbNmong4GDRt29fsWfPnirf98033xQdO3YU7dq1E4A4deqUEEKICxcuiAsXLgghhMjIyBDZ2dlCCCHOnz8vcnNzhRBCpKWl2ftbKSkpdr+TkpJEcXGxEEKIxMREodPphBBCnDp1Suj1eiGEECdOnBBGo1GYzWZx4sQJYTabhdFoFCdOnBBCCKHX6+150el0IjExUQghRHFxsUhKShJCWPt8KSkpQggh8vPzRVpamhBCiNzcXHH+/HkhhBDZ2dkiIyND1aRqUjX5qKbU1FRxsfSi6PJel2v+yynN8WlNZ8/niDVznxR7u/QQx9t3EMfbdxA/D7pd7Fzxjjh++LDTcTIYDMJSmGH/HK/on1J8UaSnp6tlT9XkEU3O9p/cfvre8uXLee+99zh69ChDhw5l9uzZjBkzxqubX7oT2/RzT0zZF0JQWlpKRESEfepcTUX1woHqhYNA8+LPC3/yzO5nSC1KBeCmRjfxUPxDdK/X/YZ/G2heuIrqgwNPeFFaXMCRb1bR4vR7NMA6Q6lYhHEg9nZq9bufTn2GEaS9/ils1YGny4Un+wLlCaQ+lDeW79n2EFKX78mUlJQQFhZW45fvlZaWEhUVpS7fk6TL6kcgaHImToWGQlYnrObvvf7OiM9HUGQsurJpIjo4mt8m/EaQHORzmjJyCvlx6Tu0+X4ztfXWvGfHNUC5exx95j5ARN3azscpKwGxcwXSmLfhjU6gL7jKC0JjEY8nIqSgGtFGlM+jK+2Fr2tyNU7ANduLqmry+vI9G3/7299ISEhg3759dOzYkb/85S80bNiQRx99lD///NPdt/NrhBBcvHjRXhFqMqoXDlQvHASKFzqTjlf2vsKM72eQWpRKXEgcj/d+nDeGvOHUgBQEjhdVRfXBgTu9yM/O5Pd3/4Hp9c70P72UBuSQTSw/15lC1rgtDP6/jXQbOMonB6QgcMqF2odynkCJuTtQvbAihCA7O7vG+wA1r0wIIfj+7Pfc+9W9fHbqM/Zm7uWBDg9U+N7JHSZjUkxezuH1ySvW8+GLazl5+530+/IdauuLyI+sRcZ9M+n5+ScMemI+4XVq3fhCANmnkP89DdbfinTiK0TyNuj7YMXv7Tfv0il8NQ+1vXDgC+2Fx87869mzJytXriQjI4NFixbxzjvv0KdPH7p3786GDRvUAoB1hLJVq1b2kcWajOqFA9ULB4Hgxd7MvYz9eiyfnPwEgWBo06G8PfxtpnWeRrg23OnrBIIX7kD1wYE7vMhMPcXe1bMJfbMbA869QywlnKMBPzd+CN2Ubxn26GradhuArPFtvwOtXPhzH8pbp+/ZnuaazWbAt/cQ9PTedLIs06hRI1JTUwNGkytxKioqIjQ0FFmWA0aTq3GSZZmQkBC7jkDQdK04ZZVmMXfrXBbuWEiePo8GIQ0wGAzM7TqXh7o9RHSwdXZGdHA087vNZ3bX2WSdy/IJTSV6ExsWb2DfbXfR+6PlNCzNpTg0kvN33k/sm8vo98TDRDZu6FScUg5uQ3w5H94egHTyW0DC0noE50skGPQPxC1PQGgsgHWG1C1PwKAFlBpFjWkjymsqKCggPDwcWZYDRpOrcZJlGa1Wa9fh16fvXYnJZGLLli1s3LiRn376if79+zN79mzOnz/P6tWrufXWW/nkk4o3oPMlPL18r7i4mKioKHUZiuqFHdULB/7sRbGxmDcOvMHnpz8HoE5oHeZ2m8uYtmMICwqr9PX82Qt3ovrgoCpenD3+Bzk/vEaPgv8RJFmncp+WWnGu5Vi6DptKvcYtPJBjz+HpcuGt5Xs2AqEP5Y3le7Z42JZi+PLyCE8v3ysqKiIiIqLGL98rLi4mJiZGXb4nSZfVj0DQdKUOs8XMv0//mxUHV1BqKkUjabi3zb3M6DiDFrEtkCQJnUmHVtZSbCwmKjgKk2IiLCis2jWVGUx889F3BL+3lvbZyQCUaUO5OOh2es6bQr34Ls7HSZcDO5bC/o1Il2aAieY3I/WZjWh/B4psPeVdGEtBo4WyQgiLAYsJKTiiRrURVy7fq2x74euaqrJ871rthbeW7wVd8zcu8ueff7Jx40Y+/fRTZFlm2rRpLFu2jA4dOtjfM2bMGPsTNH/BFkB3VkSwnrRm2wPAHwqtpyqi2WwmPz+fiIgIgIDQVJVOVV5eHpGRkTW+UwWQm5tLRESE/ch7f9C0M30nz+95ngs669OKEc1H8GDnB2lXu53LcbqyvfClOHmz7CmKQm5uLpGRkQABocnVOIH1qVh4eDhBQUFOaTr2+/eYti+je9keWgJIcCioK/ltxxE/bBLt6tTHYrEghPCZ+uRMWghBfn4+4eHhaDQat8fJWwRiH8rmqe3/qqY1Gg1gjVH5Tq7t9WulJUm6ZtrWKb9W2l15v5GmyqZtOhRFoaCggKioqIDRVFH6RpquHIgJBE2u5vfK+hEImsqnkwuTeXb3sxy8eBCAtrFtmddtHrc2vxWtrLW/P1wbjqIo6PP1xDaIRavVVqsms0Xh289/o+ztVXRLPw6AURNERt9biX9wKj3696rwmhXGo6wAze5VsOdtMFlntdCoJ/Sdg9RpDASHIwG2v5SCI1AUhawiEw3Cg5CDg92iydV0dZc9T7QX1a3JE+2FOzQ5g9vnuffp04fExETefvtt0tPTWbp06WWdKYCWLVty//33u/vWbsUb08+NRiPNmze3p8H3p/fdSJOr0/vOnj1L8+bN7elA0FSV6edarRZZVqefy7JMUFCQ30w/LzQU8tgvj/HIL49wQXeBuiF1eaLrE7wy6BWijFFVipPZbKZ58+b2tC/FyVVNrsTJaDTaBxICRZOrcZJlmcjISLKzs6+rKT39PHv/+x4nXhpA5x8m0r1sD4qQ+F3bn1+7LqHt3/5Lsz73og2NqHZNrsapuLiY5s2b29OeiJM3CJQ+VHlsg3qKojiVtj2MuVbaNmgqyzJNmjSxd8xtrwshrkoD103b7n+ttLN5r6qma6VvpEmWZZo1a2b/u0DQ5EqcAJo2bWofrA4ETa7GSZZlmjZtaq8fgaAJwGAysPbQWsZ/PZ6DFw8SqglleqfprB62mtta3IZW1l6lQ5IkGjVqZNdQHZoURfDD93v59O5ptH16Pt3Sj2OWZFJ6DCZ62UpuX/86jQb0tufpunHSFyN2LIMV8dYZUqZSRN0OWEYtRUz7ChE/CYsmpEIdQggaNWpkf3DjqTj5Q32CyrcXvq7J1Thdr71whyanEG7GdlRhoGA7xtB2XKLFjcdTWywWkZ+fL0wmU8AcI3699PU0mUwmkZ+fLywWS8BocjVOZrNZ5Obm2l8LBE2uxklRFJGbm3tDfb6g6aezP4khm4aILu91EV3f6yoWblsoTueedlucrmwvfClOrmpyJU4Wi8VePwJFk6txUhRF5OXlXeZN+ffoy3Ri35Y3xdnnutiPfjY8U0tsXzxW7PnhU6ErLfY5TVVJ5+fnX5Zfd2py9kjjqhIIfag333xTdOzYUbRr104A9mOu3X08taIo4tChQ6KsrEwIUbOP3FYURWRmZgaUJlfilJOTY/cjUDS5GidFUcTJkydFXl5ewGg6fPGwuOvfd4ku73URXd7rIib+Z6L48dSPwmwxX1dTWVmZyM/PF8ePH/e6pqysLPHt1t/FhjFzxZEOncTx9h3E8fYdxH/vnSwOfvaFUIxG58tecYEQ+9YL06ut7J/p+iWdhWn7MmEuznZaU35+vigqKqqRbUR5TRcvXhSJiYlCUZSA0eRqnBRFEcePHxcFBQVu1+Rs/8lje0rt37+fEydOANCxY0d69+7tidt4HE/uI6EoCunp6TRu3PiyaXI1EdULB6oXDvzBizx9Hq/sfYXvU74HoFFEIx7q/hB3tryTYI37TirzBy+8geqDA0VRyMvLo1atWpd5oSsp5PA3b9Li1EYaYJ1FVSLC2B97G3F976dz3+E+e4qeq3i6XHh7T6lA6EN5ek8pIayb8zZp0gSNRuPTy0s9vQxYkiTOnz9Pw4YN0Wq1AaHJlTiZzWYyMjJo0qSJvRz6uyZX4wRcVj/8WVOJoYTVCav5+OTHCARR2iimd57OfW3vIy4s7oaaADIyMmjQoIFXtz/482gqCYtX0Pvgz4Qo1gMZzrXsQqPJE2k/9g40lzblv2HZEwrKoc1I219Fyk8BQEQ2QOo9E0v3acgxDZ3WZDabycrKss+WqmltRPk8utJe+LomV+N05eepOzU5u6eU2welzp8/zwMPPMCuXbuIjY0FrNPyBw4cyGeffXZZ4P0Bb3dEVVRU/AMhBN+nfM8re18h35CPLMnc3epuHuz2IM2im1V39lQCHIuhFDnIsWGpYjZRVqbjyH9eo0Pap8RhXcKWQwyH6txF05sn06Zrf+RKrO9XceCtvkAg9aHU/pOKikpV2ZW+ixf2vEB6iXWp902NbuLBrg/So34P+1IjX+N4Uha7Xl1Fj9+3EmG2LhvPbNSamIkTiZ88lqDICOcuJASc+g5+eQEuWvefIiwOekyF3rOhVgvPCFBRcSPO9gXcvtH5nDlzMJlMnDhxgvbt2wNw6tQpZs6cyZw5c/j+++/dfUu/RVGsG1PGxsaqT/xVL+yoXjjwVS+yddm8uOdFfjn3CwDNoprxUPxDjGwxEq1Ge4O/dg1f9cLbqD6AMOmRdq1A2rcW9AUQGovc90Ei+s1jgO43oJjz1OdkozG0vXUKw9p0reYce55AKRdqH8p5AiXm7kD1worqgwN/96JAX8Brf7zGN8nfAFAnrA6zu8xmbNuxhGvDK3Utb3mRnJHPz4vfpsuv/+Fmo3U/w+zajQkedx83zbqfkNgY5y92djv8/Dyc/8P6c3AkxD8AfWZDvY4u59Hfy4U7Ub1w4AteuH1Qatu2bezevdvemQJo3749q1atYtCgQe6+nd9TVlZmfxpa01G9cKB64cCXvBBC8HXS1yz+YzHFxmI0koYxbccwp+scGkc29vj9fcmL6qQm+2AxlCLtWoG8fbHjRX0B0vbXAIF55BK27dpBl+FTGd64RXVls1oIhHIRiH0o21IBdy/5AOzLAgCfXx7h6eV7Op2OqKio6+rwJ02uxqm0tLRSy0X9QZMrcbqyfviLJiEEP6T+wKv7XiXfkI+ExG3Nb2NOlzl0qNPB/p7KxAmsnw9RUVGXbeTsLk1ZBTq2vr6Btls/4+ayfADyoutiuXsMvR6cTFjdOs6XvfMHkH55ASn5VwCEJgSp6zgsPWcjN+mJJMtVipPFYqGsrIyYmBj7+2taG1E+j5VtL/xBkytxul57UVVNzuL2obCmTZtiMpmuet1isdCoUSN3386vkWVZ3RflEqoXDlQvHPiSF1mlWcz/eT5P73qaYmMxLaNb8sqgV3iq31NeGZDyJS+qk5rugxykRd63tuJf7luPpuVAhk3/F/Vr2IBUoJSLQOhDeeP0Yr1ejyzLlJWVYTZb92rx5dMhPX2KpyzL1K5dm9TU1IDR5EqcioqKkGUZWVZPL7a1hf5yejHA8XPHmffDPJ7Y8QT5hnwahzfm+YHP82jrR6kn13M5TmazmcaNG7v99OKzGdmsefZtjt5+Fzd98Tb1yvIpCo/h/L2TaLh+NYP/9XdKJZw7Qfbsftg0FfmdW60DUnIQhS3vRDf+U7jnTc4aY9EbDFWOU2pqKo0bN6asrKxGthHlNRUUFBAUFIQsywGjydU4lR+k84QmZ3D7nlJfffUVL7/8MqtXr7ZvzLl//37+8pe/8MQTTzB69Gh33s7jeHqj84o2qa2JqF44UL1w4AteCCH4PPFzXt//OqWmUrSylvHtxjO7y2zqR9T3Wj58wQtfoKb6YDYZSd2/lVYdeyEt73LN94nHk5Ai6ngxZ76Bp8uFt/ZHCqQ+lDc2Os/JyaF27drqRueSRG5uLrGxsTV+o/O8vDzq1HG0gf6uydU4AZfVD1/WpAiFfyf+m+UHlqMz6wiSgri39b3M6jKLZjHNqhwngPz8fGJiYtyy0Xmx3sSX735J3Cfv0iYvDYDSkHAKh4yi98PTiWrb2vmYFZ1H/PoKHP4MSSgIJGgzHKnPbJRWw5CCtG6Nk9lsprCwkLg46wbxNa2NKJ9HV9oLX9fkapyu/Dx1pyZnNzp3y/I9W8G2UVpaSr9+/ewV32w2ExQUxKxZs/yqQ1UeWwDdWREBTCYTFovlqsDb7uVrhdZTFdFisWAymezpQNBUlTgZLj0NCSRNrsQJwGAwYBs797am9NJ0nt39LPuy9gHQNrYt87rNY3jz4UhI9mt6I05Xthe+FCdvlz1b/QgkTdeKU2lxAce2rqHpqY20DjNDryMQGmvdS+pKQmMhNNp+H1/V5Ik4CSEwmUwe0+RJAr0PZfPU9n9V05pLm/Xb+gs272yvXystSdI107ZrXCvtrrzfSFNl0zYdimJ9Qh1ImipKO6PJ9nkZSJpcya+iKJfVD1/VlFKUwqLdi0jITgAu9bPi53Frs1vRylqXPLgyv4qiYDKZ0Gg0120vbqRJb7Lw5ac/onl3DX0unAbAEBRM9sARdH9oKnV6dLusLb9ufnW5sGMp7N+AZLHOPKHFzUi9Z0OHOyEo5LLlTO6Mk8lkQpIke35qWhtRPi/ubi98QZMr6Ss/T92tyRnc8jhx+fLlLFu2zP5v3bp1bNiwgXXr1l2WXrZsmTtu5xW8Mf3caDTSsGFDexp8f3rfjTS5Or3v7NmzNGzY0J4OBE1VmX4O1gYhUDRVZfq5oihen35eXFLMql2rGPv1WPZl7UMraZnaaSqv93+dTkGd0Mgar5c9s9lMw4YN3T793N/qk9FopKysDFmWA0ZTRXHKu5jOrnV/x/RGV/qdfJVG4gL5pQYM2Uko/eZREUq/eZiNBp/V5Mk4FRcX07BhQ3vaE5o8RSD2obyBLMs0bNjwss5zTUX1worqgwNf98JkMfH2obcZ/814ErITCNWEMqPTDNaOWMvtLW63D0i5g6p6YbYobPnPdr64YxLxLy+gy4XTmGQN5/reSv233mb4mteo2zP+qgGpCtEXws8vwIp42LsGLEZo1BNGvwWT/g1dxkJQiEv5dAZfLxfeRPXCgS944fble4GGJ6efA+Tm5hIXF0dQUJDPP4n25NN1s9lMfn4+tWvXBggITa7GyWw2k5OTQ7169ezl0N81uRonsA4I161b12vTz8+VnOOZXc9wMPsgAB1rdWRe13kMaTYEWZKrrexd2V74Upy8WfYsFgvZ2dnUq1cPSZICQlP59LnEI2R8t4T43K2ESta9hc5Tj5MN7qXV4Em07NAdLEbEzjeQ9zpO31P6zUO6eQFCE+xzmrw1Uyo3N5datWrZn4a7U5Oz089VHHh6yaOiKOTk5FCnTp0a/6VC9cKK6oMDX/biUPYhnt39LGcKzgDQvW53Huz2IDc1vglZcn9eXfVCUQTf/3yQrJWr6Ju4Fw0CRZLI6NqftjMeoPltQ5GCnFx0ZNTBvnWwc5ljpnPdDtB3LnSbCCFRlRfmAr5cLryN6oUDT3rhbF/A7afvBSq2AJUPVFXSti/YtvT1ppOWT1f39L4baXIlfaUO2zUDSVNl4+Tu8uYLmlzJr+1L4o2u4w5NFmHhwxMfsjphNQaLgVBNKJM6TmJ6p+nUCqtl/9vqKnvOthdqG+Gfms4c3Ebpr2/QvWQnTSUBEpySW3O++ZirT9KTQ1EG/hUx+DHQF0FoNMJsRNaGYntO6wuavFn2yg9SVXRNb00/V7kaW2zcPRBsu6bt2aovD5p6eiDYNkBffr8tf9fkapwqW978QZMrcbqyfviCplJjKasPrebjEx8jEEQHRzOt4zQmtJ9AXFicNX7ixtsiVDZONpzd/kCWZbbtOcnpN1bR/+h2WgrrNdLbdafZlIkMvWckQaGhl73/mvk1GeDgB8jbl0JJljUjcS1Qes2C+MnIUXWseReVO1HQ1TjZ/Cif95rWRpTPo6c+n/yhjSiv6Xrthd+evqfiPLIsU69evcs6zjUV1QsHqhcOvOVFYn4iU7dO5Y0Db2CwGOhWpxtvDHmDv/b862UDUtWJWi6sBJIPisVCwv8+5fhLN9H+2zH0LN2BLAkOaHvyW+cXafDoD9c8SU8TEoGkCUaKqIOkCUYTEul9AT5EIJULf8ebp+8VFRWpp+9dOn0vOjpaPX2vqMj+RSlQNFVl+wOTyeQzp+/9ePpH7tlyDx+d+AiBoH/t/rw57E3GNh6LvkDv0TiZzWbq1avn1PYHX/+0j7XTHyd6zv0MOvIrWmEho1l78v/+BEM/e5cGI28l/VIMrhunrEw4vBmxqhfy1segJAtzeH2K+z0GM38gs+V4Ckyy18teamoq9erVU0/fu5S2DewEiqaqnL5nMBgC6/S9QMPTp+9duHCB+vXr1/iOtOqFA9ULB572wqSYePfIu6w9vBazYiY8KJxpnaYxueNkYkNj3X6/qqCWCyuB4INBr+PQ1vXUP7qO5sp5AIxCwx/hg5G6jqXnkLGEht94kCkQvHAXnvbCW6fvBRLeOH0vMzOTBg0a2Jf2+vKTaE/PlMrKyqJu3bo1/vS9Cxcu0LBhQ3s59HdNrsYJuKx+VJemvLI8lh5YyrfJ3wJQJ6wOs7vMZnTr0USGRHql7IF1cLxOnTrX3P7gREoO2197i967vyHKVGb9m/rNiZ44kS5TxqOJjHAuTpKEcnIr0q8vIl08DoAIi0PqMRWl50yo1aJay175LUIkST19r7Ltha9rcjVOV36eulOTV0/fU3EdrdZ9G/n5O6oXDlQvHHjKixO5J/jXrn9xKv8UAD3r9eSh+Ifo37C/fSqrr6GWCyv+6kNhfg7Hv15Gm7Mf05d8AIpFGPtjbiOuz0T69R9BkDa4Utf0Vy88geqFb2LrqJYfLKxK2racUghBSEiIvb325eWlzmqqbNqmQ1EUgoODA0pTRWlnNIWEhAScJlfyqyjKZfXD25qEEGw9u5XF+xaTb8hHQuL2Frczt+tc2tVq55ImZ9MVbX8QGhpa4fYHZzIL+HHJerr+8jlD9UUA5MY1QDtmHP1nTyKk9uWz5a8bp7M74Ofnkc9bT2wmOALiH0DqMxvqdbpseVJ1lj2tVmsfkLqhJhfz6y/1yd3thS9ociV95eepuzU5gzpT6gaoT0dVVAILo8XImkNr2HB0AxZhIVIbyczOM7m/w/1Eh6h1XMX9ZKUlkvLfpXTN+pIIyToF+gK1OFL3bloMnkTrzn2RZPkGV1GpTtS+QOVRPVNRqZlklmTywp4X2JG+A4AmkU2Y120eo1qNIkTjuZPlKqLMaEYjy+iMZsKDgzArCuHBQaTnlfLNsg9ou/UTGpValzgVRsZhvnMMPedNIbxRwxtcuRwZB+Hn5yHpF+vPmhDoOg56z4XGPcBHH3SqqHgDr250PnbsWKff+5///McdtwwIFEUhMzOz2o9g9AVULxyoXjhwtxeHsw/zzK5nSCq0rnHu16AfD8U/RK/6vXx2dpQNtVxY8Scfko7sIe+npXQv/IUGkgUkSJKacbbJaDoNm8LwFu2rdH1/8sLT+LMXah/KNfw55u5G9cKK6oOD6vDColj47NRnrPhzBWXmMoLkIMa0GcPMLjNpGtXUK3koj9FkIetiIY3rRCIXFkJcDBdyiolOTeTEwme4Jde6fL4kNBLdbXfR66FpRLZq6fwNsk/DLy/Aia+tP0sa6Hg39J4NLW4C2fcOyVDriAPVCwe+4IVbBqViYmLsaSEEW7ZsISYmht69ewNw4MABCgoKKtXxqimEhYVVdxZ8BtULB6oXDtzhRZm5jNUHV/PhiQ9RhEJMcAyzusxiYoeJRGgj3JBL76CWCyu+7INQFI7u/BqxeyXd9AdoDSDBYU0XctuMpcfwSbSuW4knsDfAl73wNv7qhdqHch1/jbknUL2wovrgwJtenMk/w7O/P8uh7EMAtItrx7z4edza9FaCZO/vFqM3msFkIvw/n3D2o49QioqQo6OJmzyZmKlTaBkTTGFRKIW33E73+dOI69zJ+YsXnIPfXoVDn4BQAAnajoDes6DNcND49lJytY44UL1wUN1euH353hNPPEFeXh5r1qyxryO0WCw8/PDDREdHs2TJEnfezuOo089VVPyb/Vn7WbR7EZOJnjoAANN8SURBVGnFaQDc3Phm5sXPo3vd7tWbMZWAwmQycuj7jcQlrKG1JRkAi5D4I3QA5k7j6DnsPsIjY25wFRVfxVt9gUDqQ3l6o3N/20hW1aRqCkRNFiysP7yed46+g1kxE6oJ5YH2DzCtyzRqh9auNk3CYCD3nXfJe+utK5smas+fT9SIEZSU6qjdszsCnIuTLhexYyns34BksZ5AJprfhNRnNkq7OyAoxGfjFIhlT9XkH5qc3ejc7fOzNmzYwGOPPXbVhlcLFixgw4YN7r6dU5w9e5ahQ4fSqVMnunbtaj/isLpRFIVz587ZC0dNRvXCgeqFg6p4oTPpeHnvy8z8YSZpxWnEhcaxsPdCXr/ldb8ckFLLhRVf86G0uIA9n7xIzkud6H1gIa0tyehECNsjR3Fw8Lv0XLCFm++d45EBKV/zojoJFC98sQ9VWVavXk2nTp3o06cPYD31Ctx/jLiiKPz555/2o6p9/chtZzSBa0duK4pCcnIyycnJAaPJlTjl5eVx9OhRFEUJGE2uxklRFA4fPkx+fr7HNG1N2MqEbyaw5vAazIqZHvV6sLj/Yu6tfS91wupUW9nLzMxEDtJS8NFHVET+xx8T0qYNtXp2x3JJ33XjlJdJ4ZbHYUU80t411gGpRj0pvn0F54eshC7jKCgp84v6lJyczLlz5ygpKamRbUR5TTk5ORw7dgxFUQJGk6txUhSFQ4cOUVRU5BFNzuD2mVJxcXG899573HvvvZe9/tVXXzFjxgx74+hNbrnlFl588UUGDRpEXl4e0dHR9iNBb4Qnn44KISgsLCQmJsbn97PxNKoXDlQvHLjqxe8Zv/Pc78+RXmJtsIc2HcpD8Q/RqXYlpmf7GGq5sOIrPuRkpZH49et0yvg3MVg/uHNFNIfq3EnDARNp32MwciVOHXEFX/HCF/C0F96aKeWLfShX8fRMKcB+bVmWa/STaFmWKSgoICoqiqCgoIDQ5EqcLBYLhYWFxMXFYft64++aXI2TJEmX1Q93atIrelb+uZJPT36KQBAVHMWMTjOY2GEi0cHR1Vr2LIpg174TDGxRizNDb72yWbLTdvcuNHFx14+ToRTNgXcRO5chlVnbXlG3A6L3HOT4iYiQKL+rTxaLhZKSEvvnWE1rI8rn0ZX2wtc1uRon4JrthbdmSrl9ke/MmTOZPXs2SUlJ9O3bF4C9e/fy6quvMnPmTHff7oYcO3YMrVbLoEGDAKhVq9YN/sJ7SJJEbGxsdWfDJ1C9cKB64aCyXhQbi3l9/+t8kfgFAHXD6vJgtwe5t829hAX597pxtVxYqW4fUk8lcOH7JXTP+54BkhmAczTgVKPRtBsyiaFtunrtJL3q9sKXCBQvfK0P5Q5sHVW5XL2oSrr8LLLyfTpfP3LbWU2uHrkdd+kLdiBpqmycNBqNvUyUH5z2Z01VyW/5+uEuTbszd/PCnhfILLXOzBjceDBzu80lvm78Zfn3lKZrpUHi+50nSF6xmiGZh9H89ANydDTKpZkf5ZGjo5Gjoi4rN7Y8ajQasJiQ/vwAzfYlUJyJBBDbHPrMRuo+BSmi9qU74nf1KSgo6KrPyprURlx5f3e3F9WtyRPthTs0OYPbB6WWLl1KgwYNeP311+1TyRo2bMjjjz/OP/7xj0pfb/v27SxZsoQDBw6QmZnJli1bGD169GXvWb16NUuWLCErK4v4+HhWrVpl78wlJiYSGRnJ3XffTXp6OuPHj+fJJ5+ssk53oCjW5QZNmza9omGteaheOFC9cFAZL7af385zvz/HRZ11qchtzW9jXvw82sW180ZWPY5aLqxUlw8n9/5I2bZl9NDtpjmABMfldmS1HEO34ZMZ3rC51/JiQy0TDgLFC3f3oQKZQIm5O1C9sKL64MDdXuTp81i8bzFbz24FrA/95nady71t7iVcG17l67uKEIJtf57l0BtvcfOh/9HCbACg4OAhak2dQs7qq/eUqjV1KpjNoL1iQ3JFgaNfwK8vQb51+RSR9aH3TOg5E6IbeFqOx1HriAPVCwe+4IXbB6VkWWbhwoUsXLjQvi6xKlPdS0tLiY+PZ9asWRWePLNp0yYWLFjAmjVr6NevH8uXL+f222/n1KlT1KtXD7PZzI4dO0hISKBevXqMHDmSPn36MGLECJfz5C4kSSIuLu6y0dmaiuqFA9ULB854UWgoZPG+xXyT/A0A9cPr81D8Q9zd+m5CNCHeyqrHUcuFFW/6YLFYOPS/Twj/YzUdzCfsr+/X9qa0wzh6Dr+fTjHVN/tWLRMOAsULd/ehAplAibk7UL2wovrgwF1eCCH4NvlbXvvjNQoMBUhIjGw5krld59I2rq2bcusavx9LZ88ba7hp33+5zVQGQE79ZsROmEBUfFc0vXsCEnkffmg/fa/W1KnUfnAucki5/qEQcPp7+PkFuHjM+lpYHPSYCr1mQe2W3hfnIdQ64kD1woEveOH2PaUAzGYzv/32G0lJSUyaNImoqCgyMjKIjo4mMjLS5etKknTVTKl+/frRp08f3nzzTcA60te0aVP+8pe/8M9//pPff/+dZ599lh9++AHAfnLN448/XuE9DAYDBoPB/nNRURFNmzZVT49RNamafFDTz2k/89Lel8jV5yIhcUfLO5jTZQ6t41r7raZAjJO/adKXlXJk6zoaHn+HZiIDAKMIYl/ELWi7jqXr4HsJC4/0K02BGCdvanJ2TwR34Kk+lLdRTy9WUfFvMkoyeH7P8+xK3wVA06imzOs2j1EtRxGsCa62fCUkZ/PLG+/Qd+eX1NZbB+/z4+oTNm48nWdOIri242GRUlaGFBSEpbgYTVQUwmxGDiu3nUPKTvj5eTi31/pzcATEPwB9ZkM9/92HVEXFV3C2L+D2+Vmpqal07dqVe++9l0ceeYTs7GwAFi9ezGOPPebWexmNRg4cOMDw4cPtr8myzPDhw/n9998B6NOnDxcvXiQ/Px9FUdi+fTsdO3a85jVfeeUVYmJi7P+aNm0KeOb0GJ1OR3JyMmfOnPGb3flvpMnV3fnPnDlDcnIyOp0uYDRV5fSYhIQEFEU9PUZRFA4ePHjV6TG5Zbk8/N3DLNi2gFx9Lg1CG/BMn2d4/qbnUXIUn9bkapxsp6acPn06YDS5EiedTsf+/fvtAwXu1FSQc4Ht6xZQtqQz/Y49TzORQaEI59fYsewd+A6d56yn36gpZF3I9on6pCgKR48eJSsry+fi5O2yl5+fT3JyMqmpqR7T5A282YfydxTFeuKcbYCyJqN6YUX1wUFVvLAoFj4+8TGjvxrNrvRdBMlBTGg3gfUj1nNvm3urbUDqRHo+byxcQd74MYz63wfU1hdRFFWLksmz6fmfz+jx2KOXDUgByBoBskAOufS/5tJcjIwE+HAsvHendUBKEwLdJ8G0b+COpQE7IKXWEQeqFw58wQu3z5QaPXo0UVFRvPvuu9SuXZtDhw7RqlUrfvvtN+bOnWvv6LnClTOlMjIyaNy4Mbt372bAgAH29y1cuJBt27axd6911Pu7775j4cKFCCG47bbbeOONN655j2vNlMrNzaVWrVqYzdaNbYOCgq6blmUZWZavmTYajWg0GsrKytBqtWi1WvvrtpMBzWbzZeng4GB7h7mitKIoBAUFXTPtbN6roikoKOia6etpMplMmEwmwsLCsFgsAaHJ1TiZTCb7U3mLxRIQmlyNk0ajobi4mIiICDQaDSaTiR/TfuTVP16lwFCALMnc0+oeZnaaSYvYFn6hydU4XdleBIImV+JksVgoLi4mJibGPoulqprOnTlG+vdv0C37G8Ila/ufSR2O1buL5oMm0aZzHyyXZtH4Un3SaDQUFhYSERGBVqv1qTh5u+xJkkRZWRkhISFoNBq3a9Lr9V6Z9ePJPpS38fRMKSEEpaWlRERE1PjlF6oXVlQfHLjqxZn8MyzavYjDOYcBaB/XngfjH+TWprcSJLt91xenOJtdwpdvfkKHrZ/Qotj6wKI0LArTyHuInzeV8BbX2NPRrIcdb8DetaAvgNBY6DcP+j8M746AnNMgaaDj3dB7NrS4CWTPnppb3ah1xIHqhQNPelFtM6V27NjB008/TXDw5aPoLVq0sD8R9TajRo3iyJEjHD169LoDUgAhISFER0fz4Ycf0r9/f4YNGwZgf1Kbl5dnf1KbnZ1tf1J74cIF+/4PmZmZ9nR6ejolJSUApKWlodPp7Gmj0UhkZCSpqamYTCYAkpOTsVgsCCFITk62H9+ZnJwMgMlksj9xNhgMpKWlAdbZA7Z0SUmJ3euioiL70+eioiL70+eCggL7E1h3arIN6KWkpFRKU2pqKpGRkRiNxoDR5GqciouLKS0tRZKkgNFU2Tjl5uaiM+kwK2aMQUYsWCg0FPL8ruf5585/UmAooElYE57t/SzPDHwGJU/xeU1VjZPZbCYyMpKzZ88GjCZX4mQ0GsnJyUGSpCprOrT7R/a/PoaGH95M/5zPCZcMJErN+aHJ/yHN+YH2dz9G3abtkWTZJ+uTJEmYzWaPfD75W30qLi4mMjKSjIwMj2nyBr7Yh/JVJEkiMjKyxn+ZANULG6oPDirrhdFiZHXCau779j4O5xwmNCiUWV1msXbEWm5rflu1DEhlFJSxYvFHHL5nLCM3LaNF8QXKgsPIGzWWdp99xIBXnr72gJRRZx2Q2rbYOiAF1v+3LYbf34Thi6DNCLj/Yxj3DrQaHPADUqDWkfKoXjjwBS/cPlMqLi6OXbt20alTJ6KiouxP+Xbu3Mm4cePsnU5XuHKmlNFoJDw8nM8///yyfaamT59OQUEBX331VRXVOEb3PLGnlBCClJQUmjVrhlarrdF7dphMJtLS0mjRogWSJAWEJlfjZPsS1KpVK3vj4O+aKhsbg9nAO0fe4ZOTn1BkLCI6OJoHOjzApI6TmP3DbHrU68GszrNoHNXYbzRVNU5XtheBoMmVOJnNZpKTk2ndurU9/5XRJBSFozu+RPP7KroYE7CRENSNgrbj6HbrRGJr1/eL+mQbSGnRogVardan4uTtsqcoCikpKTRv3pygoCC/3VPKk30ob+PpmVIWi4WzZ8/SsmXLSh07HYioXlhRfXBQGS8SLiawaPcikgutg/E96/VkXrd59G/UH1ny/klc2cUGPnt/K3U3bSQ++9JS6qBgigeNoOu8aUTHd73xl2eLEZa0dQxIlSc0Fh47BUgQFDgH4jiDWkccqF448KQXzvYF3D7sfdttt7F8+XLWrVsHWAeSSkpKWLRoEXfccYdb7xUcHEyvXr34+eef7YNSiqLw888/8+ijj7r1Xp5AlmUaN25s7wTXZMp74eZxUr9DlmUaNWpUY70oM5Wx4egG1hxeY3+tyFjE2sNrAVg5dCUNIxsiu3+ip0+jthdWXPXBaDCQ8N071Dm8lnglFQCzkPkj7CYsncbQY+h4IqJi7IMd/kD5tqKmEyj1w5t9KG9hq1PuHjSVZZmGDRvav5z68qCppweCbW2Brc8QCJpciRNAw4YNA0pTVeJUvn5UpEln1rFs/zI2n96MQBAdHM2MzjOY2H4iEUERSEiXlTFPa8ovNfDpZ78S8fG7DM84CoBZ1pDf7xY6zZlK7QF9Kd8rvm6cygqQKhqQAtAXIAwlEF4brqMjkNqI8joaN25sv34gaHI1Tq60F76uydU4Xa+9qKomZ3F77+3111+3P+XT6/VMmjTJPu188eLFlb5eSUkJCQkJJCQkANbNShMSEuxLARYsWMD69et5//33OXHiBPPnz6e0tJSZM2dWScfq1avp1KkTffr0ATyz0bnBYCAsLIzk5GS/2EjWk5vjJicnExYWhsFgCBhNrsapsLCQgoICJEkKGE3Oxik/P58gOYhPTn5CRXx68lPqR9QnSA7yG03uipNtz7UzZ84EjCZX4mQwGMjMzESSJKc0pZ87y7YNT5L/Skf6JjxJKyWVUhHKrxF3smfAOnov+ILWfe6gzGCqNk2uxkmSrPsoeeLzyd/qU1FREWFhYZw/f96vNzp3dx+qOvBG/0mv1yNJEunp6falmL5cPj1d52xfHmw6AkGTK3Gqyf2nKzXZPLAtc75S049nfuTeL+9l0+lNCAS3NLmF59s/z9R2U4kOifaqprPnMnh303Y2j53NLUsW0DfjKIokcaF7f+qtWEmr555A7tjOvpT+unEylFD4w6vWU/RCY6mQ0FgIifKJOIF3y15KSgphYWHodLqA0eRqnPLz8ykqKkKSpIDR5GqcbB7Ytj+ojv6T25fvgXWD0E2bNnHo0CFKSkro2bMnkydPJqz8EZxO8ttvvzF06NCrXp8+fTrvvfceAG+++SZLliwhKyuL7t27s3LlSvr161dVGYDnl++VX3rhDyOpnhodvnLJWiBocjVOJpOJ5ORk2rRpYx+x9ndNlYlNniGPoZuvrvM2tk3cRq3QWn6lyR1xurK9CARNrsTJbDZz5swZ2rZta89/RZounD/L2a2v0yXjC6KkMgCyieVwnTtpctMkWnfph3xpQ+zq1uRqnIQQnDlzhlatWqnL9xTryTEtW7b06+V74N4+VHXiyf6T7b2JiYm0adOGoKAgny6fnq5zAGfOnKFly5YEBwcHhCa1/1S1ONk+H1q3bm0/WEKSJPL0eSzet5jvUr4DoG5YXeZ2ncvotqMJloK9qsloEWz+bj9F69ZzS9LvBAnr69mdetF62v00GDkcTWioc3Ey6pAObETauQxKs+H+TyDjIGxfclXbJG55Agb+FYLDqz1O3i575b9vybIcEJpcjZMr7YWva3I1ToqiVNheeLP/5PZBqe3btzNw4ED7CTY2zGYzu3fvZvDgwe68ncfxZKdKkiRMJhMajQaNRuMXhdZTFdFisWCxWNBqtQghAkKTq3GyWCwYjUZCQ0OxVU9/1+RM3osNxWw8upE53eYw4vMRFBmLrqqP0cHR/DbhN7QarV9ocmecrmwvAkGTK3FSFOtpnbaNoK/UkXbqIBd/WEL3/B8JlqynV6bSiDNNRtN26GSatOzkc5pcjZMkSej1eoKDg+3e+LumqqRNJpP9VD13a/LWoFQg9aG8cfqe0WgkODjY/oWipqJ6YUX1wYFtAML20FsIwbfJ37J432IKjYVISNzR8g7mdJ1Dm7g2Xs2byaLwn1+Pkf72Wm49sY0QxXqaak6bzjSf9gBN7rkTOTTUuYtZTJDwMWx7DYouHQYR3RgGPQbdH4Cdy64+fW/QAghy8voBhlpHHKheOPCkF9V2+t7QoUPt08PKU1hYWOGMJ1/FW8v3QkJC1OV7l5bvhYSEqMv3LqXz8vKsT7QCRNON4vRz2s/cs+Ue1h9dz97MvTzQ4QEqYlKHSehNer/Q5O44mUwmQkJCauzyvaysLCyGUiRhRmsqAsWERV/KhQsXEIrCn7/+h4RXR9Bi0630LfiOYMnCUU0Hfmz5T8ru+4xhc14hPKaBT2lyx/K90tJSdfnepeV7ISEhfr98L1D6UN5AkiRCQkJq/JcJUL2wofpgpcxUhlkxU2IpwayYKdAX8Ozvz/LkzicpNBbSLKoZL970Ii/c9IJXB6QsiuDrXadZNmUhbf42lVHHfiZEMZPXpDUh/+9pbtr0Ps0mjHNuQEpR4PC/YXVf+Oav1gGpiLow+DGY9QP0mQXaMLjpb/B4IjyeZP3/pr/W2AEpUOtIeVQvHPiCF26fKSXLMhcuXKBu3bqXvX769Gl69+5tX9vsL3h6+V75pRe+/iTak0/Xr5xCGQiaXI2TyWTizJkztGvXzt44+Luma+U3oziDV/e9yq/nfwWgXlg9/t7r7wxvPpwNRzbw8cmP7afvTe4wmdldZxOsCfZpTZ6K05XtRSBoqkycMBsQO95A3ud44qn0m4c08P/IeH8WjTN+sP6NkNgf0gd9h3H0Gj6RsMgYn9VU1TgJITh9+jRt2rRRl+8pl08999eZUoHUh/LG6XuJiYm0bdvWPnu0pqJ6YUX1AQwWA+8crvj04rk/zKVH/R7M6jKLRpGNvJYnIQQ//pnGgTff4dYDW4kx6gAoqNeEWpPup/UD4wmKiXH2YnDyv/DrS3DxuPW1sDjoPhl6z4Lara/6E4vFQlpaGs2aNaux5cKGWkccqF448KQXzvYF3DYoNXbsWAC++uorRo4cSUiI44hNi8XC4cOHad++Pd9//707buc1PNmpEkJgNpvtHeiajOqFg5rghVkx8/GJj1mdsJoycxkaScNdre5idtfZtIxpCVif9AXJQRSbionSRmFWzIRp/WtPFXdSE8rFtbAYSpF2rUDeXsFGz4Mfh0bd0X86gz8ihxASP574wfcQEhru/Yx6mZpcJq7E0154eoAlEPtQ3li+p5Z/K6oXVmq6DxWdXmxjXrd5jG4zmgYRDQiS3X74eoUIIdhxIosdKzcyeM/X1NFbZ+kWxdUjavx9tJl+P8F16jh7MUj+FX5+ATL+tL4WHAnx90Pv2VCvI1wj5jW9XJRH9cKB6oUDT3rhbF/Aba1SzKURbiEEUVFRl23IGRwcTP/+/Zk7d667bud1bE9l3fkkWpKsRzBaLBZ1T6lL7wkkTVWNU2XKm79okmWZwxcP8/ye5zmVfwqAdnHtmNttLkObDEUrO2YAhWis00ijNFFoJI19JogvavJGnK5sLwJBk7NxkoO0SPvWUiH71iP+cYrU0V/Sv3NftJc2+bVdx1c1uSNOto6D7W8DQZM70rb8ulOTpwn0PpSnsMVLRfXCRk324UanF8/rNs9rA1J/JOfw3aoPGbj9P4wttS7BLomKI2T0GLrPmExI40rM1ErbYx2MSt1p/TkoFLqOh95zoFH3aw5Glacml4srUb1woHrhoLq9cNvdN27cyMaNG1m0aBHvvvuu/eeNGzeydu1a/t//+3/UcXY03Afwxp5SOp2OxMREv9mzw9P7kCQmJqLT6QJKkytxys/P5+DBgyiKEjCaCgoKOHPuDC/vfZkp303hVP4pIrQRzGg9g8U9FjOyxUjysvOu0qQoCn/++addn69p8mbZ0+v1JCYmcvr06YDR5Gyc0OVbl+xVhL4AjCU0bd+TjEt59wdN7oiToigcOXKErKysgNHkapwKCgpITEwkLS3NL/eUCrQ+lDcoH7OajuqFlZrsgyIU8g35FR4SA1BkLKLYVOzxfBw9X8ALT63l4v0TuO+7dTQuzaEsLBL9uAfovPkTuj31uPMDUpmH4OP7YMPt1gEpjRa6jIcpW+DuVdC4h1MDUjW5XFyJ6oUD1QsHvuCF2/eUCjQ8ffqe7UmxOlPKYr+OzQ9/1+RqnCwWC4qiEBQUhK16+rMmSZL4MeVHFv+xmOyybABuanQTc7rOoUfdHvYZQBVpkiQJs9lsnS1zHX3+OLPDlZlS5duLQNB0vThZzGYO/bKJ6JObaDv/M3ijU8UDU6GxiMcTQdb6vCZ3x8lWP2RZVmdKwWXtpbs1eWtPqUDCG8v3bDGzzRqsqaheWKmpPpzMO8nKP1ey9JalTp1e7AkSLxSzaf2XdNz6MZ3yUgEwBIdiHj6KjnOnEd6hvfMxyT5l3TPq+FfWnyUZ2t9h3TOq5S2gqdxsr5paLipC9cKB6oUDT3rh9eV75fn888/ZvHkzaWlp9qeRNv78809P3NLj2Dqq5ae2VSVdfjCm/PrN8puLVZSWJOmaads1rpV2V96vp8mVtE2HbS2r7ZqBoKmitDOayn/h8mdNGaUZvLz3Zbaf3w5A/fD6zOk6h3vb3EtY0OX7Q1WUX9uXzBvFu7ridL28VzV9ZX6dbS/8SVNF6TJdMUe/fYsmp9+nl7DOABLJ26Dvg0jbX+NKlH7zEGYTmpBgn9XkqTiVH4QJFE2upiuqH+7W5C0CsQ/lKcoPJNZ0VC+s1CQfCg2FrDq4in+f/jeKUNiXtY8HOjzA2sNXL3ef3GEyZsXs9kGptFwdH33wHc23fMC4i6cBMAVpKRs0nA5zpxHdI975L7n5KfDbYjj8GQgFkKDNMOg1E9rdbp0p5SI1qVzcCNULB6oXDqrbC7ffeeXKlcycOZP69etz8OBB+vbtS+3atUlOTmbUqFHuvp3XsA0SKIriVNr2ZeFaaYvFgsVisR/1Xv5129PjK9PAddPlnxZXlHY271XRdL309TSZTCaSkpLsvgSCJlfjZDabOXPmjD2v/qjJpJjYcGQDo78czfbz29FIGsa0HsO7t73LhHYTCJFDnNKkKNYTtWz38qU4ebvsXdleBIKm8umMlFPsfns+ytKO9D+1mCYii0IRwW8xo0nSx8Cgf6Dc8gSExgJYT9+75QmkmxegCYnwSU2ejpOtfpjN5oDR5GraVj/MZrPHNHmDQO1DeQJFUUhKSrKXg5qM6oWVmuKDIhT+k/gf7t5yN5tObUIRCv0b9icmOIa53eYyv9t8ooOtMxKig6OZ320+s7vNduthMVmFel5b8x0/3TeDMWufpufF01hkDYUDhtJ0zRr6vrmEmJ7dnRuQKsqE//4DVvWGQ59YB6Sa3wzj34X7P4GOd1V5QKomlAtnUL1woHrhwBe8cPug1FtvvcW6detYtWoVwcHBLFy4kJ9++on/+7//s+9j4Q94Y08pk8lEhw4dSElJ8Ys9Ozy5D0lKSgodOnTAZDIFjCZX41RcXEx0dDQajcYvNf109Cfu//Z+lv25DL1FT4daHXih1wvMaTGH5jHNK6VJo9EQGRlJSUmJz8XJ22XPYrHQoUMHkpOTA0aTwWDgxL7/sf+1u6m3sT8DL3xCtKQjjYb8r8Fcjt76Prf8dSNNO/Ym42IuYuBfEY8nIh5PQjyeiNL//8jKyfcpTd4sexqNhrp169p1BIImV+NUUlJChw4dyMjI8Ms9pWz4Wh/q7NmzDB06lE6dOtG1a1e7n76ARqOhQ4cONf4ob1C9sFETfDiWc4wpW6ewaPci8g35NI5szNP9nmbF0BX0qN+DEE0IM7vM5LcJv7Ft4jZ+m/AbM7vMJEQTcuOLO0FeqZFlH/zKFxPmcufyfzAw4wgKEgU9BtBgxQr6rVtB3M0DkZyJgS4PfvwXrOwOf7wDigka94bRb8Pkf0OXcRBU9XzXhHLhLKoXDlQvHPiCF27fUyo8PJwTJ07QvHlz6tWrx08//UR8fDyJiYn079+f3Nxcd97O43h6TymTyYRGo1H3lLo0E0Srte4LEwiaXI2TxWLBaDQSGhpqf5rvD5pKzCWsOLCCf5/+NwJBpDaSyR0mM6XTFPsTu8rGSZIk9Ho9ISEh19Xnj3vgVDZOV7YX/qzJbDJy8If3iDn0Lu3N1lMYAQ5pupDb6l66DXuA2vWbVKhDURRMJhPBwcEAPqOpOsqerX4EBwere0oBJpPJvgTc3Zq8taeUr/WhbrnlFl588UUGDRpEXl4e0dHRBAU5t/ODN/aUMhqNBAc7lu7WVFQvrASyDwX6AlYcXMEXp79AIAgNCmV82/FM6zSNhpENr3q/ENZVCFqt1i1eFOlNfPjtAYwb32FY8h60wjqDtKBTD1rNmETdkbchX/pcviH6Ivh9tfWf8dLm6/W7QJ/Z0PU+CImqcn7LE8jlorKoXjhQvXDgSS+qbU+pBg0akJeXR/PmzWnWrBl79uwhPj6es2fP2r9g+yOe2LPDYrGQmppK69atr7tHTPm0v+8Xcy1NkiTZvQgUTa7GCawzGMp74cuaAH5MtW5knlNmndEwuPFg5nadS3y9q/cSqEx+LRaL3QtvavLFsudse+HLmkoKczn27SpaJ39MX6xfrg1Cy/6Im5E6jabH0HGERTg6oxXpEEJc1lZUt6bqLHvO1g9/0uRquqL64W5N3sCX+lDHjh1Dq9UyaNAgAGrVquXV+98IRVGu6jfUVFQvrASiDxbFwheJX7Dyz5UUGq2zJW9qdBMzu8ykT4M+yFLFi14URSElJaXKXuiMZj7+6Si577zD7ae3E2oxAVDQqiPNp0+m/T13IIc5uSzQqIM/1sPOZVBmneVM7bbWwahu90N4nMv5vB6BWC5cRfXCgeqFA1/wwu0zpebMmUPTpk1ZtGgRq1ev5vHHH+emm25i//79jB07lnfffdedt/M4nn7Sp6Liz5wrPsdLe19iV/ouABpGNGRO1znc3fruqzYyV6m5pJ4+ROYPy+iWs5VwyQBALtEcrjWKev0n0KHnLWiCPHMikIqKO/BWX8Cdfajt27ezZMkSDhw4QGZmJlu2bGH06NGXvWf16tUsWbKErKws4uPjWbVqFX379gXgyy+/5L333sNisZCens748eN58sknnb6/2n9SUakah7IP8fLelzmeexyAplFNmdV5Fne2vtPjfSyD2cLm7ac5u/ZdRh37mUizdflzUeOWNJz6AI3Hj0UTGeHcxcxG+PN92L4USqwHmBDbzHqaXo+pEFHHQypUVFSqm2qbKbVu3Tr7VPpHHnmE2rVrs3v3bu655x7mzZvn7tt5DZsmdy/fMxgMaLVadfmexYLJZCIkJERdvmexoNfrCQ8P99nle0aLkfePvs/aI2sxWAwESUGMbjOaGZ1n0DSqqdviJEkSOp2OsLCw6+rzx+VGlY3Tle2Fr2tCCI7t/hbzrrfood9DcwAJkqRmpDS5hza3TGRI6652fbayfiNNiqJQVlZGeHg4oC7f0+l0hIaGqsv3AIPBQHBwsD2/7tTkLdzZhyotLSU+Pp5Zs2YxduzYq36/adMmFixYwJo1a+jXrx/Lly/n9ttv59SpU9SrVw+z2cyOHTtISEigXr16jBw5kj59+jBixAi3aK0qQgj0ej2hoaFXzcitaaheWAkUH/L0eSw/sJwtZ7YAEBYUxoR2E5jaaSr1I+o7dQ1XvTBbFLbsOcuRte8xKuE7ehut+8gV1WtMvcn303bieIJiY527mMUMhzfBtlehIM36WlQD6DUDek6H6EZO56sqBEq5cAeqFw5ULxz4ghdu3+hcluXL9hu4//77WblyJX/5y1/se4D4A97Y6Fyn05Genu43G8l6enPc9PR0dDpdQGlyJU75+fmcPHkSRVF8UlPCxQQmfDOBlQkrMVgMdIztyL86/oun+j9FnBTn1jgpisKJEyfs+nwpTt4ue3q9nvT0dE6fPu3TmvRlpfz60aucfaknXX+eRg/9HhQhcUDbi62t/kXEnP8ybPZLGJRQl+Kk0+k4cuQIiqL4ZJy8WfYUxXr6XlZWVsBocjVOBQUFpKenk5aW5tcbnbuzDzVq1ChefPFFxowZU+Hv33jjDebOncvMmTPp1KkTa9asITw8nA0bNgDQuHFjevfuTdOmTQkJCeGOO+4gISHhmvczGAwUFRVd9g8uf6jnTLr8AHVFadsgtqIonDt3zn46oi+fDumspmulb6RJURTOnz+PyWQKGE2uxMlsNnP+/Hl7Xv1Nk9Fs5JMTn3DXlrvsA1KDGg9i9dDV/KP3P6gbVtdpTVfWjxvXJ8FX+1N55qFXqffoFB7Y9zmxxlJK4uqieXA+Pb74lBYPzkaKirqxJosZjm1BvNUfvnoYCtIQ4bVRBv4VZv2AMvgJlMgGXit7ttmegXp6cWU0mUwm0tPT7e1GIGhyNU6utBe+rsnVOF2vvXCHJqcQbmbDhg1i8+bNV72+efNm8d5777n7dh6nsLBQACI/P18IIYTFYhEWi+WGaUVRrps2m83XTSuKclVaCHHdtO3+10o7m3dVk6qpIk0FZQVi0c5Fost7XUSX97qIAR8PEG8dfEvk6fL8VlMgxqm6NF1MTxW71i8QOYuaCrEoWohF0aL0mbpi25L7xN4fPhH6shK/0xSIcVI1uabJ1hcoLCwUnsRTfShAbNmyxf6zwWAQGo3msteEEGLatGninnvuEUIIYTKZRPfu3UVenrWNv+uuu8Q333xzzXssWrRIAFf9O3XqlBBCiAsXLogLFy4IIYTIyMgQ2dnZQgghzp8/L3Jzc4UQQqSlpdn7WykpKXa/k5KSRHFxsRBCiMTERKHT6YQQQpw6dUro9XohhBAnTpwQRqNRmM1mceLECWE2m4XRaBQnTpwQQgih1+vtedHpdCIxMVEIIURxcbFISkoSQlj7fCkpKUIIIfLz80VaWpoQQojc3Fxx/vx5IYQQ2dnZIiMjQ9WkanKrph3JO8Td/77b3scatXmU+OL0FyLzYqZHNZ0+fVr8988U8cSjb4gfew0Sx9t3EMfbdxB/9Oonjr2wWOjSzjmvSVGELmGL0C/vY+8HmF9sLMTWhSI/+WBAxCkQy56qSdXkSU3O9p/cvqdUu3btWLt2LUOHDr3s9W3btvHggw9y6tSpa/ylb+LJPRGEEJSWlhIREaFOG1S9sONrXggh2Hp2K6/98Rp5eusshSFNhjC722zi61y9kbm77+1LXlQnvurFmSN7yP15OT3yfyJYMgOQRW2O1b2DJgPvp223Achu3DTRV32oDlQvHHjaC2/tj+SpPpQkSZftKZWRkUHjxo3ZvXs3AwYMsL9v4cKFbNu2jb179wLw3XffsXDhQoQQ3HbbbbzxxhvXvIfBYMBgMNh/LioqomnTph45vdi2zLK4uJjIyEj70ndfXV7q6SWzsixTUlJCWFgYQUFBAaHJ1e0PSktLiYqKsj/N93VN2bpsVhxcwddJXwMQHhTOxPYTeaDDAzSMbOhynCRJuqx+VKTp9zM5fLXucwZt/5zWhRkA6EMj0N51Dy2nTyK8TWvnNSVvR/PbS3DO2nagDUd0nYDoPRO5Ybx1hLqayt6VS91rYhtRfrsU2xYhtvv7uyZX4+RKe+HrmlyNE3DN9qKqmpw9vdjte0qlpaXRsmXLq15v3rw5aWlp7r6dXyOE4OLFi7Ro0UL9QqF6YceXvEgrSuPFPS/ye+bvADSKbMTcrnO5q9VdhAaFevz+vuRFdeNLXlgsFg79shntH2voakygDYAEJ+U2ZDS/l07DJjGsSRuP3NuXfKhuVC8cBIoXvtaHGjVqFKNGjXLqvSEhIYSEhHg4Rw5sMY+IcHKz5QDG5kWzZs2qOyvVihCC7OxsIiMjqzsrN8SsmPnkxCe8fehtSkwlSEjc0uQWZnWZRXzd+CpfXwhBQUFBhfXjYFo+mzf+l97/+4wZudZl1sbgUMTw22k7ayoRnTvZv7jekPMH4Jfn0ST/Zr2vJhg6jUHqOwca9QJJsv5z7xyISmGrH02bNq22PPgKNi+aN2/u15+V7sCf2gtP4wufp27fU6pevXocPnz4qtcPHTpE7dq13X07v0aWZVq1amUfWazJqF448AUvTBYT6w6vY8xXY/g983e0spYJ7Sbw7m3vMr7deK8MSIFveOEr+IIXJcUF7PnsFTJe7ELPXQ/R1ZiAWcjsDRnAjvjXaPK3n7h1+jM08NCAFPiGD76C6oWDQPHCW32oOnXqoNFo7Ht32bhw4QINGjSo0rW9sSenXq+3P801m60zNH15zzNP7+MmyzKNGjUiNTU1YDS5EqeioiJCQ0ORZdmnNX2T8A33fXMfS/YvocRUQquYVvyr17/4a6u/0qN+D4qKilyOU3Z2NiVlBswKRNauj0WAzmgmMzOTA0lZPLn43xybNpsZm16hS+5ZzBotpUNvo9WGdwifNxNt2zZIknRDTabzCZRtHAPv3IqU/BtCCoJOo9GN/5Sz3Z+Apn0pLi31ibJnNptp1aqVPV0T2wibptTUVFq1akVZWVnAaHI1TgUFBYSHhyPLcsBocjVOsiyj1WrtOqpjT063L9974okn2LRpExs3bmTw4MGAddr5rFmzGD9+PEuXLnXn7TyOp5fvFRcXExUVpY5Wq17YqW4vDlw4wPO/P09yYTIAXep0YU7XOQxpMgSN7L5lWM5Q3V74EtXpRUZqIinfLadL1haiuXQSjwjnz9gRxPYcR+cBt6MN9s5ApVomHKheOPC0F95avuepPtSVy/cA+vXrR9++fVm1ahVgnXLfrFkzHn30Uf75z39WWYvNM08u37PFQ12+J1NUVERERESNX75XXFxMTEyMTy7fyzXksvSPpXyX8h0AkdpI7m9/P5M6TqJOWB23xMlospB+oYDGdSLR5xcSGhdDek4xsfoStv7lKXqe/RMAiyyj7zeIVjMmE3vTAOSgIOc05ZxBs30x4sjnSAiQZETb21B6zkTTdhhCDvK5sidJEiUlJYSHh6vL9ywWdDqdfXZQIGiqyvK9yrYXvq6pKsv3yn+eBsTyvRdeeIGUlBSGDRtmP0FGURSmTZvGyy+/7O7beQ1bAN1ZEcF60pptDwB/KLSeqohms5n8/Hz7tMFA0FSVTlVeXh6RkZFe7VTl6nJZcXCF/cSX6OBopnWaxoS2E4gLj7N/mHmz7AHk5uYSERFhP/LeV+Lk7bJ3ZXvhaU0Wi4VTB35Dt30V3Yu30Uiy/u4cDTjd4E5aDprEoPbdkWTZq/VJURRyc3PtHSpfi5M3yx5Yn4qFh4cTFBQUEJpcTQshyM/Pt3/pcLcmb+HOPlRJSQlnzpyx/3z27FkSEhKoVasWzZo1Y8GCBUyfPp3evXvTt29fli9fTmlpKTNnznSrJk9hi3nUpdPAajLly39NRgjrkjVPDhy7gkkx8dHxj1h7eC06sw4JiWHNhjGt8zS61e5mb2uqit5oBpOJ8P98wtmPPkIpKkKOjiZu8mSipk6hv1SAAYnSHn1pOX0StYcNRZFlJNmJGaaF52Hba8gJH4OwIAFKy1uQe8+CdqNADgKNplqX6V0LW/0ICwur7qxUOzYv1L0ofbe9qA584fPU7fPcg4OD2bRpEydPnuTjjz/mP//5D0lJSWzYsKHSxxlXJ96Yfm40GmnevLk9Db4/ve9Gmlyd3nf27FmaN29uTweCpqpMP9dqtciyd6afGwwGvk76mru33G0fkLop7ibeuvUtZnacyYW0C1XW5GqcZNl6PLpNhy/FqTqmnzdv3tzj08/PpaXxx3/f4fTLA+i0dSy9S34lSFI4rOnMr22fpGziv4kf/yStOvcm68IFr9cno9FoH0jwxTh5s+zJskxkZCTZ2dkBo8nVOBUXF9O8eXN72hOavIE7+1D79++nR48e9OjRA4AFCxbQo0cPnnnmGQAmTpzI0qVLeeaZZ+jevTsJCQl8//331K9fv0oavLl8z2Qyqcv3Li3fq1+/vrp8z8v9J2c07cncw/ivx7Psz2XozDpaR7fmifZPsHjwYtqGt7XHrKpxys/PJ8hspPDdd8h76y2UoiIAlKIict9+m/wPP6LBiy9Qb+lSaj33JKE3D0TSam+sqSiLwk3zYVVPpIMfIAkLNO2P8Z41nOn7CnQejd6s+HR98lb/yR/qU2pqKs2bN1eX711Kh4SEIMvq8j350gPmgFq+Vx7bpf15JNaT088lSaKoqIjIyEj7k11ffhLtyafrFouFkpISoqOjEUIEhCZX42SxWCgsLCQuLs7jM6WS85N5ad9L7MvaB0CTyCbM7TqXUS1GEaoNrfayJ0mSve5dT58/zuyobNm7sr1wt6biglyOfruKVskf0xDrh5hRBLE//GbodA/xt4wjIvr6baC3ZkoVFBQQFxcH1OyZUpIk2Z/y2bzxd01VSRcVFREVFWXPrzs1OTv93J34ex/KG8v3yn8++HL59HSdk2WZgoICoqKiavzyPW/1n26kKas0iyV/LOGntJ8A6+zzSR0mMbH9ROJC4jxS9jBbSLz5ZvuAVHnk6Gja7tyJHKx1TlNJLvKeN2HvGiSTDgDRMB6l12w03cYjtOF+U5883X/yp/pU/vuW7f7+rsnVOLnSXvi6JlfjBFzz+5bfLt8D+OCDD1iyZIl9pKxdu3Y8/vjjTJ061RO38wo2o23/VzVt+wJRXFxMdHS0vUDYGstrpSVJumbado1rpd2V9+tpciUtSRKyLNu9CBRNrsZJkiRKS0vtDYMnNBktRt498i7rj6zHpJgIloMZ124cMzrPoFFkI8pTnWXP1pjFxsbeUJMraX+qT862F5XVlHbmKBk/LKNb9rfcJFmPc88jmkNxt1O37wT69h5CkNYxQ6O66xNwWf3wtTi5osnVsqcoCiUlJcTExASMJlfTFdUPT5Q9bxCIfShPIISw7wdS07F5UdNPkRJCUFJSYu8zVAdGi5GPj33M2sNr0Vv0SEiMaD6C6R2n07VeV8CxFYi7yC428NOBs0zsVLvCASmwzphSSoqRa9W6gYAS2LsGeddKJIP1WqJuB+g9G7pOgJAon12mdy1s9UM9qVPdi7I8vtBe+Aq+8Hnq9uV7b7zxBvPnz+eOO+5g8+bNbN68mZEjR/LQQw+xbNkyd9/Or5FlmaZNm17Wca6pqF448LQXf2T9wbivx/HWobcwKSa61e3G0iFLeaLPE1cNSFU3arlw4E4vhKJwZMc3HFx8O00/GsSAnC+IkAwkS035pcnDlE7dytD/W0+XAbddNiDlC6hlwoHqhYNA8SIQ+lDeXL5nMBjU5XuXlu/VrVtXXb5XVIRGo0GWq2f53s7zO7l3y72sOLgCvUVP6/DWvDr4VZ7r+xyhhaFIkuTWspeYlslrWw6ybPa/6PjsX9BERyFfYyaCHB2NHBl1bU0mPbn/fQFWdIdfXkQyFCHiWmIZ/gKnBr2N0ns2Zm2EX9Yns9lM06ZN1eV7l5bvNW3aVF2+dyltW+4bKJqqsnzPdj9PaHIGty/fa9myJc899xzTpk277PX333+fZ5991m6yv+DJE3cUxboM5coZMTUR1QsHnvIiX5/P0v1L+TrpawBiQ2KZ3mk6E9pPIDrENzf5U8uFA3d4oS/Tcej7d6l9ZANtlGT76we1PShqM5r44Q8QW7tq+8l4GrVMOFC9cOBpL7x1+l4g9aE8vXxPCEFeXh5xcdalUL6+PMKTSz4kybrUPTo6Gq1WGxCaXImT2WymoKCAWuVmA3lD07nCc7z+5+v8nPYzADHBMUzuOJmJ7SZSK7yW28teYZmZ9T+f4OInmxhz4n/UMli/HDdavx7jwYPkvPXWVfWxziOPUGv2LDTh4ZdrMuqRD3+GtP01KLJ+ySW6MUrPGUg9p0FUfb+vT2D9Em9b3loT2whb2mw222fE2Faq+LsmV+PkSnvh65pcjdOVn6fu1FRty/cyMzMZOHDgVa8PHDjQPoqn4qCsrEydNngJ1QsH7vRCCMGXZ77k9f2vU2gsREJieLPhzO46m851OrvlHp5ELRcOXPUi+8I5Er9dSbtzm+lHgfVaIpgDkUPQdhtN/ODRhIb5z7R2tUw4UL1wEAheBGIfytZRLT9YWJW0bTmlEAKDwXDd5czl0/60XNvZtE2Hoijo9Xr7XnuBoKmitDOaDAaD1zQZLAbeO/oe7xx5B71FjyzJjGwxkhmdZ9Cxdkf7e91V9or0Zt79LZG0jzcx7viP1C2zztrQx9ah9sTxhHdoT1TfPiBJ5H34of30vVpTp1L7wbnIISGOayoWOPIFml9fhvxLg90RdaHndOg1Azm26TV1u1OTN+KkKIr98+F67YU/aXI2XZEmmxe26weCpuvpuJ4md7cXvqDJlfSVn6fu1uQMbp8p1aVLFyZNmsSTTz552esvvvgimzZt4siRI+68ncfx1tNRFRVPkFyYzAu/v8D+C/sBaBbVzLqReatRhGhCqjl3Kp7mzNF95P5vOd3zfyREMgFwgVocrzuKRgMfoG3XAchBHtlaUEUloPBWXyCQ+lCeninlb0+iVU2BpenX1F9ZcmAJ54qty2k61urIzC4zGdp4KCHaELdqKiozsWFnMmc++YLxR76noS4XAEN0HHHjxlJ/0v0EN25kf7/Q65G1WizFxWiiohBmM4SEWHUAyolvkX57GenicQBEaCxSjylYes5ArtMmoOIUiGVP1aRq8idNzs6Ucvsc9+eee45nnnmGkSNH8sILL/DCCy8wcuRInnvuOZ5//nl3386vURSFnJwce+GoyaheOHCHFwaLgTcPvsm4r8ex/8J+QjQh/5+98w6Pqsr//+veaamTSiCE0HtHREBFUFFEBQFFLKCiYlnddRfd1d93d91d15VVESuKYsEG9rK6C1akF+mdhIRQkgDpkzL93t8fw8xNIAnJJJOZTM7refJwmHLnvN+fc++cOfecz+HWvrfy5pVvMqXXlFYzICXahUZDvXC73Wz/6WN2PTWOnp9dwcjS/2KSnByUe/Bz17mod33PpQ+8Sp9hY1rlgJRoExrCC41w8SIc+lAtlVNKURR2797ty3UR6jk7GqIJ/MvZoSgKeXl5ZGdnh40mf+JUXFxMRkYGiqIETFNWYRa//em3/O6X33Gs/BgJpgRmp8/m1Utf5crOV5KTndNsmiw2J898s5NHHlzAgD/fx283fUhqVRGO6FiYcRPtFr9Gl0cfoUSv82kqKChAUZ0gq8gmFSQVWaeSn59P1e5vYfFlyJ/M9AxIGWMo6jsT2y1fw5VPklWitpocOI1pezabjcLCQjIyMsJGk79xys7OprCwkIqKirDR5G+cCgsLfccPF03+xklRFPbt24fl9EYJYZFTCmDr1q08//zz7N+/H4B+/frx8MMPM2zYsOb+qIATyDt94OmsJScno9fr2/RIqsvlorCwkJSUFICw0ORvnFwuFydPniQ1NdXXDhujaVP+Jp7c9CRHy48CMLTdUO4eeDcXpV2EXqdvVaP44Ll4dujQ4aw1zsGOU0u3vTOvF2dqKi8rYe+KxXQ8+C5dVM8XlVuV2BYxEnuf6xhy2Y1EmxNDSpM/cXK73Zw4cYLU1FQkSQq5OLVk2wM4ceIEKSkp6PX6sNDkb1lVVU6dOkW7du3Q6XRBu9PXHIRLH6olckpV/34I5fYZ6HNOkiROnDhBu3bt2nxOqab0n+rTZHfbWbxrMUv2LsGhONBJOiZ2m8gdA+6gZ1zPZtVUbnOyZG022z75L9fv+C89LHkAOCOiiJ48ibRZt2Ls0aNWHarTBmsXIG16HWylEBEPI+9FHXU/0ltXQmEGqj4CBl6PdP7duDsMRj59zWwt1/vm7j+1Rk3+xqn67y1JEjmlGnu9CHVN/sbpzO/TYPSfmn2mFMDw4cP54IMP2Lp1K1u3buWDDz5odZ2plrjT53A4SE1N9ZUh9EdSz6XJ35HUw4cPk5qa6iuHg6am7B4DnotFYzQVWYv4/fe/554f7+Fo+VHiDHE8OOBBFl6+kHRXOjarLWia/I2T94LpjU0oxSkYu8ekpqZy7NixGpryjhxi/esPoj4/kNEHnqKLmku5Gslq8yS2jnkL89QXuXjab5D0ESGnyZ84ORwOrFYrsiyHZJxasu3JsozRaKSgoCBsNPkbp/LyclJTU33lQGhqKcKhD1Udb0dVluUGlSVJqrfsHXSUZZm0tDRfzgrv45IknVWG+nN2eD+/rnJD695UTXWVz6VJlmU6duyIwWAIG03+xEmv15OWluara3NokiSJlcdWMuXrKbyx+w0cioOBSQN5ZuwzPHHRE/RJ7NNsmqxOhVdXZvKb379Gp7/+lj+tXkwPSx4uYwSmKdPotfR9uv/jb0T06lW7DkcV0toFSKue9gxIgeffVU8jbVgI4//hGYya+QXS5Feg03noTt8Ub8k4tXTb0+l0pKamYjAYwkaTv3EyGAykpqb6rhvhoMnfOPlzvQh1Tf7GSZZrfp82t6aG0Cwzpbw/ohtCa8vLFOiZUkVFRSQkJIiZUi4XJSUlJCUlAWKmVPVZY+fS4XK7+OrQVzy/7XksDgsSEld2uZI7B9xJv+R+IaHJ3zgBNWY/hFKcWrTt2SqQDUawlkFkHIrTSe7hfZz871MMLV+FQfJcT3JJ4UD7a+l88U30HHA+SHLoamrCTKmCggLfXb5w0ORv2wPPUo2kpCQxU0pVKSoqIjExsdXNlArXPlSg83ApimfJRXJysi9ubRXhhYfm9uGI5Qj/3vxv1uauBSApIolZ/WdxQ+8biDPFNfn4XqocLt7bcIRVn/3A1G3fMKgoGwC3wUjElRPoOOtWIgcPQjqXJrcDnu2lDUhVJyIeHskASQe61rd0vymI80NDeKEhvNAIpBcN7Qs0y1Wp+m4GdaGqao3BmNZG9RHFMx/zp+z9ge0tVx91rP6aM8v1jaR6j1FXubnqXp8mf8r1jQiHi6bGxqmh7e1QySGe2PgE209tB6CruStzBs/hqq5XYdQZQ0pTfTrqKnt/JJ7rOK1JU0PL3rqoThvS+peQNmtT8eUL5tB55H10jjgOFW726PpT2H0ygy67hctTu1CdUNTU2LK4RtSuyTvoEojvp2Bp8rdcfZCqtmM2h6ZAEe59KG9smnvQ1HtM773VUB40DfRAsHeAvvrSxtauyd84Nba91aapwl7BW3vf4t297+JUnOgkHdd2v5bb+t1Gr8Rezaapyu7ig41H+OHLlUze9i2PnzroeZ9Oj/Gyy+k86xYihg1D0umQGqLDWlr7gBSArRTVXo4UnRwScWrJtufF7Xb7rrWtXZO/cfL64X08HDQ1JU6B+n5qbeeTty7e79Pm1NRQmmUobOXKlfz888/1/nlfI9CQZZmUlJQaHee2ivBCoyFe2Fw2Xtr2EtO/mc72U9sx6UzM6jeLN698k8k9JtcYkGrNtPV24bZXoq5ZgLy65lR8afWzqJsW4Zi0kPXDF9DjD98x7tb/R9IZA1LhSFtvE9URXmi0Zi/CrQ/VUonOZVnGYrHgcrmA0F5eGugls7IsYzabOXLkSNho8idOFovF90PJH02lpaX8cOQHJn85mTd3v4lTcdI/tj9PjXqKv1/4d+QSuVk0HcjM4q21h7nl/72P7m+P8sSK5zj/1EEUWUY37jISX3oB08O/J/qCCygrLz9nnAozNuP46iEwRntmRNVGRDyYzCERp2CkP0hJSfGVw0GTv3E6cuQIKSkpWK3WsNHkb5xKS0t9AzvhosnfOMmyjN1u9+kIm0Tn4UQgp58risLJkydp3759q+xINyfCC41zebEudx1PbnyS4xXHARjefjh3D7qbCzteiCyFl3dtuV2oqgpuB9L83nVOxVf/mIkUJgOQDaUtt4kzEV5oBNqLQC9FC0dEovOWnSklEp03LdF5VkkWT//6NBvyNwCQHJnM7f1vZ2qPqZgjzM2iyanAss1H+fLr9Vy99VvG5u4AQJUkdKMvosOtN2O+ZAzo9Q2LU+lR5DXPou5YhqS64aalqHk7kFY/c9b5qI59FC56CMkYHfQ4tXTbA5HovHq6FJHoHL+vF6Guyd84nfl92pyaGpr+oFmW7+3atavBrx08eHBzfGTY4E1KKRBeVKc2LwqthTyz+RmW5ywHIDEikdkDZnND7xuIMca0dBVbjLbWLiyWUvZ89zZdSzfT8Yan652Kj80C0cktWb2QoK21ifoQXmi0Vi/CvQ/l7ahWHyxsStm3tFlVMZlMvqUHoby8tKGaGlv26lAUBaPRGFaaais3RJPJZGpUfaucVSzavoj3972PS3FhkA1M6jGJ2/vfTvf47lTHX00Ot8InW47z8dcbuWLrtzx1dCs6PHMC5AtG0uHWm4m99FJko3aTqd44lR1HXj0ftr8PigsJIH2k531jHgZJgjN235PGzAV9xFnHbI3Ltc9VPrO+iqJgMBjQ6epPl9KaNDW0XJsmb8J37/HDQVN9OurT1NjrRWvQ5E/5zO/T5tbUEJplppR3xOxch6o+Yt1aEHdHBcFGURU+y/iMF7a+QLmzHAmJq7pexV0D76JPUp9gV0/QTGTs/pWCX15jUOFyzFIVRCWh/n430oL+YqaUQBBkAtkXCNc+lOg/CUIZVVVZkbOC+Vvmc6rKs8T0vJTzuG3AbYztNBa93PT79g6Xwmdbj/PhN5u5dMv/mHBkE3rVM0tBGnoeqTNvJvaKK5BP/zA+J5Z8WLsAti7xJDUHSDsfzp8NA6Z6lu8BOKo8ycxtFogwg9upPScQCAQtSIsmOveuexQ0DkVRyM/PJzU1tcaIZFtEeOHB6rSil/WU2cuIM8VR5iirMTuqm7kb9wy5hwldJmDQtc5ZAY0h3NtFlbWKnd9/QMzu9xjk2k1vAMmzi15mzFVcaLeiH3kv8qqnz3qvMvJeVJcTXRsblAr3NtEYhBcardkL0Yfyj9Yc8+ZGeOGhoT4cKjnEvM3z2HxiMwApUSnc3v92ru99PdGGpg/eON0KX2w7zjvfbmfMlv/x1OH1GBVP7jNpwCA6zLwZ81VXIUdGNuyAFadg7Quw5S1weXK70GEIjLgTBl4PptiarzdGoSgKBRVu2kXqa8zAaouI80NDeKEhvNAIBS+aZVCqS5fwT64bKCIb+oXUBmjrXtjddt7e8zZLDyzF4rBgNpq5ue/NPDbyMQ5bDjOyw0hu638bKdEpwa5qixKO7SI7cx+5P75G/5NfMxpP0kS3KrHTNJyqHtcw6NIZjEtJA0C9eC4KIFebiq+MvBfp4rnIhojgiQgi4dgm/EV4odFavQj3PpQ3f0Vz5yEBMJlMvhlmoZ6zI5B5SCRJIiIiQuy+pyi+5Ti11b3KVcXCHQtZdmAZbtWNQTZwXY/rmD1wNp1iOvmWrviryeVW+GL7cd5ZsZuRvy5nXtYaItxOz4nQqzcdZt2K+eqrITISuSGarCWo616AX99EclYBoKYMQBpxF0r/aRAZV2ecAJ9vTdEUDucTeL4fxO57nt33IiMjfY+Hg6amxKm+60Vr1eRPnKDm92lzamooARsK27dvHytWrOA///lPjT+BhizLJCYmtvnRWRBeWJ1W3tz1Jot2LcLisABgcVh4fdfrLN2/lJcufYm5589tcwNS4dQu7A4HG1csZeu8K+j6wYWMOfkeSZRRQDyrE6dzcMIHDH7kv1w8Yy5xpwekACRDBOqFD6H+MRP1j1mefy/8HVIbHZAKpzbRVIQXGuHmRWvuQ7Xk7nvFxcVi973Tu+9FRUWJ3fcsFux2u69teDUVFBSwbOcyJn01iQ/2f4BbdTOi/QieHPwkD/R+gM7mzk3SdOBgBp9tOcq1T3/Hzn8t4MmP/8pNGT97BqS6difx//4f0r/+ScKNN+LQ6c6pyXLyCOVfPwovDkZa/5JnQKpdX8rGPsmJq9+FEXdRWOmsN06yLGO1Wn06QilOwdh9LzExUey+d3r3vcTERLH73umy0+lElsXue7IsU1lZGV6772VnZzN16lR2795dI0eCdxQuGPkQunbtitlsRpZlEhISWLlyZYPfG+jd93Jzc0lLSwubjrS/tHUvnG4n4z4Z5xuQqo7ZaOaXG39pE8v1ziQc2sWxYzlkfbeI3sc/oyMFvsf3GAZR0nUi/cfNICmt5zmPoygKxcXFYfXD2x/CoU00F8ILjUB70VL5kUKxD+UvLbH73rFjx+jUqZPYfU+SOH78OKmpqW1+972CggLat2/va4eZpZn8a9O/2H5qOwAdojpwx4A7mNprKhG6iCZpUpH4dlc+r63YzaAtPzI9YyVm74ymTum0u+VmEqZNRRcX1zBN1lLkza+jbngFye75wasm9UQ9707koTehRCY0OE5AjfMjlOLU0m0PIC8vjw4dOojd91wuTpw4QceOHZEksfteXl4enTp18p0zrV2Tv3E68/u0OTW16O571XnooYfo1q0bP/30E926dWPz5s0UFRXx8MMPM3/+/Ob+uAazfv16YmJCa4cySZKIjY31dTbbMm3ZC6fbSbGtuNYBKfDMmCp3lpOoS2zhmgWf1touXC43W9f8F3Xzm5xXtZZ0ydMpKiOaPXGXYR46iT6jrsUY2fDcFZIkodfrW50XzU1rbROBQHihES5ehGofqil4O6rVBwubUq6+m09cXJzvuVDf3aihmvzZ3UhVVcxms+8Hdzhoqq1cnyZvTk5jvBG36sbmtrFs/zIW7lyIoiqYdCam9ZzGzP4z6WzuzJk0RpOiqPx3z0kWfreXPr/+zOMZP5HoHURqn0rKrTcRd/31GJKSzqlPkiSwlyNteh1p/ctgK/XsppfQHYbPRhp2K1K05zjVh9vPVV9VVWucH6ESp4bUvanlM+urqiqxsbE1+lCtXVNDy2fq0Ov1xMbG+gYWwkGTv3HS6XSYzeYaz7d2TU0p13W9aKnd95p9UGrDhg38/PPPJCcnI8sysixz8cUXM2/ePH73u9+xffv25v7IVoskScTHxwe7GiFBW/Vic/5mXtr+Em9c8QZmo7nOmVKxhtha3h3+tLZ2ceLkCfatWEzXnI8YqR73PChBhq4np9In0mvsTVzUdYBnu+ZG0tq8CBTCBw3hhUa4eCH6UA0nXGLeHLR1L+rKyXlLv1v49vC3pESlMHvAbEZ3HI0s+T+TUlFUlu85wcvf76frlpX838EfSbGWAqAmt6PdTTOIv+F6DB06NOyAjkrYvBjWvQhWz9Ia4rvA8Nkw7FaI8T9lQ1tvE9URXmgILzSEFxqh4EWzz3F3u93Exnp+QCcnJ5OXlwd4EnkePHiw0cdbvXo1kyZN8k0z/Oqrr856zcKFC+natSsRERGMHDmSzZs313hekiTGjh3LiBEj+PDDDxsvKkAoisKRI0dqTLVtq7Q1LwqqCvjT6j9x1/d3sbNgJ1tObuGWvrfU+tpb+96K6/SuLW2N1tAuFEVly4afWfPcTZhfHcxlh+fTXT2OVTWxKWY8O0a9QJeHf+biO56kfbeBfg1IeT4n9L1oCYQPGsILjXDxorn7UOFMuMS8OWjLXpwrJ+eLl77IS5e+xEVpF/k9IKUoKiv25HPNC6v4/N+L+dPSx3lox2ekWEtR4xNIuuceen60jHYPPtCwASmnFTa8Ci8OgR//5hmQMqfBpX+BO7+DMX9o0oCUp85tt02cifBCQ3ihIbzQCAUvmn2m1MCBA9m5cyfdunVj5MiRPPPMMxiNRt544w26d+/e6ONVVlYyZMgQ7rzzTqZNm3bW8x9//DFz585l0aJFjBw5khdeeIEJEyZw8OBBUlI8F/S1a9eSlpZGfn4+48ePZ9CgQQwePLjJWpuKJEkkJCS0+uUGzUFb8cKluFh2YBkLdyyk0lmJhMT4LuNJjUpl5OCRSEh8eOBD352+W/veyl2D78KkMwW76kEhlNtFYUkJu1a8Q4eMDzlfPeR5UIIjcieOdZxIjzEzuKDXeUhyw6eu1kcoe9GSCB80hBca4eJFc/ehwplwiXlz0Ja90Mt6lh5YWutzyw4s497B9/qdk1NVVX7Yd5IXfzhIwtZ1/P7Ad3Qu9yTuV2PNJF4/jYSbb8LU0B00XXbY+i6seQ4qTngei02FYbfB8NsgrlP9728EbblNnInwQkN4oSG80AgFL5o90fl3331HZWUl06ZN49ChQ1x77bVkZGSQlJTExx9/zGWXXeb3sSVJ4ssvv2TKlCm+x0aOHMmIESN45ZVXAM9IX3p6Or/97W957LHHzjrGH//4RwYMGMAdd9xR62fY7Xbsdrvv/xaLhfT09IAl6qyr7NUSaonQhCb/Ne0q2sWTG58koyQDgO5x3bl7wN1M6D4Bg+xJTGp329HLesqd5cQaYnEqTiJ0ESGrKRzjVJ8mRVHYuX0zJWsWM7xkOXGSZ2cKp6pjV9Qo6HcNfcfMIDIusdVoCsc4CU1CU3NramiizqYSyD5USxPoROeifQpNdrcdi8PC+M/G19kOV81YRbwxvlGa3G43Kw8W8OKPmURu28ht+1fQo8wza1GNiiZh6hTMN95IVO9eDdPksqNu+wB57XNg8eyYRUwK6tBZqMNmISd1C+s4CU1Ck9DUdjU1tP/U7Mv3JkyY4JvR1LNnTw4cOEBhYSGnTp1q9s6Uw+Fg69atjB+vfRnJssz48ePZsGED4Jlp5d2ysaKigp9//pkBAwbUecx58+YRFxfn+0tPTwcCs6VxVVUV2dnZHDp0qNVsGXkuTf5uGXno0CGys7OpqqoKG03eOOWX5jP3+7nctvw2MkoyiNZFc/egu3npopcYbByMUWf0aYo0RGIptXAi+wQ6SUdVWVVIamqptqcoCtu3b6ekpCSomvZlZPLz56+z48kxDPtmApeVfkacVEm+lMK6DjPJuGopqTPfYPjkB6h0KgGJk81mIzs7m4yMjJCLk7+a/IlTVVUVW7Zs8X3RhYMmf+OkKAp79uzhxIkTYaPJ3ziVlJSQnZ3NkSNHAqapJWjJPlSgWLhwIf3792fEiBFAYPpPNpsNRVH49ddffXEN5fYZ6HNOURQOHjxIdnZ22GiqL06lllLe2vwWN//vZmKNsZiNtf/Q8ebkLCoqapCm0tJSVh48xTUv/MIr85dx57In+cfGt+lRlocaEQGTJpH69pt0+MufyZU4t6aD+2Hb+/Dy+cj/mwuWXNSoZE4Nug9mf0flqLnklKkBiVOo9J9Coe2J/pOmKTs7m+zsbCoqKsJGk79xKiwsZNeuXSiKEjaa/I2Toihs27YNi8USEE0NodlnSgUSSao5UyovL4+0tDTWr1/P6NGjfa/705/+xKpVq9i0aZNve2Xw5GqYM2cODz30UJ2fUddMqaKiIhITE3G5PLl99Hp9vWVZ9iQoravscDjQ6XRYrVYMBgMGg8H3uHf3FJfLVaNsNBp9Aa+trCgKer2+znJD694UTXq9vs5yfZqcTidOp5PIyEjcbndYaLI77Hxz5Bte3PaiL8/B2E5juaPfHQxPHe4bQT5Tk9Pp9I0qe7eyDRVNLd32dDodZWVlxMbGotPpWlST2+3mYGYG+T8vYkjBf0iRSgFwqxJ7I87D1nMifcbOIC6lc4u0vTOvF6EUp5Zse263m/LycuLi4uo8h1qbJn/j5D0/oqOjMRgMYaHJ37IkSVitVkwmEzqdrtk12Wy2FpkpFU4EeqYUeDrpMTExyLLcpu9Ey7JMRUUFkZGR6PX6sNBUV5w2ndjE/C3zfbPOF41fxI5TO1i0a9FZbfD+wfcze+BsXwqEujRJksTqjFO88OMhHDu2c9u+5Qwu8gzwqQYjcVdPJOHmmzEO6I/u9A5u9WpChd2fwupnkIpPHycyAWnIrajDb0dJ6I4uwHGSJKnG+dHScQqltidJElVVVURERFTbQbF1a/I3Tm63G5vNRlRUlO/zW7smf+PkdruprKwkNjYW73BIa9fkb5yAOq8XrXamVKjRvXt3du7cyc6dO9mzZ0+9A1IAJpMJs9nM+++/z6hRo7j88ssBfCONxcXFvpHGgoIC30jjyZMnfaOL+fn5vnJubi4VFRUAHD16lKqqKl/Z4XAQExPDkSNHcDqdAGRnZ+N2u1FVlezsbN8FxHv3y+l0+kZM7XY7R48eBTyzB7zliooK3+ipxWLxjZ5aLBbf6GlpaSkFBQXNrsk7oJeTk9MoTUeOHCEmJgaHwxEWmnae3MnN397MPzf+E4vDQqeITjxx4RP84/x/kGhLRJKkOjWVl5dTWVmJJEkhpSkYbc/bqfLejWgJTRU2Bz9+9S6//vsq+n18EVcUvkeKVEoR8axLup5dl7zJgIf/R8/L76LCqWuxtudyuYiJieHw4cMhFyd/NfkTJ4fDQWFhoa+TGQ6a/I2TJEm4XK6AfD+1lmuEV5O3M5WXlxcwTQL/8HZUvQOE5yp7O8h1lXU6na+zbDabfe+t/viZZah/y23vMeoqN7TuTdVUV/lcmiRJ8m15Hy6aziwfLjvMb1f+lnt+uIeMkgyi9FHM6j+LHvE9uHvw3dw/+H7fjCmz0cz9g+/nrsF3EWmIrFOHJElsyC5m+qINPLngS6Z+/Czz1yxkcFE2ql5P7NVX0+WtxXR86l9EDR2C3mCoX5Oqotv3JdKro5C+us8zIBURDxfchzR7OUx4Eqldb3QtEKczz4+WilMotj1ZlomJiUF/ekAxHDT5Gye9Xu8beAgXTf7GSafTYTabfc+HgyZ/41Tf9aI5NDWEVj1TyuFwEBUVxWeffVYjz9Ttt99OaWkpX3/9dZM/M5B3+lRVJScnh86dO2M4/UUX6iOp59LkbcSNHUl1Op0cPXqUrl27+hpxa9RUai1l4a6FfHLwE1RUIvWRTO81nZn9ZpIam9ogTd4fQd27d69xwQuFOLV021NVlaysLLp37+6bWREoTQezsjn8w+sMyP+CdOmU7xqw3zCA8u5X03fcTcR26BG0tnfm9SKU4tSSbc/lcpGdnU2PHj189W/tmvyNk3cgpWvXrhgMhrDQ5G9ZURRycnLo0qWL74dHMO70CTS8/adAeeZ2uzl8+DDdunVrVMc3HAlnL4ptxby24zU+zfgUt+pGJ+m4ossV3Nr/VoYkD/H1k6xOK3pZj8VuwWwy41JcRBoi6zzuhqwinv8xg1M79jLrwHdcmL8HAFXWEXv5ZSTMuJHoUaOQ9A3YE0pR4MA3sHIeFOz3PGaKhcEzYPhsaD/A7513/SWc20RjEV5oCC80hBcagfSioX2BZt99ryUxGo0MHz6cn376yTcopSgKP/30Ew8++GBwK9cAZFkmLS3N1wluy1T3ohWNk/pQVIVvsr5hwdYFlNg96/cvSr2I2YNmc37786ERkmRZpmPHjq3Wi+Yk0OeIzeFi4y/fotv2DiNt6+gjuUACC9EciB9H0vDr6Hn+1ehM0UGPh7heeBA+aFS/VrR1RLtoe4iYa4SjFw63gw/3f8gbu96gwumZ/Ti8/XBu7Xcr49LHYZBr7qgXaYhEVVWi5Wj0sr7OHfc2Hy7m+R8yOLpzPzMPfM8luTuRUVEliZhLLiFhxo3EjBmDZGjAjn2qCgeXw8qn4ORuz2PGaBg0Hc6/E9oPgiDFJBzbhL8ILzSEFxrCC41Q8CLko1BRUcGOHTvYsWMH4Em2tWPHDt9SgLlz57J48WLeffdd9u/fz/33309lZSWzZ89u0ue2RKJOu91OZGQk2dnZrSYR2rk0+ZsILTs7m8jISOx2e6vT9OPOH7ljxR38df1fKbGXkBaTxv8N/z9+m/5bRqaOxGF3NEpTWVkZpaWlSJIUcnFq6bbn9cC7TKe5NK3asJnlbz/B8XnDuHTDHVxiX4VJcnFI14PNPX5L5S3fkjz5SXqMmYHVqYZE2/PmXDt06FDIxclfTf60PbvdTn5+PpIkhY0mf+MkSZ48SoFKJB0MTf7GyWKxEBkZyfHjx1t1onNBw5EkicjISN9MmbZMOHmhqirf5XzH5K8ms2DrAiqcFXQxd+Gvo/7Kq5e/yhVdrjhrQMqLJElERETU6sPWI8XMfHMTDy74L6M+e5XXf3qWcbk7kFGJHD2atOefp9PLLxF72WXnHpBSVcj8ARZfCh/d7BmQMkTBsFlw+7dwzfOQOiRoA1IQXm2iqQgvNIQXGsILjVDwIuSX7/3yyy9ceumlZz1+++23s2TJEgBeeeUVnn32WU6cOMHQoUN56aWXGDlyZLN8fqCX71VfehHqyyMCvXyv+pK11qCpylXFqztfZdmBZbhVNyadiak9p3LHgDvoGNPR7zg5nU6ys7Pp2bOnWL6nqhw6dIgePXo0efmezeHi102rcW58k1GVPxEtefLL2DCyN/ZiYoZMpsuoKUTEJIRk2zvzehFKcWrJtudyuTh06BC9evXy1b+1a2rK8r1Dhw7RvXt3sXxPUcjOzqZbt25i+V6I0BLL97KysujRo4dYehEmXuwq2MWzvz7LjoIdACSYEpjRdwYz+swgOTK53vdaHS50skyFzUFMhBGXohBl1LP9aAnP/5jJ3p2HuCnjRybkbMagejaRiTj/fBJvuonYK8Yjm0znrqCqQvYvnplRxzd7HtNHwICpcP5sSDsf5NDwP1zaRHMgvNAQXmgILzQC6UXYLN8bN27cOZfMPPjgg61iud6ZyLJMly5dxLRBanoR4uOkqKrKipwVPLf1OQqsnmS8I9qP4M6Bd3JB+wswGoxN0iDLMp07d24VXgSa6l74S25BETu/e5fOWcu4BM/sByQ4LqeR12ki3S+6kfN6DgdZ5/uhG4qI64UH4YNGc5wf4YJoF20PEXON1u5FXkUeL2x7geWHlwNg0pm4pvs1zOo3i54JPc/5fofTzYlTZaQlx6Avt4A+jpOF5SQlmfn7e2sZseFb5h5ej0nx7NppGjKExJtuwnzVBOTIuvNO1SBnLfz8Lzi63vN/nQn6T/bkjOo8KmQGo7y09jbRnAgvNIQXGsILjVDwQkShDlpq+Z7JZBLL904v3zOZTCG/fC+jMIM538/hsbWPUWAtoH1Uex7o+gAvjnuRke1Hkp2V3eQ4lZWVUVxcLJbvnV6+V1hY2Ojle1abnfWbN/G/Z+8geuEQrsl6gkFk4lR17Iy6kA39/067369myK1PUSwlIOn0IX8+OZ1OTCaTWL5nt5ObmyuW71VbwiiW73mW75lMJrF8rw0hSRImk0ksvaD1elHhqOCFrS8w6ctJLD+8HAmJSzpdwsuXvczjox5v0ICUzeFCcTiI+mIphy+5hNxLx3L4kkuI+mIZEQ4b87e+w/VZqzEpLoz9+tHhiSfo+vZbxE+d0rABqaOb4N1JsOQaz4CUzgADpsHMz2DKIuh6UcgNSEHrbROBQHihIbzQEF5ohIIXIb98L9gEevle9aUXob48ItDL96ovWQs1TVaXldd3vs57+9/DpbgwyAYmd5/MHQPuID02vVnj5HQ6OXToEL179xbL91SVjIwMevXq1aDlewWlFfz63YekHPyQEeou33l8UkrmaIcr6XLhDJL7jkaV9a3ufDrzehFKcWrJtudyucjIyKBPnz6++rd2TU1ZvpeRkUHPnj3F8j1FqbHUVyzfCz6B7D95X3vw4EF69+6NXq8P6fYZ6HMOICMjgx49emA0GkNek4LCl4e+5JXtr/g2h+mX2I/bB9zO5Z0vxyAZGhwnV1UVRW++RfGrr57VBpPvv5+IAf05+fyLxN98E/GTJyHHxDRMU942pJVPQdZPnoPJepTeE5GG34HUfSxu5JC+Nja2/9Sarvei/+R/nKr/3pJlOSw0+Rsnf35vhbomf+OkKEqd14uW6j+JmVINxGu09wQ+V7l6466trNPp0Ol09OjRwzcg5X3c2wjOLAP1lr2fX1e5oXVviqb6yvVpMhgMvnWsoaRJlmV+PvYzU76ewtt738aluBjabijPjXuOv4z+C13juzZ7nPR6fY0vi1CKU0u3PVmW6dmzp++zatOkKCpb9+zjfy/9DvWFgVxz4FFGqLtQVIm9Eeexd+jjxP12NSPufY2UQeOQDaZWeT6deb0IpTj5q8mftqfT6Xz5pMJFk79x8p4f+tNbloeDJn/L3vPDOyAVCE2ChtESM81tNpsvvi6XZ0lWKM/kC/TsRFn27Jzk3QQolDV98usn3PDNDfxz4z8psZfQIaoDDw97mP/r9n9c0/0aJLfU4DipqoqsN1D6wQfURvGHHxI9ZgxxbyxCufIK9GbzuTXl7cD2znVIb14OWT+hSjqcPa+Cm5aSfd5fsXW6CHSGkJ9FKssykZGRvtiE08zYxrY9l8tFjx49fOVw0ORvnI4ePUqPHj2wWq1ho8nfOJWWlhIbG4ssy2Gjyd84ybKMyWTy6QjGTHMxU+ocBPJOnyRJvpFOb2c41EdSz6XJ20ls7Eiq1w+vJ6Gg6Xj5cZ7a9BRr89YCkBSRxO39b+eGPjcQpYsKWJzcbjeKoqDX6/GenqESp5Zue94fHDqd7ix9hZYqNv34Oea97zPa9St6yfOeEuLIanc56aNuILH/pegjIkNKk79xOvN6EQ6a/Gl73i89793OcNDkb5y854d3UCYcNDWlXP162dyaxEypxhPomVIATqcTvV7v++4M1fYZ6HPOqx/w9R1CTVNWWRYLti5gXd46AGIMMUzrOY2b+95MWmxao+Lkdiv8uP8kv2QU8M+xaWRedHGd7bDX+nXI8fHn1pS/C2nV00gHvgVAlWSknuNRht2O1Gs8kiGiVV0b6+s/tfbrveg/+R+n6r+3vJ/f2jX5Gyd/fm+FuiZ/4wTUeb0QM6WCTEvc6auqqiIzM7NVjaSeS1NTRlIzMzOpqqoKuqaM7Axe+vUlpnw9hbV5a9FJOib3mMyTfZ/k5l43E2uMDWicSkpK2L59O4qihGSc/NHU2DgVFxfjtleC4kRnL0VSXbjtlRQUFLB++27+8+qjVD43lGt2PcgY9yb0kkKGsT+7+j9C/uSPGHT3ItoPv4asI0dDRlNT42Sz2cjMzCQjIyNsNPnT9qqqqtiyZYvviy4cNPkbJ0VR2L17NydOnAgbTf7GqbS0lMzMTI4ePSpySoUY3o6qLDfvTD5F8ey46P0xEcoz+Rqqqa7yuTQpimf5qvd9oaSp0FrIk5ufZPq301mXtw6dpOPqblfzxhVv8MiIR+hk7tTgOCkqfLU9l4kvreGhJRsw/ecz5Kgo5Dp+6MhmM/LpmRB1airMgE9uR359zOkBKQl6XIY0/V248X3k/tciGSKaJU61lQMVJ0VRyMrKOmuwvrnbXktqqk9HfZpUVSUzM9OnIRw0+RsnSZLIzMz0DWiEgyZ/4wSe/oB3QCUcNPkbp/quFy0101zMlDoHYqZUy4wOh8pMqbW5a5m3eR7Hyj0/mgYkDuDOgXdyaedLkVsof4CYKSWjOm2oaxYgb34dbKUQEY9ywb1Io3+D862JGAv3AVBBJJmJl9Ju+HW0P+8aDJGxIaupqXE683oRDpr8iZN30EDMlBIzpc4sn9mZak5NYqZU42noNtD+4o1N9c5zWyUUvbC5bHyw/wMW71pMlasKgAs6XMAt/W7hkk6XYJANDT6W3eXm8625LFqVRcHJYq49vJ4bDq3C7Kik08JXsO3ZS+Frr531vuQHHiDp7rtqT2heeAhWPQ27PwVO/xTqdgkMvwv6TABDA3flC1FCsU0EC+GFhvBCQ3ihEUgvGtoXEINS5yCQnSpVVXG5XDVyYLRVgu1FfkU+T//6ND8d9SS0jDfFM6v/LG7sfSPxEfEtWpdgexFs3PZKpHUvIq9++uwnL/kjdBxKzmd/pazb1fQYewsxaf2hDfjU1tuFF+GDhvBCI9BeBHqAJRxpiUEp0f49hJIXiqqw/PByXtz2IvmVntmP3eO6M6v/LK7udjVRhqgGH6vS7mLZ5qMsXpONpaisxmAUgD41laR75hA/dSpFi9+k+P33USwWZLOZxFmzSLpnDrLJVPOgxYdh9bOwcxmongFtulwE598FfSaCseH1C2VCqU0EG+GFhvBCQ3ihEUgvGtoX0Dfrp4Yx3juxzXknWlVVsrKyxO57avB233MpLt7f/z6Ldi7C5rYhSzITukzgjgF30C+pH4qioKpqi84YcLlcbXv3Pb0BafPrtZ+ImxejPpJB2txL6BwR4/GnNWhqhjideb0IB03+xMntdpOZmSl238PTiTh06JDYfU/x7L6XlZUVsN33BKGHN+a9evVq1BKBcCRUvNh+ajvP/vosuwt3A5AYkchNfW5iep/pJEcmN/g4ZVVO3t2QwzvrDmMrK+faw+uZnrWKWLs2GBU//Qbip03D0KEDAEl330XyfffisljQm82oLlfNAanSo57BqB1LQfEkxyd9pGcwqu81YIppHhNChFBpE6GA8EJDeKEhvNAIBS9ETqk6aImcUk6nk759+5KTk9MqcnYEMg9JTk4Offv2xel0tpim/+35H9O+nsYL217A5rbRy9yLf1/8b+Z0mkPniM5IkhSU3Crl5eWYzWZ0Ol3IxSlQba+s0sEXX3/O1qV/A0u+Z8lebdhKwV6OIcoc8pqaO05ut5u+ffuSnZ0dNpr8iZPT6cRoNKLT6cJGk79x0ul0tGvXzqcjHDT5G6eKigr69u1LXl6eyCnVRtDpdPTt27fN/5iA4HtxrPwYD//yMLctv43dhbuJ0EUwvfd03rnqHe4bcl+DB6QKyu3MW76fC//9E6/9bxdX7FjBez8+xZ37/kesvRJ9airJv/stXZctpd1vfuMbkAKQdSqSrGKIlJBkFVl3eiGIJQ++nQsvnQfb3vMMSKWdD5NfhZmfw5AZYTcgBcFvE6GE8EJDeKEhvNAIBS/E8r1zEOicUk6nE51OJ3JKud243W4MBgOqGticUgVVBTy37TmWH14OgNlo5uY+N3NT35tIjkoO+owBt9uNw+EgIiKiRo6UUIhTc7Y9p6Ky/tetlG1eyqDi7+gh5UFUEvx+NyzoX/vAVEQ86h8zkXTGkNQUyDideb0IB03+xElRFOx2OxERnsSz4aDJ3zhJkoTNZvMN0oWDpqaUq+/E1tyaRE6pxtMSy/ccDgdGo9E3q7itEiwvLA4Li3ct5sP9H+JUnEhIjE0fy8x+Mzm//fno5Ib9wDleUsUbq7P5+NdjyNYqJh1ex/Ss1cTUmBk1nfjrp2Fo3/7sA7hssGYBbNLyUDLyXhj9ALxzNZzc43ld6lAYficMnAIRcc1hQcgizg8N4YWG8EJDeKERSC9ETqlmIpCdKrfb7Vtu0NZHaVvCC5fi4qMDH/HKjleodFYiIXFZ58u4c+CdDEweiCyFxsTBcG4XiqKy7UAWx9d9SOfc/3IeB33P2TGQGTOCPne8im73MuRVZ+eUUsY+inrhQ+hM0S1Z7ZAgnNtFYxA+aAgvNALthcgp1XgC7Zlo/xot7YVTcfJZxme8uuNVSu2lAAxIGsDt/W/nsi6XYdKZ6j/AaQ6dquC1X7L4ekcuRruVSdnrmJ69muiGDkYBOKpg3QuepOVncjoPJSvneZbpDZwGkfGN1tsaEeeHhvBCQ3ihIbzQCKQXYlCqmRAd0fBgx6kdPLnxSQ6WeAZBusd15+5Bd3NFlyuI0EcEuXbhT2buKfb98gkJWV8xyr0No+QGQEHiUMRAnF0vo8uF04hOG4ik03t231u7ALnaXU9l5L1IF8/1bc0sEAgELYXoCzQe4Vn4oaoqq4+vZv6W+eRYcgDoGN2Rmf1mMrnnZOJMDZt9tCe3jIUrD7Fi7wkiHbazB6M6dtRyRtU1GOXF7YBne9U5u5pHDoK9CqITGy5UIBAIBM2CSHTezHiXBzT38j273Y7BYBDL99xunE4nJpOpWZfvlTpKWbBlAV9nfQ1AtD6aG/vcyMz+M0mOSPZNUQylZSxutxubzUZUVFSrXr6XX1zB1lX/wbj/c0bb19FLsnpOJgmO6LtSkjaOziOvo3v3UegjolAUBdXzNKrOiDr6IdRLHgGbBSLMqC4H6IygqiERp2As36t+vQgHTf4u37NarURFeXZICgdNTVm+V1VVRUREhFi+B9jtdoxGY0CW7wlCD1VVsdlsREREiKUXLeDFweKDPLvlWTblbwIg1hjL9b2u55a+t5Aak9qgY2w+XMzClYdYlVFAlNPGjOy13Ji9mkh7FdDIwSgv1tJz5KGsgOiGJ1kPF8T5oSG80BBeaAgvNELBi9BYrxSCtESi86qqKnJzc1tNItlAJ8fNzc2lqqqqWTSdLDjJO9veYdKXk3wDUpd0uoR5Q+dxW9fbSIlKCdmEvyUlJRw4cABFUUIyTvVpyi8o5vOvvuDb+XchvTiQa3fez5WOH4mVrJySktnRfhpZ415FP+tLhs5+EVfyQIotFbVqKquyo6AjK7+UsvIqdKaYkIpTS59PNpuN3NxcMjIywkaTP3Gqqqpi9+7dvjw/4aDJ3zgpisKhQ4c4ceJE2GjyN06lpaXk5uZy9OhRkei8jaAoCrm5uWLQkMB6UVBVwOPrHmf6N9PZlL8JvaTn2u7XsviKxfxh+B/OOSClqiq/HDzF9EXrufH1Dfy69xg3Z/zIBz/N4/b9K4i0V6Hv2JHk3/2Orh8to9399zdsQOrUAfj2YTBGe2ZE1UZEPES0zVl64vzQEF5oCC80hBcaoeCFWL53DgKZ6Ly13YluLZr2F+/nnxv/yd6ivQB0ju3MnQPuZGL3iUToIlqlplCOk93pZvOOHRRtWkb/guX0lo77zp9yosmOH038wCtIGX4dkQmprUJTOMZJaBKahCaR6LyxdO3aFbPZjCzLJCQksHLlyga/Vyzfa91YXVbe3fsub+95G6vLM9N5ZIeRzOw/k4vSLsIgG+p9v1tR+W7vCRauPMTePAtRThtTDq9levYaImyewWJDx47ETb+B+Ouvx5CS0rCK5W6DNc/BgW89/79pKeRth9XPnv3asY/CRb8HY1RDZQsEAoGgGRE5pZqJQHaqVFWlsrKS6OhoMW2wGbwos5fx8vaX+eTgJ6ioROojub7X9czqN4uOsR2bucaBozW0C1VV2ZmZQ86aZXQ69h/OZ7/vOTsGDkWfh6H35aSPvp7Idj3ATx2twYuWQnjhQfigIbzQCLQXbXWApWvXruzZs4eYmJhGv7cldt8T7d9Dc3qhqArfZn/Li9te5FSVZ5VAj7ge3DbgNq7qehVRhvoHeJxuha+25/LaqiyyCyqJctqYlrOO67NW+z8YpapwZJ1nMCrrZ+3xLhfBqAeg52Ww9vmzd98bMxfaaN5QcX5oCC80hBcawguNQHohckq1AlRV5dSpU3Tt2lWcDE3wQlEV/pP1HxZsXUCJrQSA0amjuXPgnZzf4Xz0cutq5qHcLrJOFLF35afEHfqSUa4tDJVcACiqRFZEP2ydL6XLRdfTP30wkq7+u6gNIZS9aGmEFx6EDxrCCw3hRdtDxFyjubz49cSvPPvrs+wv9txoSo5M5qY+NzG993QSI+tPFG5zuvlkyzFeX5VNbqmVKKeV246sZ1rWakzW04NRaWmewahp0xo+GJX5vWcw6pgnlxWSDN0vg2EzofeVnuV7ABf9HvWSR1CtpUiR8UhuZ5sdkAJxflRHeKEhvNAQXmiEghdiptQ5aKt3R1sLB4sP8q9N/2L7qe2AZxeY2QNnM6nHJKIN0UGuXXhQYLHy66pv0e35lFG2NcRJVb7njuk6U5g6li6jriO+98XIxsgg1lQgEAgCQ2vsC6xevZpnn32WrVu3kp+fz5dffsmUKVNqvGbhwoU8++yznDhxgiFDhvDyyy9zwQUX+J7v1q0biYmJyLLM73//e2699dYGf35r9KytcsRyhAVbFvDzMc8spEh9JJN7TGZmv5l0MXep90dKuc3JBxuP8ubabIoqHEQ5rcw4uoEpmasw2vwcjFLcsO9rWLMATu72PCYboPcEGHYrdL8UDKK/IRAIBKGOmCnVClBVlfLycmJjY8UIbSO9qHBU8OrOV1m6fylu1Y1JZ2JKzync1v820mPTW7WfodAuqhwuNmxYi3XrMs4r+4GrpSLPExIUSYkcTR5D6rCrSR06kfSohm0B7Q+h4EWoILzwIHzQEF5oCC/OprKykiFDhnDnnXcybdq0s57/+OOPmTt3LosWLWLkyJG88MILTJgwgYMHD5JyeuBg7dq1pKWlkZ+fz/jx4xk0aBCDBw9uaSm1ImKu4a8XZfYyFu1cxEcHPsKlupAlmXGdxjGz/0zOSzkPnayr873FlQ6WrDvMkvU5WGwuopxW7j6+kUkZv2D0d2aUywG7PvYsxSs+vcGAPhL6XQtDZ0KXC0FvbHYfwhHhhYbwQkN4oSG80AgFL8SgVAPxJlVtzqSr4NlpLTIyEr1e36YTybpcLkpKSoiO9sxuqkuTJEksP7yc+VvmU2AtAGB4ynBmD5zNqNRRGGSDr17B1uRvnNxuN8XFxcTExOCdyNgScbI7nGzds5+CDR/S59RyLpeOeBq/BJVEcihuNOZ+V9Bx9DSGmtu3SNsDKCoqIjo62rflfajEqaXPpzOvF+GgyZ84KYpCUVGRL8dNOGjyN07g2akuKioKvV4fFpr8LauqSklJCVFRUeh0umbX1BqZOHEiEydOrPP5BQsWMGfOHGbPng3AokWL+O9//8vbb7/NY489BkBaWhoAqampXH311Wzbtq3OQSm73Y7dbvf932KxAIHpP3nbT/Xvh1Bun4E+5yRJori4mMjISAwGwzk1uVU3yw4s4/Vdr2NxeOI0OHkwt/W/jUs6XYJJZ6pT06lyB2+szmLZ5mNYnW6inFbuzd3INQd/wVBtMMo8/Qbip07F2L49brfb14erVZOzCnXru8gbXgGLZ0dOTLGo/aegDJ2JrtP5qLJHrwwh138KxbYHov8k+k9n66j+e0uSpLDQ5G+c/LlehLomf+N05vdpMPpPcoNf2cZYuHAh/fv3Z8SIEQCcOuVJ9ticW247HA66dOniK0Nob7kdyG3EDx8+TJcuXXzl2jStP7CeOd/P4dE1j1JgLSAlKoXfD/w9f+n/F8amj6W8tDykNPkbJ4vFgsFgQJblgMfp0KFD7Dh4mK/feZodT41j1NeXcF3BIvpKR3CiY2/kCDb3nIt8/xr63rcUZ/fxmOI6tFjbk2UZvV7v0xFKcWrp88nlctGlSxdfORw0+RMnh8Ph+yIMF03+xkmWZWJiYigoKAgbTf7Gqby8nC5duvjKgdAUTjgcDrZu3cr48eN9j8myzPjx49mwYQPgiZvXy4qKCn7++WcGDBhQ5zHnzZtHXFyc7y89PR0ITP/JZrMhyzJOpxOXy5PbMJTbZ6DPOVmWad++PUeOHKlXU2lpKZ/u+JQpX0/h2S3PYnFYSItJ4w/9/8A/B/+TCd0mUF5SXqumXw/k8MjHWxnzzM+8vS4HubKCB47+wkc/z2PKjv96BqRSUzE/+CBdli3FMn487tNLNerSlLV3G+rq+fDCYOTv/h9YclEjEznV7w64Yzm28f/msDMZdPqQ6z+F+rVR9J9E/6k2TUeOHKFLly5Yrdaw0eRvnEpLSzGZPAPw4aLJ3zjJsuzrVwdCU0MQOaXOgXcdZElJCfHx8c06OixJEhaLhZiYGN+d3VAfSQ3U6LDb7aaiogKz2YyqqjU02dw23tj1Bu/uexeX4sIgG7i227XcMfAOusR28Y30h5omf+PkdrspKysjISEhYHf6jhdZ2PXL58RmfMEo52YiJKevzR8y9qUifSzdR19PTNdhqJIuaG1PkiTfuVefvtZ6Z6Ixbe/M60U4aPInToqiUFpaSkJCAtC2Z0pJkkRpaSlms9nnTWvX1JSyxWIhNjbWV9/m1FRZWdmq8yNJklQjp1ReXh5paWmsX7+e0aNH+173pz/9iVWrVrFp0yays7OZOnUqAG63mzlz5vDQQw/V+Rm1zZRKT08PSP/JG6fq3w+h3D4Dfc7JskxpaSmxsbHo9fpadewv2c+zvz7L1pNbATAbzdzQ8wZu6n8T7SPb11n3gyfKWbQ6m2925qGoEO2wMufUJi7fuxJ9tZlR8dOnEzt1CsaUlHNrshbBxkXw6xtIds8POzWmA9KQm1CH3IKS0B3d6RlfodZ/ai3XRtF/Ev2n2nRU/73l/fzWrsnfOPlzvQh1Tf7GCajzetFS/SexfK+BeI32/tvUsvcHRHl5OWaz2dcgvBfLusqSJNVZ9h6jrnJz1b0+Tf6UJckzqGSz2Xw/rrysPL6Spzc/TX6lZwR4cLvB3DXwLsakjcFwxu5uoabJ3zhJkkRlZaXvwtBcmkoq7Gxasxxp18dcULWaSVKF50kJcnVpnOowlk4XXEe3vpegM5295XMw2p73YhYfH1/v64MRp5Y+nxp6vWhNmhparq4DqHF+hIMmf+OkKAoVFRXExcWFjSZ/y7WdH4Foe22J7t27s3Pnzga/3mQyYTKZAlijmqiqJweGt/23ZbxeeJc1V+dE5Qle3v4y32R/A4BBNnBV16uY2XcmvRN7o9dpS3+rs+NYKQt/zuSH/Z6ZbtEOK/cV/sqlu39Cd+YyvWnTMKak1HqcGpQdR1r3Imx7H8ll9dQ9vgsMuRllyM3oErp4Xneu49TjQ0VFha/P0JYR54eG1wtvipC2jNcLkUdJXC+qEwrXC7F8L4jIskx6enqNjnNbxOq04lbdGOOMuFU3VqeV/Mp8HvjpAX6/8vfkV+aTFJHEH877AwsvW8hlnS87a0AqnGjOdmFzulm5bi3fvPAbyp8dyFWbbmeC9X8kSBUUS/FsT7qW3MtfIWXuOobNeY12Q66qdUAqWIhzREN44UH4oCG80BBeNI7k5GR0Op1vmr+XkydP0qFDhyYduyXSH3iX79ntdrF87/TyvZSUFF/dKysr2Z+1n1e2v8Kkryb5BqRGthvJk4Oe5B8X/oMOug6cPHGyhiZVVVm+LZsZi9YxZeE6fth/ihiHlUdPruGjlfMYv/k/ngGpjh2JefBBuny0DOvEidgiIurVdHT7zyhf/gZeHIq8+Q0klxU1qTfHhz+GMnsFroseJvOUDSSpyekPdDodsiyW78myZzmOWL7nWbKXnp4ulu+dXr6Xnp4ulu+dLnuX+4aLpqYs3/N+XiA0NQSxfO8cBHJLY0XxLEM5c0ZMW8LutvPmrjdZemApFocFs9HMLX1v4eZ+N3PHijs4ajnKxG4TmT1gNj0TeiJL4e9TU9uFW1HZuvcA+es+oEf+/xgoZfueqyKCzNiRRPe/kk4jpxGRkAohfKdEnCMawgsPwgcN4YVGoL0IZF+gJZCkmsv3AEaOHMkFF1zAyy+/DHg87Ny5Mw8++KAv0XlTCGT6A+/yheLiYhISEtDp2m6ic6vLikE2+PpQTsXJutx1PLXpKQptnh8kveJ7cfuA2xnfeTyR+siz6uhyuVl58BSvrspm+9FSAMwuG78r2cKo7T+gq/L8ONF36kTC9BuInaIt06tX06m9SGsXoO79CgnPzw21wxAYNhMGTEOJTGjWOLlcLkpLS0lMTPS1w1CJU0u3PaDG+REOmvyNE3h+xHuXt4aDJn/j5HK5fDNivCtVWrsmf+Pkz/Ui1DX5G6czv0+bU5NYvtdKsFqtbXbaoNVp5e09b7No1yLfYxaHhUW7FqGi8ueRf6bMXsbY9LGYdC23JCAUaGy7UFWVg0fyyVj9ESmHv2KEsgudpIIELnRkRAxB7XkZXS+czpAOvaEV/YBty+fImQgvPAgfNIQXGsKLmlRUVHDo0CHf/w8fPsyOHTtITEykc+fOzJ07l9tvv53zzz+fCy64gBdeeIHKykrfbnytAavV6ssv1xZxKA7e2fNOjRt7N/e9mVv63UKsybM85+Y+NzO151SSo5N9P2S8uNwKy3fl8+ovWRw84bnrH++28fvSrYzY+j3y6cEoQ6dOxN1wA+ZpUzE1ZJne0U3Ia+YjZX4PgASo6SORhs5C6XctcmS853XnOo4fWK3WZj9ma6Wtnx/VsVqtxMbGBrsaIYHVahXLOk8jrhcawb5etJ5fpmGILMukpaW12TvcelnP0gNLa31u2YFlDEsZxpVdr2xzA1KNaRd5RRb++/m7/PLUZLq8M4TJ2f9glLoTnaSSZejFjm5zqJz5X/o98h0Dbvgr0R37tqoBqbZ+jlRHeOFB+KAhvNAQXpzNli1bGDZsGMOGDQNg7ty5DBs2jMcffxyAGTNmMH/+fB5//HGGDh3Kjh07WLFiBe3bt2/S57bk8j2r1dpml+9ZnVbe3PUmi3YtwuKwAJ4be6/vep2l+5fy1OineHvC29zY9UYqCytraLK73Lyz6iCXzl/JQx/t4OCJcpIUG0+WrOfDH59i5JovkasqkdLSiHzwAbosW4pj0rVUnp5lUqsmVeXk+mUob02Et69EyvweVZKh+zhyLnkRx/SPYPgsMo+eDOjuxd5la6ESp2C1Pe+1UCzf8yzZS0tLE8v3Ti/fS0tLE8v3Tpf1ej1i+V6Zb9aUWL4XwgR6+V5xcTGJiYltsiNdbC1m7Cdj63x+1YxVJEYk1vl8uKIoii8JYW3toqzKwaa136Ps+JjzK38hWbL4nsuTUznR/hI6XTCZpP6XojO17qSObf0cqY7wwoPwQUN4oRFoL1r78r1g0BLL9woLC0lKSmqTy/cUFMZ9Ms43IFUds9HMLzf+gkFnqKGj0u5k2eajvLkmhxMWz4+M9pKDP5RuZfCmFUjVZkbFT7+B2KlTMSQn16/J7UI6+F+kNQsgf4enArIepcd4pGEzkXqNxy0bW2QZi8vlori4mOTkZJ8XwY5TMJfvVT8/wkGTv3ECz85icXFxYvmey+XbcU4s32v89SLUNfkbpzO/T5tTk1i+18x4A9icJyKA0+n0bVfaGhptc52IBVUFmE1mzEZznR2qWEOs7/WtQVNzxEl1WpH1BmJ1DiTVhdvmRDJG4lRUNm7eRPmvyxhY/D1XSic8RklQgpmchItIHDKBDudNIjU2yadDVdWga2pqp8put/uWG4RKnILVqap+vQgHTf7GybvtfDhp8idO4LkT5T1+OGjyt6yqKk6nM2CaBKGJ0+kMdhWCQrGtGDfuWvtP4JkxVe4sJ1HnubFnsTr5YNNR3l57mOIqj2ed9E5+X7qFARtWwOk74ob0dOJuuB7ztGmY2rWrv+27nbD3C6Q1C5AKDwKg6k3Q+2qk825DTR+NZIzw5K08/R3WErTVNlEbwgsN4YWG8EJDeKERbC/a9q3VemiJ6ecOh4PU1FRfGUJ/et+5NJ1rel9GRgZfZH7BdV9fx4a8Ddzc9+Za/b+1763YnfZWoak54lRZWYnkdiCtexHp2V7I83siPdsLacOLSI5K8hbfzNjvJ3JtyXt0lU5gxcSO6IvIOP8flN30LV1mLqTLuNmcKrOGjKbmmn6uKIqYfn56ynlqamqbn37ucDiwWq3Ishw2mvyNkyzLGI1GCgoKwkaTv3EqLy8nNTXVVw6EJkHDaMnle5WVlW1q+V5hVSFPb3qaGd/OwGz03NirDbPRTIwhhsIKO0/+ZxcX/vtn5n+fQXGVk256Oy9UbeKN//2TAT9+DpWVyJ3SMD7wG7osW4o6dSplp28E1arJaaP0x+dQXhoGX96LVHgQ1RANQ27hyIR3qbzqReh5GYeP5bb4dcRi8QzSybJYvif6T6L/VJumI0eOkJqaKpbvnS7Lsme5b7hoasryPZfLJZbvhTKBnH4OUFRUREJCAnq9PuTvRDf17vqJyhP8Y8M/WJe3DoCL0i7iubHPsWTPkhpJOm/teyt3Db4Lo2wMeU3NFSe3vRJp3YvIq58+uxFe8kfoOBTXR7PINA3C1e0yOl94A7Ed+yDrDSGrqblmSp06dYp27dqJ6ednXC/CQZM/cXK73RQUFJByeuencNDUlJlSBQUFJCUlodfrw0JTU2ZKFRUVkZiYiE6na3ZNDZ1+LtBoieV71b8fQrl9NvWcK7WV8s7ed1h2YBk2t+fHweIrFrP15NYam8V4uW/wfYxtfyPXv7oFu8tTlz5RCr8t3kKPNf+tMTPKt0wvKal+HdYy2PoO8sZXocLzo4eIeJQB1yMNvw2pwyAUpKBeR1wuF4WFhaSkpPi8CJfrveg/if5Tc8TJ5XJRUlJCUpJnVUU4aPI3Tv5cL0Jdk79xOvP7NBj9JzEodQ4CnVOqsLCQ5NPr9cMVVVX5PPNz5m+ZT6WzEr2sZ2rPqdw18C46xnTE5rKhl/W+QSmX4iLSEBnsarcYVQ4XkbIbaX5vsJWe/YKIeNSHD1J2dBdxXYYg6dtO4ve2co40BOGFB+GDhvBCI9BeiJxSjSfQnrWF9m9xWHhv73t8sP8DKp2egaSu5q7c2OdGrutxHSadicW732RZjd33buHuQXdz//u7WHnwFEPMEr8p2kyXld+ienNGdU4n/obpxE3z5Iyql6pi2LQINr2u9VGiU2DwDDhvFiT1ghDxvy20iYYivNAQXmgILzSEFxqB9KKhfQExKHUOREe0aeRW5PL39X9nY/5GALrHdef+IfdzWefLMOqMQa5d8Mg5Vca+zT+iZHzHsOgi0m5cAC8OrvP16h+zkKLP0XEUCAQCQUAQfYHGE+iZUq3tTnRjNFndVpYeWMqSPUsod3qWiKTHpHND7xuY3GMyCaYEHG6VT7YcJzVBx8U9Uyi3VxJrimZN5knyStz0jVKpWvoBaT//B7V6zqjpNxA/bRq6xMT6615xEnX9K7D1HaTTA2KquRPS0JtRBt+ClNgVqR59bSFOQpPQJDQJTUJT88yUatvDgkFGURTy8/N9jSOcUFSFjw58xLSvp7ExfyMG2cBNfW7itfGvcVW3q84akApnLwDsLjcbdh/kyyUL+OnJa4lf2I+rt9zJtZaPSSvbjhqdDBHxtb85Ih4i2uaPoHBvF41BeOFB+KAhvNAQXoQOLZVTSlEUduzY4ct1Eeo5Oxqiyeqy8tzq57jq86t4efvLlDvL6Rjdkd8N+R1P9HqC2/rdRpwhjuzsbHSyzBfbjxPhBL0boivcnn8dCvaPl5Jw9410/GaZZ0AqLY12D88lfvEb2CZOxJCcXKem4qxt2D+7H14cjLTxFc+AVGIPikY+Rsn0L+HSP5NrNVB2On9TKOVWKS4uZt++fSiKEpY5cBqjSVEU9u7dS0lJSdho8jdONpuN/Px8MjIywkaTv3HKzs4mPz+fioqKsNHkb5wKCws5cOAAiqKEjSZ/46QoCrt37/bl5RM5pUKQQC/fC8ftvI9ZjvG3DX/j1xO/AtArvhf3D72fsZ3G1jk7Khy9yC2pYueWNdj3raBr8VqGkIksaaebhRiOxAxB13kUva5+EN2vi5BXnZ1TShn7KOqFD6EzRbdk9UOCcGwX/iK88CB80BBeaATaCzFTqvG0RE6p6ltYt+Y70VWOKj4/9Dlv7X6LIlsRAO2j2jOtxzSm9p5K+6j2vrrklVr5fu9JJg7qQLSkULXkbUo/+ADFYkE2m0m49VYSZ83kyMxZqG438ddfT+yU6zClpNSv6dQ+5HUvou75DEn1PKemDEAdNhN58AyUyAS/4tSSMwb82eI91DX52/aAOrd4b62a/I0TQElJCXFxcSKnlMtFWVkZCQkJSJLIKdXY60Woa/I3Tmd+nzanJpFTqpkQHdGGo6gKS/cv5cVtL2Jz2zDKRqb3mc4dA+6gQ3SHYFcv4DjdCjsOHefoluVE5vzIMMcWUqXiGq85putMcdJ5JPcbQ9Lgq4iIbw86AwCq04a6dgGyN29DRDzKyHuRLp6LZIgIgiKBQCAQgOgL+IPw7Nw43U6+yPyCN3a/wakqz4yy5MhkpvWcxvW9ric1JvX0jx6VtYcKeX/jEX7af5L4KCOb5l5E8VtvUfzqq2cdN+n++4mbNhU5KgpDUlL9lTi+FdYugAPfao+lnQ/DZsGAKRAZ33yCBQKBQNCmaGhfQN+CdRKcgaJ4lhukpqa2+rvcOWU5PL7+cbaf2g5A34S+3Df0Pi5JuwTD6UGX+mitXpwqt7Fl21Yqd/+XtMI1DFf3MULybE+NBDZM5EQOwJ02gk7nXUXHrueRHmGuNSmoZIhAufAh1EseAZsFIsyoLgdyGx6Qaq3tIhAILzwIHzSEFxrCi7ZHa465U3HyTdY3vL7zdfIq8wBIjEjkuh7XcWOfG+kY0xFZkimpdPDZ1uN8uOkIOUVVvvf36RCLzqCn9IMPaj1+yYcfkvyb+5ENdfS/VBVy1sCa5yD7l9MPStD1Ihh2G/S9Bkwxzai4ZWjNbaK5EV5oCC80hBcawguNUPBCDEoFmcjI1r3LnFtx88H+D3h5+8vY3XZMOhM39bmJWf1n0T66faOO1Rq8cCsqu4+cInPLDxiyvmdQ1WaulvO1F0hwSk7hZPxQ4ntdSLth19A3sRMYoxp0fJ0p2jPVUTERLenRmdpuMngvraFdtBTCCw/CBw3hhYbwIjTxLhVo7iUfACaTCe+E/1BfHiFJEk6Xk+U5y1m0axHHyj25QeKMcUzqPokb+9xIl7guKG6FncfK+GDjUb7dlYfd5TlWlFHHuF7JXG8ooM/B73Cd6oRyOv/HWZ5bLCjl5ciJiTU1KQrqweXI656H454UC0g61B6XoQ6didxnAorOs8OvfI6YheoyFpPJ1Kj21ho0+dP2zjw/wkFTU5bvRUZG4na7kSQpLDT5Gye3201kZKTv8XDQ1JQ4NfZ60Ro0+ROn+q4XTdXUUNr2sGCQkWW5VecCyS7N5rYVtzF/y3zsbjv9k/rz7CXP8tB5DzV6QCqUvSitcrBi4w6Wvf4vfnliAj2WDGH63geYYvuaHnI+LnRkmfqxt/OtlFz7NgkPrWHQbz4kfeIfiOjQu8EDUl5kWSY2NjYkvWhpQrldtDTCCw/CBw3hhYbwInRoqUTnsixTXFyMy+WZnRzKiWRLSktYkbOCyV9O5s/r/syx8mNE66K5sceNLLlqCdMSpxEnt+PTLce56vlfmPrqej7fdhy7S6FrUhS/ubgzbydl88iX8+j497lUrfgOfWIich1LIWSzGTkmRtN05DDs/gzl1dHIH98Cx39F1Rmp6H4N3PIxRVe8xMmkkWCIbNUJfy0WC3a73dc2wi0xc2M0ybKM1Wr16QgHTf7GyeVykZiY6CuHgyZ/43TkyBESExOxWq1ho8nfOJWWluJ0OpFlOWw0+RsnWZaprKz06RCJzgNIVVUV/fr1Y/r06cyfP7/B7wt0ovPc3FzS0tJaVUfapbhYsncJr+14DYfiIFIf6Zsd1S6qnV/HDCUvVFVlX14p+7asQs34jn7lGxgkH67xmjLJTJ55CFHdRpE89GqiUrohRZhB1jX580PJi2AjvNAQXngQPmgILzQC7YXIj9R4WiLR+bFjx+jUqVPIJjqXJImfjvzEa7teI6MkA4AofRRXd7uaGb1n0DOhJzlFNj7YmMPn23Ipt3kG2PSyxEU9k5jUw8yo/WuxfrQU14kTnmMaDESNGUOH//t/lH35JYULz84plfzAAyTedSc6ow5150ew9nmkEk8/RjVEIvWdjHLebdBpBLLBFDazIFwuF3l5eXTq1MnnRWvX5G/bA2qcH+Ggyd84AeTl5dGhQweR6Nzl4sSJE3Ts2BFJEonOG3u9CHVN/sbpzO/T5tTU0ETnbWb53r/+9S9GjRoV7GrUQJIkYmNjfdPmWgOZJZn8dd1f2Vu0F4CByQO5f/D9jE4bjUE+d+6ougi2F+U2J5v2H+bEtuXEH/+Zkco2Bkinp8Wf/n1zzNCN8uShpAwYQ2y/y+kXkwzGaGjmOgfbi1BCeKEhvPAgfNAQXmgIL0IXb0e1+mBhU8o6nXbzJy4uzvdc9cdrK0uSVGfZ227qKje2jpIksSZ3DQt3LGRf0T4AIvWRTOg6gZv73kw3c09WHijiiS+3sD6ryPe+lFgTEwd2YEpHPR1++hrLq59RXlHhOb7ZTOyVVxB//fVEDhiAZDSSdM89ABS/r+2+lzhrJkn33I28/0v46Qmkck/OKkxmGDAN6bzboeMQ5Go30ZorNnXFqTHlpsRJp9NhNptrPNbaNflbX1VVa5wf4aCpoeUz66uqKrGxsej1+hptpTVramj5TB16vd63GiNcNPkbp0BcL4KtqSnluq4XzaGpIbSJQanMzEwOHDjApEmT2LNnT7Cr40OSJOLj44NdjQbhVJy8tfstXt/1Oi7FRZQ+ilv73cotfW8hOSr53Ac4By3thaqqZJ0qZ9u2TTj2r6Bn6XrGSgcxSO7TFYIqIsiNHoi+8/m0G3wlaWkDkaPiQW8KaN1aU7sINMILDeGFB+GDhvBCQ3jR9gjFmKuqysb8jSzcsZCdBTsBMOlMXNHlCm7qexOJ+h58uiWPjzav5lS5HQBZgvM6J3DN4FSuMpSgfLwEy4oVlJ6e4aHv2BHztdcQP20axvR0pGqdfFkHSdMuI3nOXbhLi9DFJ6EWHUZ22zw76pXnQVQyDJoOw2+D5L5Q7cdGuBGKbSJYCC80hBcawgsN4YVGKHgR8oNSq1ev5tlnn2Xr1q3k5+fz5ZdfMmXKlBqvWbhwIc8++ywnTpxgyJAhvPzyy1xwwQW+5x955BGeffZZ1q9f38K1rx9FUTh27Bjp6ek1RiRDjQPFB/jrur9yoPgAAEPbDeWewfcwquOoJs2Oqk5LeGF1uNmUmcuRrd8TfeQnLnD+yo1ygefJ0x95UteB0sQhJPa5kNh+E+iV0N5zd1HXcqdKa2kXLYHwQkN44UH4oCG80BBetD1CLeZbT27lle2vsOXkFgCMspHLOl/GjD43UWFJ47UVufywfzVuxZM1Iy7SwPh+KUwe3IFBx/dS/vrfKd282Xc8U79+xF03GfM116BPTj57FqCjCta9gLzqaYhKQh/THipOIlUVwSV/hAlPwZH1nt30Ers2+6zuUCTU2kQwEV5oCC80hBcawguNUPAi5AelKisrGTJkCHfeeSfTpk076/mPP/6YuXPnsmjRIkaOHMkLL7zAhAkTOHjwICkpKXz99df07t2b3r17h9yglCRJJCQkhOxyA6fbyeu7Xuet3W/hUl1EG6KZ1W8WN/e9mcTIxGb9rEB5caSokk07dlG5Zzmdi9YyWtrDOMlzdxIZnOg5HtEHpeN5pAy8lKSuI2gfFQ+m2KB14EK9XbQkwgsN4YUH4YOG8EJDeBG6ePNXBCIPSVxcnO9zgpWzY1fBLl7d+Sob8jcAoJf0jEsfx7Vdp5N1LIU/fnCcw4VbffXslxrL1YNSmdQnEfPaHymZ+2dOZmd7ntTpiBo5EvN1kzFffjlERvp0nKlPp9PDptc976sq8vx52bwY9ZI/IfUcj4pnBpcsSWGfL8a7ZM1bl3DQ5G+czjw/wkGTv3Hyfj94XxMOmpoSp4SEhBqvDwdN/sTJn+tFqGtqSpzqul6I3fdOM3HiRJ588kmmTp1a6/MLFixgzpw5zJ49m/79+7No0SKioqJ4++23Adi4cSMfffQRXbt25ZFHHmHx4sU88cQTdX6e3W7HYrHU+IOanaqGlFVVrbfsTbxnNpvPetzb0M4sA/WWvZ9fV7mhdVcUhb1Fe5nx7QzPcj3VxXkp57Fg7ALuHXIv8ab4OjXVV65Pk6IovuRnTdFkdThZe/AE7yxbyof/upOqF0dy45qrmF3yIpfLW4mS7JTICWQkjOXk+X/EPuu/dH3gC7rNeJqYYdPQJ3ZGMcbgzf7fFE3+xklVVWJiYnwXukC0vZbW5I8O7wUx5vQOQuGiyd84Qc3rRTho8idOANHR0Uinf2CFgyZ/4+Q9P6rXq7Vr8rcMnvPDW6dAaBI0jJbafU+SJE6dOoXT6QRafnejfUX7uGfFPcxaMYsN+RuQJZkx7ccwd9Bz2I9M5zdvlfHU/w5yuLCSSIPMVQPa8++rOvH21Z24ad/3WKddw8m//R1HdjZqRARREyeS/vrr2B55mKirrkIXE1O7JquF4vXvQvlJsJXWHgRbKaqtFCSpTe2sVVZWRmVlJZIkhY0mf+MknY6993dMOGjyN05OpxOz2cyhQ4fCRpO/ccrJycFsNlNVVRU2mvyNU0lJCVarFUmSwkaTv3GSJImysjIqTucwDMbue6itCED98ssvff+32+2qTqer8Ziqquptt92mTp48+az3v/POO+rDDz9c72f87W9/U4Gz/g4ePKiqqqqePHlSPXnypKqqqpqXl6cWFBSoqqqqx48fV4uKilRVVdWjR4+qJSUlqqqqak5OjlpWVqaqqqpmZWWp5eXlqqqqamZmplpRUaFmZWWpBw4cUG02m6qqqrp//37V4XCoLpdL3b9/v+pyuVSHw6Hu379fVVVVtdlsvrpUVVWpmZmZqqqqanl5uZqVlaWqqqqWlZWpOTk5qqqqaklJiXr06FFVVVW1qKhIPX78uKqqqlpQUKDm5eWdpSnnWI761Jqn1CHvDlEHLhmojvpglLpoxyL1QNaBBmmqqqpSVVVVDx482ChNBw4cULOystSKiopGa9q6P1v9dPVO9bUX/6l+89er1OLHO6rq38y+P9ff4tQj/zpPPfTmbPXwd4vU/MztqlpRqB7NORxQTf7GqaCgQN26davqdrvrjFNT215La2pI26tNk9vtVrds2eLTFw6a/I1TVVWVmpWVpe7bty9sNPkTp4qKCnXjxo2q2+0OG03+xsntdqs7d+5Uc3Nzw0aTv3EqKipSs7Ky1Ozs7IBoKisrUwHfsQXnxuuZt7253W7V7Xafs6woSr1ll8ulKoqiut1uNTMzU3W5XDUeVxTlrLKqqvWWvZ9fV7l6HQ8UHlB/99Pv1IFLBqoDlwxUB787WL3nu/vUJ77/Rr3mpVVql0e/9f1d8szP6lPf7lX355WqVYey1Ny//FXdP3iIuq9PX3Vfn77qwQsvUvOffFKt2LNHdTscNXScpenEflX536OqMi9dVZ/upqr2ClWd17lGf8f3N6+zqrjsDdbkT7mhcapXUzPHyel0qocOHfLVNRw0+RunM8+PcNDkb5xcLpealZWlOhyOsNHkb5wcDoealZWlulyusNHkb5z8uV6EuiZ/41Tf9aKpmhraf5JUVVXrHLEKMSRJqpFTKi8vj7S0NNavX8/o0aN9r/vTn/7EqlWr2LRpU433L1myhD179jB//vw6P8Nut2O3233/t1gspKenU1RURGJiIi7X6e169fp6y7IsI8tynWWHw4FOp8NqtWIwGDAYDL7HvduVulyuGmWj0egbhaytrCgKer2+zvK56r6vZB9/WfsXDls8o7Pnp5zPfYPvY3jqcFBokCa9Xl9nuT5NTqcTt9uNyWTC7XbXq8nhdLE1p5j9OzciZX7HIOtmhkmZ6CStKVdKUeTHDCSm2/lE9B5LVIc+GGMSccmRIMuNipO/mvyNk9Pp9G2f6fYmOm1A/EJZU0PrfmZZp9NRVlZGbGwsOp0uLDT5G6czrxfhoMmfOLndbsrLy4mLi/PNtGntmvyNk/f8iI6OxmAwhIUmf8uSJGG1WjGZTOh0umbXZLPZGrSlsUDDYrEE1DNVVamsrPTNnAw02WXZvLbjNb7L+Q4VFQmJIUkXEFk5kY37Y7DYTrdJWWJ0jySuGZzKhP7tMe7dSfE7S6hYudJ3LGO3bpgnTSLuuuswpHZAkutYuOB2woH/wpa34PBq7fGYDnDLx3Dwf7Dq6bPfN/ZRuOj3YIxqRgdCn5ZuE6GM8EJDeKEhvNAQXmgE0ouG9gVCfvlec3LHHXfUOyAFYDKZMJvNvP/++4waNYrLL78cwDf9rbi42Df9raCgwDf97eTJk74psvn5+b5ybm6ubyrc0aNHqaqq8pUdDgcxMTEcOXLEN/08Ozvbt4QgOzvbt3Qg+3S+AafT6ZvGZ7fbOXr0KABVVVW+ckVFhW9Kn8Vi8U3ps1gsvil9paWlFBR4knznF+Qzb/08Zi2fxWHLYWINsTw07CH+r9//0SuyF3pZ32BN3gG9nJycBmuqcriRdHoc6HGrEpYq21majpwo5t3vf2XRGy/z1ZM30uWDkdy5Zxaz7R9wvpyBTlLJ16dxIOVqSsc+Qcm0zzBPe4kO1/4Fa9IQLMRCRBwnCwoaHSd/NDUlTuXl5b7p59Xj1Jxtr6U11dX2zqXJO/3cO0U2HDT5GyeXy0VMTAyHDx8OG03+xMnhcFBYWIgkSWGjyd84SZKEy+UKyPdTazufysvLiYmJIS8vL2CaBKGFd/lqoH9MHLMc489r/8zUr6eyImcFKirdo8+jk/VR1qydyvfbI7DYXKTEmpg1qjMf3zuKt2YOY+Kp3ZTeditHb7vdMyAlSUSeN4wO//g7XZYtpd1v7seY1rH2AamyXFj5FDw/ED693TMgJcmQPgomPA33rYHUITBmrmcAKiLe876IeM//x8xtcwNS0HJtojUgvNAQXmgILzSEFxqh4EWrninlcDiIioris88+q7Ej3+23305paSlff/11kz/TO7pXUlJCfHy8L3dFcyRCU1WVnJwcOnfujMFgCEoitJ2FO/nr2r9ypPwIAKM6jOLeIfcyLGUYElKjNTU2EZpbgfyiYjommnFUlmCMTiCv2EJqUiKHCipYv2Ur7gMr6Fu+gVHyfkyS0xcbO0ZORPVBnz6MuN5jMHYajD4qETkyHkXWN1ucWjphnfdHUPfu3X0Xh3BKLNiYsqqqZGVl0b17d9/Mitauyd84nXm9CAdN/sTJ5XKRnZ1Njx49fPVv7Zr8jZN3IKVr164YDIaw0ORvWVEUcnJy6NKlC3q9vtk1eWeviplSDSfQM6XcbjeHDx+mW7du6HS6Zj9+XkUeb+x6g68OfYVb9cxabq8fRNHx8ZSUtAdAAoZ1jueaQalcO6QjSZKTss8+p/i993CdHnCVDAaix4whbsp1xIwZgxwZWfsHKgpkr4Qtb8PB5XD6M4lMgN4TYdAN0OUiMETUfJ+jClWnR7WWIkXGI7mdYIxudj9aA4FuE60J4YWG8EJDeKEhvNAIpBcN7QuE/O579WE0Ghk+fDg//fSTb1BKURR++uknHnzwweBWrgHIskxaWpqvE9ySVDmreGXHKyw9sBQVlXhTPHcNvIvrelxHnCmuRqc/UDjcCjrFSad9b6Db/AYGWylExNPpgntg1AN0+e5O+h/5yfPi0+dHsS6JsviBxPW4gMgeF9OpXRckk9kzEHV6EA1Z9nTuWimyLNOxY0ffj7a2TDDPkVBDeOFB+KBR/VrR1hHtou0RqJifrDzJ4t2L+Tzzc1yKZ0lejNKPgqOXc8jaCQBzhJ7L+6UweUgao3skoSs8RfGil8n65BOU0zP15NhYYidcSfz11xM5cCDS6ZsJZ1FVDDs+9AxGFWdrj3cYDP2ug8HTIb5z3TsCG6NAVXHozZhkA+iMzeZFa0NcBzSEFxrCCw3hhYbwQiMUvAj5KFRUVLBjxw527NgBeDLA79ixw7cUYO7cuSxevJh3332X/fv3c//991NZWcns2bOb9LktsXuM3W4nMjKS7OzsFs3O/+uJX7n+P9fz4YEPUVEZlTyKfw/7N7P6z8JWamuRHQdsdgdG1YFu/fPoVj+j7SBjK0W3+hl0G18hevSduJE5HtGLI11uIOvCZ4i943MSps6nsu8MInuPpYw48kttIOvCZmeIsrIy384p4aKpKbvHFBcXi91jTu8eExkZ2eZ3j7Hb7eTn5yNJUtho8jdO3jxKgdrdLBia/I2TxWIhMjKS48ePB0yTwD+8N7i8M9rOVfbejKmr7J05KkkSRqM2AON93LsEs3oZzr07ZKG1kKc3P83VX1zNxwc/xqW40Nl7UplzP/kHb8dl7UTfDrH8YXwvvn7gQhbcOJSRrlMUPvYoh664kuK330apqEDfMZXEOXPo/MnHpD7xBBFDhsDpXGU+HaqKcnQT6pf3wnN94fu/eAakDFEo/a5DvWEJ3LkC98V/QI3vjFqLvuo6JEnCZDLVmEV5rnJD49HUONVV9jdO5yqbTCaxe/HpWaImkwkv4aDJ3zgBREZG+l4TDpr8jZOiKESenq0ZLpr8jZM/14tQ1+RvnOq7XjSHpgahhjgrV66sdTe822+/3feal19+We3cubNqNBrVCy64QN24cWOzfX4gd49xOp3qwYMHVbvd3iLZ+ctt5eo/1//Tt2PMmGVj1Hf3vKuWWEsCuuOA3eFUM05Y1M9+Paq+8NH/1Oef+6e6/IX7VcVeWf/OMU6rWp65SnWf2KcqlhOq21Z5lqaGxqO5NQUyTg6HQz1w4IBvZ4xw0ORvnFwul3rgwAHV6XSGjSZ/43Tm9SIcNPkTJ6fT6dslLVw0+Rsn7/nhOL1rVzho8rfsPT+8uys1tyax+17DeeWVV9R+/fqpvXv3DtjuxVVVVarL5VLXrVunVlZ6+gb+7g55vPC4+viPj6vnv3++r3/U/7Vr1e7/eFHt8ui3ap+//E+986116rJfdqsVNqd66uRJ9cjnX6g5s27z7aK3r09f9cDk69TDixapjoIC9dixY7VqOpK5T61a85qqvnZxjT6P9bkhqn35X1X15D71oB87MrtcLnXPnj1qRkaGqqrhs9uqP7sX//rrr6rL5QobTf7GyeVyqZs3bxa7Fx88qFZWVqoHDx5U9+7dGzaa/I1TRkaGb0fZcNHkb5xOnDihbtmyRXW5XGGjyd84uVwudePGjT59wdi9uFXllAoGgcwpJUkSTqcTnU6HTqcLaM6OzSc38/i6x8mv9NyJvqTTJdw38D76t+t/Vu6opmgCiaMlVnYcLSYnJxvXsS2Yi3fTTznEEDmLOMmTdJaU/nDzR/Di4Dq9V/+YhWqMQzYY6tTX0Hg0RVNL51Zxu904HA4iIiJ8o9GtXZO/cZIkCZvNhslkqldfa9Lkb5zOvF6EgyZ/4qQoCna7nYgIT16VcNDkb5y854fRaPR509o1NaXsdDp9u+qJnFLBJ5D9J2+cqn8/NLZ9ltpK+fDAh7y/732qXJ6+iduajr3gCtyVvUhPjGJi//ZMPS+dninRSE4H5d98Q/GSJTiyPbMAkWUiR44kfuoUoseNQxcTU7umwoNIW95B3bkUye6ZyafKBug+DmngVNy9JiJHJfjdPmVZxm63o9fr0ev1YXO9F/0n0X8S/afmjZPb7cbtdvtyk4aDJn/j5M/1ItQ1+RsnoM7rRUv1n0J++V6waKnleyaTKaDL9/IK83jsp8eY8/0c8ivzSTQm8tiIx3i0/6MkK8noZJ3fmlRVZcOuDL74NYcF32zmiRde5pUn7ifjxcmM/noMf9g1mT+WPMG90pdcottNnFSFEz0nTN3Ii+iFGtNe2zHmTCLiwWTm6OmlHW1paU5ZWRnFxcVIkli+J0kShYWFYvne6eV7JpNJLN+z28nNzUWSxPI9rwdi+Z5n+Z7JZBLL90IQb0dVluUGlb0d5LrK3pt4kiQRGRnpe2/1x88sA75ypbOSN3a9wcQvruH1Xa9T5arCbetI1bHbsR/9DaNTRzNv2iC+eeBi/u/aAfSKcFH6+iKyLx/Picf/hiP7MFJkJOZrrib9jTfovOg14idPxmA219SkuGDP58jvTkJ6dRRsft0zIGXuCBfcizR7BdLNH8HQW9FFJ56lrzGaJEkiIiIC/ellgpIk+epSV7mh8WhqnPzVVFv5XJp0Oh2RkZG+x8JBk79xOvP8CAdN/sZJlmVMJpNvE4xw0ORvnPR6vW/gIVw0+Rsnf64Xoa7J3zjVd71oDk0NQcyUOgeB3n3v0KFDdO/ePSC7723I38Df1/+dE1UnALg0/VLuGXQP/ZP7exZBNkCHt+x2uzlhsbM718K+oycoz9lOxKkd9HZnMkTKort84izvFCSKjak4YrsSndoLfUpf5A59iYjrAKZYMJlh40KkVU+f9V517KNw0UOo+sgams4sh+MovtPp5NChQ/Tu3bvGBa81a/I3TqqqkpGRQa9evcTue2dcL8JBkz9xcrlcZGRk0KdPH1/9W7smf+PkPT969uwpdt9TFA4dOkSPHj3E7nshQkvsvpeZmUmvXr0a1PGtclaxdP8yFu9+myqX50aH29YeR+EVmJXBTBzYiSlD0xiSHo9RL2PPPkzxu+9S9tVXqHY7ALqkJMxXTyR+2jRMvXoh6WvZL6j0GGxdAtveg0rPgDGSDOmjYMA0GDAFYto1kwseGutFuCJ80BBeaAgvNIQXGsILjUB60dC+gBiUOgeB7FSpqorL5fJ1oJsLi8PCs78+y1eHvgKgXWQ75gyaw6Qek4gxxjToGKcsNnYdL2P38SKKD+/CeGI7PZwZDJGz6C0dxyCdnbisTJ+MNbYLUe17oW/fF33HgRjj0zwDUIYozw4x+oiaO8i4bKhrFiBtet2T7DwiHnXkvUhj5npe2wYJVLtojQgvNIQXHoQPGsILjUB7EegBlnAk0J41NOZ2t523d33IO3vewaqUAqDYk3EUjqePeTRThnTl2sEdaW/2JHm1btlC0TtLqPj5Z98xjN26YZ40ibjrrsPQMfXsz1MUyPoZfn0TMr8D1TNoSmQi9L0GBk2HzqNAbyIQiGuBB+GDhvBCQ3ihIbzQEF5oBNKLhvYFarnFI6gN713Z5rwT7Z1653a7fdPemnonek3uGv6x4R8UWAuQkLi88+XMGTiHvsl9QdWOWb2+BRYru3Mt7MktIz9nP7r8bXS1H2SwnM29Ug5RkucOYfXWUimbqYzpjCmlJ4b2fdB3HExMQlfMkbFIxhjcsgnZFAXyOfI86CM8M6IueQRsFogwg8sJ+oiwmdnh74yBxrS31qKpsWXvhVFV1bDR5G+czrxehIMmf+PkvZcSTpr8iZP3/PC+Nxw0NUfZW9/m1CQITbzxqg2Hy8GCjR/wadYSHJQAoDgSoXQ8F6eOY/qU3lzcK5kIgw7V5cLyv/9R/M4SbHv2+I4ROWwYcVOuI3bCBPTx8Wd/SGURbH8ftr4DJTna46lDof8UGHQDxHWqeTMuQNTnRVtC+KAhvNAQXmgILzSEFxrB9kJEog5aIqdUVVUVmZmZzZKzI68kj4e+e4gHf36QAmsB7Uzt+Ouov/KnQX8i1haLLMmUlpZy8PAx1mQW8Nzy3fzhjf/yp3/NY9kz96FbegOz1lzKvOO38aT7Be7WL+cC+SBRkh27FMHJ6D4UdZ6IddQfyLnsNdy3fEnK7KUUnf8IyvlzMPa7msNVEdgiUiA6iaxjeTiczoZpUvVkHT5KzqlyKq0Oso558oq01XwxJSUlbN++HUVRwkaTv3FSFIVt27b59IWDJn/jZLPZyMzMJCMjI2w0+ROnqqoqtmzZ4ltSFQ6a/I2Toijs3r2bEydOhI0mf+NUWlpKZmYmR48eFTml2giKovjOg+oUV1XxyPI3GPHeFXyY9TwOSlCccUSV38BNac/wzR2/57VbLmZ8//YY7FaKlizh0BVXkvfwI9j27EEyGIi57DLSXnqRzm+/RcKMGTUHpFQVjm6Cz+fAgr7w4988A1LGGM/yvBkfwOzlMOYPEJ/eIgNS1dtvW0b4oCG80BBeaAgvNIQXGqHghVi+dw4Cvfue905xU2ZK/XL8F/658Z8U2YqQkLiyy5XMGTSHDlFd2ZdXzq7jpWQezcN1bBuplfsZLGcxRM6io1R8ll4Xesoj09Al98DQvg9yhwGYOg5CMcUhGaORjFEougik0/VtrjvRXj+8noTbzI7GzBhwu90oiuLbQSccNPkbJ0mScLlcvkSV4aCpKTOlql8vwkGTP3HyDhp482qFg6amzJRyuVzIsixmSp1uC97HmluTyCnVeAK5fK/CUYVJZ8DisGA2mrG7nZyyuPjbTx+wvfwTJEMRAKorlg6M5+b+U7hx2CBiIzzXDWd+PsXvf0DpJ5+gVFQAIMfGEjvhSuKvv57IgQORTl9jfNjLYdcnsOVtOKnNpiK5N/S7DgZPh6ReEIS7zd526m3XbRXhg4bwQkN4oSG80BBeaATSC5FTqpkI5ZxSxbZi5m2ax4qcFQAkmjowLPo2KOuBI3c37Sx7GSxnMVTKooecf/bnI1Fu6oCU2B1Dhz7oOvTH0HGoJwGnIer0XyTIgU/+1lQvwgnhhYbwQkN44UH4oCG80Ai0FyKnVOMJlGd2l53Fu99k2YGlvkGpm/vewsx+t3Lbits4XHYY3DH0jBzP/edNZ1yP/hhPJyS37dtH0TtLsCxfDi4XAPqOHYm75mripk3D2KUL0pmDSif3wZa3YOfH4PDMwkNngh6XepKW97kaIuKaTZ8/iGuBB+GDhvBCQ3ihIbzQEF5oBNILkVOqmfHeiW3OO9GqqnL8+HHS0tIatfteld3J+3u+5e0DC7C6y0CV6F7SlanFMsOl+fSVjnkSkZ9xk6/SkIQ7oRum9n2gfV8MqedhTkhD0UWCMRLZFINCLbu9nf78QN5ddzqdZGdn07NnTyRJCquZHY2dMeByucTue9VmPhw6dEjsvnf6epGVldXmd9/z7hAidt/Tzg+x+55n972srKyA7b4n8J/m7D9VOq0s2fsOr+9a5Du+xWE5/X+Vh4c/zFtbvuO3I27hvI79kCUZt8tF+S+/UPzOEqo2bfK9z9SvH3HXTSb2mmvQJSbWiLesOFH3fQ2/voV0bKMmJq4TSt9JMPBG5I6DUaTT22efQ1+gzznAt/uk0WgMm+u96D+J/pPoPzVvnKr/3pJlOSw0+Rsnf64Xoa7J3zgpilLn9aKl+k8ip1QdBDqnVGl5FQoyCe3TQNZRaffcsTszv4XV4WL7kSJe+GYLj366k1uff5tr37yWhXv/htVdRg+Hk4/y8vm6bBV36FYySM7BILmx6mKpSBqEpfc0Tox4DGZ+if2Wrym/8mVM1/yb8l4zOBnVAxK7UWiXKSy3g6wLWh6SnJwc+vbti9PpDLscOI3NrVJeXo7ZbEan04WNJn/jpNPpiImJoeL08opw0ORvnNxuN3379iU7OztsNPkTJ6fTidFoRKfThY0mf+Ok0+lo166dT0c4aPI3ThUVFfTt25e8vDyRUyrIBLL/ZNIZWHZgaa2fu+zAMkZ3HM1bk/5BbIUexWan6OOPyZx4Ncfvu5+qTZtQZZmoC0eTNO8p3P96kqQ77sARGcmRI0cAqDi+j/IvH4EF/ZG+mOMZkJJkHJ0uomDMU3DPaopHPMJJfSro9CFzzul0Orp27crRo0eB8Lnei/6T6D81R5xE/0nTdPToUfr27YvNZgsbTf7GqaysjPj4eHQ6Xdho8jdOOp2OqKgoqqqqAqKpIYjle+cgEDmlnC6F/KJiOiaacVSWYIxOIK/YQoekRI4UVrD1WBm7j5dy9GgOUYW7GEAWg6VDnIo9zivJkZTqdOhVlbtLLdxTWgayCUdsF/QpvdC174+u4xDU5L7IkbGo+ghUfRSywRjSI95utxu3243BYEBVRU4ph8NBRIRnB8Jw0ORvnCRJwmazYTKZ6tXXmjT5GydJknA6neh0ujafU8putxMREQGInFI2m803SBcOmppSdjqd6PV6X32bU5PIKdV4AtF/KrYVM+6TcQAkmBJIjkym0FpIid2zu96qG1cRa4WSD5dS+tEy3EWeTrgUGUnMpZdinjqVmJEXIJ2eWajT6VDdLtTM75G3voOa+QMSp3f3jEpG7XM18uDpKGkXgN4YstcRWZax2+3o9XpfPsq2eG0U/SfRfxL9p/o1Vf+95f381q7J3zj5c70IdU3+xgmo83rRUv0nMSh1Dpo7J4LN4UJWHOjWP49u8xtgK4WIeNwX3Isy+rfkrvmAvWu+YIicTSfJM7pZoJN5IimRX6KjAOjpVHlYasfw1JFEpp0HHYeCKdaT/8kYDTpD3RUIUdxut2/phfcLo60ivNAQXmgILzwIHzSEFxqB9kLklGo8gfDM6XZy+4rbeaDv3YzoNAp7aTGm+EQ2H9/AxxsX81hGb8q/+g+q3Q6ALikJ89UTiZ82DVPv3kjV20ZFAWx/D7YsgbKj2uMdz4P+U2HQNDCntcjueU1FXAs8CB80hBcawgsN4YWG8EIjkF6IROfNRHN3qhR7Jeq6F9CtfubsJy/5o2eA6aNbPa9F4vOEVJ6PM1AuqeiQmNxxLHf1n0XnhF5IxmjQG5tcJ4FAIBAIBHUjBqUaTyA8q3RY0btclL75DqUffIhisSCbzSTceiuJs2ZyZOYsHNnZGLt1wzzpWuKmTMGQmuq7E4yqwtEN8OubsO8/oDg9j5tioddVMHAqdL8UjFHNUl+BQCAQCNoyItF5M+Od6tbkKYs6A/LmN2r/kM2LUR8+gDL6d5yKNPOEZQdri3YBKl1iOnPf0Pu5vPPlGGUjkndanNsdFlNL3W43TqcTk8mEqorlezabjaioKDH9XJKoqqoiMjJSTD+XJOx2OwaDoU1PP1cUBavVSlSU50djOGjyN07e8yMiIkIs3wPsdjtGo9FX3+bUJAgNIt1Q9NYSil99zfeYYrFQ9NprSECHf/wdR1Y2sVdNQB8fr73RZoFdH8Ovb0HBfu3xdn2h/xQYdAMk9gC5daZaVVUVm81GRESENgDXBhE+aAgvNIQXGsILDeGFRih40Tq/fVuAQCTqzM/PB1uZZ8keQFQSpPT3/AtgK0W1V/BFpwFMPf45a4t2oZf0XN/zev7S869c0/0aZEUO2yR8ubm5VFVVhZUmf+JUUlLCgQMHUBQlbDT5GydFUdi/f79PXzho8jdONpuN3NxcMjIywkaTP3Gqqqpi9+7dvnXq4aDJ3zgpime3lBMnToSNJn/jVFpaSm5uLkePHhWJzsMYSa+n+P0Pan2u+MMPiRoyhISbZmgDUvm74JuH4Lm+8L9HPANS+gjoczVMWwx3/QCX/j9I7tVqB6TAM4iam5vb5gdQhQ8awgsN4YWG8EJDeKERCl6I5XvnoNkTdaoupLcnYr3kYfTdx1FuLSI2MglX9krK1y7gr+ndWZ/v2X64m7kb9w+5n3Hp4zDKxqDfiQ7Hu+tCk9AkNAlNQpPQdC5NItF54wnE8j1XURGZF11c5/O91q9DHxsN+770zIo6vll7Mr4z9JsMg6ZDh0Egt+0cIgKBQCAQBBqRU6qZaPZOlcOKXXXx5t4lLD34ERaHBbPRzC19buKW/rdy+4o7OF5+nGm9pjF74Gw6RndsE1MKVVWlsrKS6OjoNqG3PoQXGsILDeGFB+GDhvBCI9BeiJxSjScQnqlOJxkXXYxisZz1nGw203vNKqTXL4LiQ54HJR10HQMDpngGpKKTmqUeoYa4FngQPmgILzSEFxrCCw3hhUYgvWhoX6D1zlVupVgleHPfeyza/QYWh6dTZXFYWLT7DT7cv5T/u+D/+PfF/+aPI/5IWkxamzlJVFXl1KlTiDFS4UV1hBcawgsPwgcN4YWG8KJtoLpcJM6aVetzibNmouZs9AxIRafA8Dvh9m/g1k/h/NlhOyAFov17ET5oCC80hBcawgsN4YVGKHghZkqdg+a+0+d0Oxn3yTjfgFR1zEYzK29ciUE2tJnBKIFAIBAIQh0xU6rxBMQzhxXF5aLozbcp/mCpb/e9xJm3kHT3ncjFB+HoJhg4DWI7gOhLCQQCgUAQNMRMqWbGm79CUZQGlb1jfWeWyx3ltQ5IgWfGVIWzAvCMWLrdbl/ODbfbXePx2srez6+r3NC6N1aTt+ytb13l+jS5XC4sFguKooSNJn/j5Ha7KS0t9T0WDpr8jZOqqr6E5+Giyd84KYqCxWLB5XKFjSZ/4qQoiu/8CBdN/sbJe35U96a1a2pK2WKx1Khvc2sShAA6HfKHU0i6rCe9V6+k1y/f03v1SpIu7YH84RRIHQwXPgDm1DY1IKWqKhaLxdeu2yrCBw3hhYbwQkN4oSG80AgFL8SgVB0EYve9o0ePEmuMxWysfZTQbDQTY4gJ2d2NAr1jU0lJCVarNaw0+ROnkpIScnJyUFU1bDT5GydVVTl8+LDYfS8rC7vdTklJSVhp8idOVquVzMxMVFUNG03+xklVVY4fPx5WmvyNU2lpKSUlJWL3vXDHVga5W5A/uwXppYHov7gR6aWByJ/fCrlbwFb7Tb9wR1VVSkpK2vyPK+GDhvBCQ3ihIbzQEF5ohIIXYvneOWju3ffsbjvv7HmH13a9dtZn3T/4fu4YeAeR+kig7e1uJDQJTUKT0CQ0CU2hqKkt775XVVVFv379mD59OvPnz2/w+wKyfM/tgGd7ga307Oci4uGPmaAzNs9nCQQCgUAgaBJi+V4z4+2oyrLcoLI3J9SZ5UhDJHcNvov7B9/vmzFlNpq5f/D93DX4LqIMUb5OtE6nq1EG6i17P7+uckPr3lhN3rK3vnWV69Mky7Lvrne4aPI3TpIk+aZQhosmf+PknU7qJRw0+Rsn8Mwm8b4mHDT5EyfwzLZRVTVsNPkbJ+/5Ub1erV2Tv2XwnB/eOgVCU1vlX//6F6NGjQp2NTy4XTDy3tqfG3mv5/k2iKqqvtnFbRnhg4bwQkN4oSG80BBeaISCF2JQKgiYdCZmD5zNLzf+4vubPXA2Jp0p2FULGqqq+n5otnWEFxrCCw3hhQfhg4bwQkN4ERgyMzM5cOAAEydODHZVPBijYMxcGPuoZ2YUeP4d+6jncWNUMGsXNET79yB80BBeaAgvNIQXGsILjVDwQgxKBYlIQyQGnYGkyCQMOgORhshgVymoyLJMenq67453W0Z4oSG80BBeeBA+aAgvNIQXZ7N69WomTZpEx44dkSSJr7766qzXLFy4kK5duxIREcHIkSPZvHlzjecfeeQR5s2b10I1biD6CLjo956len/M8vx70UOex9soov17ED5oCC80hBcawgsN4YVGKHghohBEFEWhuLjYlxujLSO80BBeaAgvNIQXHoQPGsILDeHF2VRWVjJkyBAWLlxY6/Mff/wxc+fO5W9/+xvbtm1jyJAhTJgwwbexy9dff03v3r3p3bt3S1a7YRijUCQ9ZS4DiqQHY3SwaxRURPv3IHzQEF5oCC80hBcawguNUPBCDEoFGavVGuwqhAzCCw3hhYbwQkN44UH4oCG80BBe1GTixIk8+eSTTJ06tdbnFyxYwJw5c5g9ezb9+/dn0aJFREVF8fbbbwOwceNGPvroI7p27cojjzzC4sWLeeKJJ+r8PLvdjsViqfEH+Dq5iqI0qOxdPlBX2e12+8rVt7D2Pq6q6llloN6y9/PrKje07s2hqbZyQzRVVVWFnSZ/4uTdcTOcNPlbrqysDDtN/sbJarWGnSZ/42S1WsNOk79xauz1ojVo8jdOdV0vmkNTQxCDUkFElmXS0tLEtEGEF9URXmgILzSEFx6EDxrCCw3hReNwOBxs3bqV8ePH+x6TZZnx48ezYcMGAObNm8exY8fIyclh/vz5zJkzh8cff7zOY86bN4+4uDjfX3p6OoBv5lVhYSGFhYUAnDx5kuLiYgDy8/N9G53k5uZSVlYGwLFjxygvLwcgJyfH9+Ph8OHD2Gw2ZFnGarXicnmSm2dmZuJyuVAUhczMTBRFweVykZmZ6dOclZUFgM1m4/Dhw4CnI56TkwN4NlE4duwYAGVlZeTm5gKeJPr5+fkAFBcXc/LkyYBoAsjKysLhcDRKkyzLJCUlceTIkbDR5E+cLBaLbxOEcNHkb5y810KvjnDQ5G+cXC4XaWlpvnI4aPI3TkeOHCEtLQ2r1Ro2mvyNU2lpKXq9HlmWw0aTv3GSZbnGIF1za2oIkuod7hLUSkC2ND6NonimyiUmJrb5jrTwQkN4oSG80BBeeBA+aAgvNALtRSD7Ai2BJEl8+eWXTJkyBYC8vDzS0tJYv349o0eP9r3uT3/6E6tWrWLTpk013r9kyRL27NnD/Pnz6/wMu92O3W73/d9isZCenk5JSQnx8fG+O7Pezm9dZe8OiHWV3W63b/fJwsJCkpKS0Ol0vsfB0x6ql3U6ne/Ocm1lVVV9x6yt3NC6N1VTXeVzaZIkiaKiIuLj4zEYDGGhyZ84uVwuiouLSU5O9rXD1q7J3zgBNc6PcNDkb5wASkpKiIuLQ6/Xh4Umf+PkcrkoKysjISHBtwNua9fkb5z8uV6EuiZ/43Tm92lzaqqsrGxQ/0lf5zOCGngD2JwnIoDT6cTtdp8VeO9nhVqjDdSJ6Ha7cTqdvnI4aGpKnLwd+3DS5E+cwPNDp/p00tauqSmdqurXi3DQ5G+cvOdHOGnyJ07guRPlPX44aPK3rKoqTqczYJraOnfcccc5X2MymTCZWnYXYafT2aKfF8oILzwIHzSEFxrCCw3hhYbwQiPYXrTtW6v1sHDhQvr378+IESOAwEw/dzgcpKam+soQ+tP7zqXJ3+l9hw8fJjU11VcOB01NmX4Onh9b4aKpKdPPFUUR089PTzlPTU1t89PPHQ4HVqsVWZbDRpO/cZJlGaPRSEFBQdho8jdO5eXlpKam+sqB0BROJCcno9PpfD57OXnyJB06dGjSsVui/+RdvldZWSmW751evpeQkCCW74n+k+g/1aJJ9J9qLt9LTU0Vy/dOl2XZs9w3XDQ1Zfmey+USy/dCGe+U/UBMPwcoKioiISEBvV4f8neiA3l33eVyUVJSQlJSEkBYaPI3Ti6Xi8LCQlJSUnztsLVr8jdO4PlB065dOzH9/IzrRTho8idObrebgoICUlJSkCQpLDQ1ZaZUQUEBSUlJ6PX6sNDUlJlSRUVFJCYmotPpml1TQ6efhyqSVHP5HsDIkSO54IILePnllwGP5s6dO/Pggw/y2GOPNfkzA9l/8raf6t8Podw+A33OSZJEQUEBiYmJbX75nug/if6T6D/Vv3zP+3tLksTyvcZeL0Jdk79xOvP7NBj9J7F8r4F4jfb+29SyN+DesiRJvnL115xZliSpzrL3GHWVm6vu9Wnyp3ymDu8xw0lTY+PU3O0tFDT5U1/vRe5cx2lNmhpaPrO+Db1etCZNDS2La0TtmrydhkB8PwVLk7/l6p2s2o7ZHJpaGxUVFRw6dMj3/8OHD7Njxw4SExPp3Lkzc+fO5fbbb+f888/nggsu4IUXXqCyspLZs2cHsdYCgUAgEAjaGmL5XhCRZZmUlJQaHee2ivBCQ3ihIbzQEF54ED5oCC80hBdns2XLFoYNG8awYcMAmDt3LsOGDfPtoDdjxgzmz5/P448/ztChQ9mxYwcrVqygffv2Tfrclly+Z7FYxPK908v3zGazWL5nsfju3oeLpqYs33M6nWL53ukleykpKWL53unleykpKWL53umyd7ZRuGhqyvI9u90ulu+FMmVlZcTHx3Ps2LGA7L536tQp0ZFGeFEd4YWG8EJDeOFB+KAhvNAItBfeneRKS0uJi4tr9uOHI97+05EjRwK2fO/EiRO0b99eLN+TJE6ePElycnKbX7536tSpGnnRWrsmf+ME1Dg/wkGTv3GCmkvdw0GTv3FyuVwUFRXRrl0730zr1q7J3zj5c70IdU3+xunM79Pm1FRZWdmg/pNYvncOvKOg6enpQa6JQCAQCASCYFJeXi4GpRqIt//UpUuXINdEIBAIBAJBMDlX/0nMlDoHiqKQl5dHbGysL09Fc+G98xqIWVitDeGFhvBCQ3ihIbzwIHzQEF5oBNoLVVUpLy+nY8eObX5WWkMJZP8JRPuvjvDCg/BBQ3ihIbzQEF5oCC80AulFQ/tPYqbUOZBlmU6dOgX0M8xmc5s/GbwILzSEFxrCCw3hhQfhg4bwQiOQXogZUo2jJfpPINp/dYQXHoQPGsILDeGFhvBCQ3ihESgvGtJ/Erf7BAKBQCAQCAQCgUAgEAgELY4YlBIIBAKBQCAQCAQCgUAgELQ4YlAqiJhMJv72t79hMpmCXZWgI7zQEF5oCC80hBcehA8awgsN4UXbQ8RcQ3jhQfigIbzQEF5oCC80hBcaoeCFSHQuEAgEAoFAIBAIBAKBQCBoccRMKYFAIBAIBAKBQCAQCAQCQYsjBqUEAoFAIBAIBAKBQCAQCAQtjhiUEggEAoFAIBAIBAKBQCAQtDhiUEogEAgEAoFAIBAIBAKBQNDiiEGpEGHq1KkkJCRwww03BLsqQeXYsWOMGzeO/v37M3jwYD799NNgVylolJaWcv755zN06FAGDhzI4sWLg12loFJVVUWXLl145JFHgl2VoNK1a1cGDx7M0KFDufTSS4NdnaBy+PBhLr30Uvr378+gQYOorKwMdpWCwsGDBxk6dKjvLzIykq+++irY1Qoazz//PAMGDKB///787ne/Q+znEv6IPpToP1VH9J/ORvShPIg+lIboQ3kQfSiNYPafxO57IcIvv/xCeXk57777Lp999lmwqxM08vPzOXnyJEOHDuXEiRMMHz6cjIwMoqOjg121FsftdmO324mKiqKyspKBAweyZcsWkpKSgl21oPDnP/+ZQ4cOkZ6ezvz584NdnaDRtWtX9uzZQ0xMTLCrEnTGjh3Lk08+yZgxYyguLsZsNqPX64NdraBSUVFB165dOXLkSJu8bhYUFDBq1Cj27t2LwWDgkksuYf78+YwePTrYVRMEENGHEv2n6oj+09mIPpQH0YfSEH2os2nLfahg95/ETKkQYdy4ccTGxga7GkEnNTWVoUOHAtChQweSk5MpLi4ObqWChE6nIyoqCgC73Y6qqm32jn9mZiYHDhxg4sSJwa6KIETwfmmOGTMGgMTExDbfmQL4z3/+w+WXX97mOlPVcblc2Gw2nE4nTqeTlJSUYFdJEGBEH0r0n6oj+k81EX0owZmIPlTttPU+VDD7T2JQqoWYN28eI0aMIDY2lpSUFKZMmcLBgweDXa2g0FAvtm7ditvtJj09PQi1bBnO5UVpaSlDhgyhU6dO/PGPfyQ5OTmItQ0c5/LhkUceYd68eUGsYctxLi8kSWLs2LGMGDGCDz/8MIg1DTz1eZGZmUlMTAyTJk3ivPPO46mnngpybQNLQ6+bn3zyCTNmzAhCDVuO+rxo164djzzyCJ07d6Zjx46MHz+eHj16BLnGgqYi+lAeRP9JQ/SfNEQfSkP0oTREH0pD9KE8hHL/SQxKtRCrVq3igQceYOPGjfzwww84nU6uvPLKNrl+tyFeFBcXc9ttt/HGG28EsaaB51xexMfHs3PnTg4fPszSpUs5efJkkGscGOrz4euvv6Z379707t072NVsEc7VJtauXcvWrVv5z3/+w1NPPcWuXbuCXOPAUZ8XLpeLNWvW8Oqrr7JhwwZ++OEHfvjhh2BXOWA05LppsVhYv349V199dRBrGnjq86KkpIRvv/2WnJwccnNzWb9+PatXrw52lQVNRPShPIj+k4boP2mIPpSG6ENpiD6UhuhDeQjp/pMqCAqnTp1SAXXVqlW+x1auXKlef/31QaxVcDjTC5vNpo4ZM0Z97733glyzlqe2duHl/vvvVz/99NMg1Krlqe7DY489pnbq1Ent0qWLmpSUpJrNZvUf//hHsKvYYtTXJh555BH1nXfeaflKBYnqXqxfv1698sorfc8988wz6jPPPBPE2rUstbWL9957T7311luDWKvgUN2LTz75RP3Nb37je+6ZZ55Rn3766SDWThAIRB/Kg+g/aYj+k4boQ2mIPpSG6ENpiD6Uh1DqP4mZUkGirKwM8KzhbetU90JVVe644w4uu+wyZs2aFeSatTzVvTh58iTl5eW+x1evXk2fPn2CWb0Wo7oP8+bN49ixY+Tk5DB//nzmzJnD448/HuQathzVvaisrPS1iYqKCn7++WcGDBgQzOq1KNW9GDFiBKdOnaKkpARFUVi9ejX9+vULcg1bjtq+Q8J92nldVPciPT2d9evXY7PZcLvd/PLLL23mutmWEH0oD6L/pCH6TxqiD6Uh+lAaog+lIfpQHkKp/yR23wsCiqIwefJkSktLWbt2LQDjx49n586dVFZWkpiYyKefftomdgs604u1a9dyySWXMHjwYN9r3n//fQYNGhTEWrYMZ3qxefNm7rnnHl+CzgceeIB777032NUMOLWdH16WLFnCnj172szOMWd6kZ2dzdSpUwHP7kJz5szhoYceCnItW4ba2sXy5cv505/+hKqqXHnllSxYsCDItWwZavOirKyM3r17c+zYMYxGY5Br2HLU5sWf//xnvvjiC2RZ5vLLL+fFF19EkqQg11TQXIg+lAfRf9IQ/ScN0YfSEH0oDdGH0hB9KA8h139qsTlZAh/33Xef2qVLF/XYsWPBrkrQEV5oCC88CB80hBcawgsN4YWG8OL/t3fvMVXXfxzHXwfIOAIjZIoyC1jIJSMXYBeoHdtyQc21LGNrOTUsybMci9z6i0hc9kctu5gbsA6VmrJhuS5mW2lbjBbYHF3oHMbpstZpucKtaPMC798fZ5xvR+EneDnH4vnYzub3y4fP9/N5ff3jvff5Hs70wz0PIwcHWTjIwkEWDrJwkEXYpZYDTakY83q9Nn/+fAsGg/FeStyRhYMswsjBQRYOsnCQhYMsph/ueRg5OMjCQRYOsnCQhYMswi7FHGhKxcjo6Kh5vV7Lzs62QCAQ7+XEFVk4yCKMHBxk4SALB1k4yGL64Z6HkYODLBxk4SALB1k4yCLsUs4hKTYfEoTX69WuXbu0b98+paWl6ddff5Ukpaeny+12x3l1sUUWDrIIIwcHWTjIwkEWDrKYfrjnYeTgIAsHWTjIwkEWDrIIu6RziHdXbLqQNO5rOn0V6RiycJBFGDk4yMJBFg6ycJDF9MM9DyMHB1k4yMJBFg6ycJBF2KWcA9++BwAAAAAAgJhLiPcCAAAAAAAAMP3QlAIAAAAAAEDM0ZQCAAAAAABAzNGUAgAAAAAAQMzRlAIAAAAAAEDM0ZQCAAAAAABAzNGUAgAAAAAAQMzRlAIAAAAAAEDM0ZQCAAAAAABAzNGUAvCv1N7eriuuuOKCz5ubm6utW7dGjl0ul955550Lfp0L6dChQ3K5XDp27Fi8lwIAAC5x1FAOaigg/pLivQAAGLN69WodO3ZsUgVMTU2N7rzzzou+plAopIyMjIt+nfNRUVGhUCik9PT0eC8FAADEATXUuaGGAuKPphSAf52TJ0/K7XbL7XZf9GvNnTv3ol/jfM2YMeNfsU4AABBf1FDRqKGA+OPjewCmbMmSJXrsscdUX1+vjIwMZWVlqbW1VcPDw1qzZo3S0tKUn5+v/fv3R35nZGREtbW1ysvLk9vtVmFhoV588cXIz5uamvT6669r3759crlccrlcOnTokH744Qe5XC7t2bNHHo9HycnJ2rlzZ9Sj52am22+/XXfccYfMTJL0xx9/aP78+WpsbJxwH7/99puWLVsmt9utvLw87dy584wx/3z0fGwtHR0duvXWW+V2u7V48WIFAgH19PSovLxcqampqq6u1tGjR6PmaWtrU3FxsZKTk1VUVKRXX3018rOxeffu3avbbrtNM2fO1KJFi9Td3R0Z8+OPP2rZsmXKyMhQSkqKFi5cqA8++EDS+I+ed3Z2auHChbr88suVm5ur559/Pmo9ubm5euaZZ/TQQw8pLS1NV111lVpaWibMCgAAnD9qKGooAKcxAJgij8djaWlp1tzcbIFAwJqbmy0xMdGqq6utpaXFAoGAPfroo5aZmWnDw8NmZnbixAlrbGy0np4eCwaDtmPHDps5c6bt2bPHzMz+/PNPu//++62qqspCoZCFQiE7fvy4ff/99ybJcnNzrbOz04LBoP3yyy/m8/ksPT09sqaff/7ZMjIybOvWrWZmtmLFCrvhhhvs5MmTE+6jurraFi1aZN3d3dbb22sVFRXmdrvthRdeiIyRZG+//baZWWQtRUVF9uGHH9q3335rN910k5WVldmSJUvss88+sy+//NLy8/Otrq4uMseOHTts3rx5kfV3dnbarFmzrL29/Yx533vvPfP7/XbfffdZTk5OZP133XWXLV261Pr6+mxwcNDeffdd+/TTT83M7ODBgybJhoaGzMyst7fXEhISbNOmTeb3+83n85nb7TafzxdZU05Ojs2aNcu2bdtmAwMDtmXLFktISLDvvvtu6v8hAADApFBDUUMBiEZTCsCUeTweu+WWWyLHp06dspSUFFu5cmXkXCgUMknW3d094Txer9fuvffeyPGqVavs7rvvjhozVmyMFUpjTi+ozMw6OjosOTnZnnzySUtJSbFAIDDhtf1+v0myL774InKuv7/fJJ21oGpra4v8/K233jJJ9vHHH0fObdmyxQoLCyPHV199te3atSvq+s3NzXbzzTdPOO8333xjkqy/v9/MzEpKSqypqWncvZxeUD3wwAO2dOnSqDEbN260a665JnKck5NjDz74YOR4dHTU5syZY9u3bx/3GgAA4PxRQ1FDAYjGx/cAnJPrrrsu8u/ExERlZmaqpKQkci4rK0tS+PHuMdu2bVNZWZlmz56t1NRUtbS06KeffprU9crLy886ZsWKFbrnnnv07LPP6rnnntOCBQsmHNvf36+kpCSVlZVFzhUVFU3q22j+ufexfZ6+97F9Dw8Pa3BwULW1tUpNTY28Nm/erMHBwQnnnTdvniQnvw0bNmjz5s2qrKzUU089pb6+vv+7t8rKyqhzlZWVGhgY0MjIyLjXc7lcmjt3btT9AgAAFx41VBg1FACJvykF4BxddtllUcculyvqnMvlkiSNjo5Kknbv3q0nnnhCtbW1+uijj3TkyBGtWbNGJ06cmNT1UlJSzjrm77//1uHDh5WYmKiBgYHJbmXKxtvn6efG9v3XX39JklpbW3XkyJHI6+uvv9bnn39+1nnH5lm7dq2CwaBWrlypr776SuXl5Xr55Zcv2D5OXzcAALg4qKHCqKEASDSlAMRIV1eXKioqtH79el1//fXKz88/412uGTNmRL0LNVUNDQ1KSEjQ/v379dJLL+mTTz6ZcGxRUZFOnTqlw4cPR875/f6oP3R5IWRlZSk7O1vBYFD5+flRr7y8vCnNdeWVV6qurk579+5VQ0ODWltbxx1XXFysrq6uqHNdXV0qKChQYmLiOe8FAADEHjUUNRTwX5YU7wUAmB4WLFigN954QwcOHFBeXp7efPNN9fT0RBUVubm5OnDggPx+vzIzM5Wenj7p+d9//3299tpr6u7uVmlpqTZu3KhVq1apr69PGRkZZ4wvLCxUVVWV1q1bp+3btyspKUn19fUX5SuSn376aW3YsEHp6emqqqrS8ePH1dvbq6GhIT3++OOTmqO+vl7V1dUqKCjQ0NCQDh48qOLi4nHHNjQ0aPHixWpublZNTY26u7v1yiuvRH1bDQAA+HeghqKGAv7LeFIKQEysW7dOy5cvV01NjW688Ub9/vvvWr9+fdSYhx9+WIWFhSovL9fs2bPPeKdqIkePHlVtba2amppUWloqKVzEZGVlqa6ubsLf8/l8ys7Olsfj0fLly/XII49ozpw5577JCaxdu1ZtbW3y+XwqKSmRx+NRe3v7lN7lGxkZkdfrVXFxsaqqqlRQUDBhgVRaWqqOjg7t3r1b1157rRobG7Vp0yatXr36Au0IAADECjUUNRTwX+YyM4v3IgAAAAAAADC98KQUAAAAAAAAYo6mFAAAAAAAAGKOphQAAAAAAABijqYUAAAAAAAAYo6mFAAAAAAAAGKOphQAAAAAAABijqYUAAAAAAAAYo6mFAAAAAAAAGKOphQAAAAAAABijqYUAAAAAAAAYo6mFAAAAAAAAGKOphQAAAAAAABi7n+tR5+VySUcIgAAAABJRU5ErkJggg==" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", + "id": "8e444db9", + "metadata": {}, + "source": "## Conclusions and caveats\n\nThe figure above reports, as a function of the matrix dimension $n$, the median forward time, the median backward time, the forward peak memory, and the combined forward + backward peak memory for every strategy. The general-purpose strategies are evaluated on general random skew-symmetric matrices; `PfaffianBlockDet`, when included, is evaluated on block-antidiagonal skew matrices (the only inputs for which it is valid). Shaded bands are 95% confidence intervals over the random seeds (they are essentially invisible for memory, which is seed-independent for a fixed shape).\n\n**Memory-metric caveat.** The memory numbers depend on the device:\n\n- On **CUDA**, the reported value is a true peak obtained from `torch.cuda.reset_peak_memory_stats()` / `torch.cuda.max_memory_allocated()`.\n- On **CPU** (the continuous-integration case), no equivalent peak counter exists, so we report the **allocated bytes** measured by `torch.profiler` instead. This is an aggregate of allocations rather than a strict instantaneous peak, so CPU and CUDA memory values are not directly comparable and the absolute CPU numbers should be read as a relative indicator across strategies and sizes.\n\n`PfaffianFDBPf` and `PfaffianDet` share the same forward (`sqrt(|det(A)|)`); their difference is the backward, so the backward panels highlight the analytic custom backward against plain autograd." + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.14.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index a593822..0000000 --- a/poetry.lock +++ /dev/null @@ -1,563 +0,0 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. - -[[package]] -name = "filelock" -version = "3.16.1" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"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"}, -] - -[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)"] -typing = ["typing-extensions (>=4.12.2)"] - -[[package]] -name = "fsspec" -version = "2025.2.0" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b"}, - {file = "fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd"}, -] - -[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 = "jinja2" -version = "3.1.5" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, - {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"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"}, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -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 = "networkx" -version = "3.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, - {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, -] - -[package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "numpy" -version = "1.24.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, - {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, - {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, - {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, - {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, - {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, - {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, - {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, - {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, - {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, - {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, -] - -[[package]] -name = "nvidia-cublas-cu12" -version = "12.4.5.8" -description = "CUBLAS native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0f8aa1706812e00b9f19dfe0cdb3999b092ccb8ca168c0db5b8ea712456fd9b3"}, - {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b"}, - {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-win_amd64.whl", hash = "sha256:5a796786da89203a0657eda402bcdcec6180254a8ac22d72213abc42069522dc"}, -] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.4.127" -description = "CUDA profiling tools runtime libs." -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:79279b35cf6f91da114182a5ce1864997fd52294a87a16179ce275773799458a"}, - {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb"}, - {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:5688d203301ab051449a2b1cb6690fbe90d2b372f411521c86018b950f3d7922"}, -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.4.127" -description = "NVRTC native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0eedf14185e04b76aa05b1fea04133e59f465b6f960c0cbf4e37c3cb6b0ea198"}, - {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338"}, - {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:a961b2f1d5f17b14867c619ceb99ef6fcec12e46612711bcec78eb05068a60ec"}, -] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.4.127" -description = "CUDA Runtime native Libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:961fe0e2e716a2a1d967aab7caee97512f71767f852f67432d572e36cb3a11f3"}, - {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5"}, - {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:09c2e35f48359752dfa822c09918211844a3d93c100a715d79b59591130c5e1e"}, -] - -[[package]] -name = "nvidia-cudnn-cu12" -version = "9.1.0.70" -description = "cuDNN runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, - {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.2.1.3" -description = "CUFFT native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5dad8008fc7f92f5ddfa2101430917ce2ffacd86824914c82e28990ad7f00399"}, - {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9"}, - {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-win_amd64.whl", hash = "sha256:d802f4954291101186078ccbe22fc285a902136f974d369540fd4a5333d1440b"}, -] - -[package.dependencies] -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.5.147" -description = "CURAND native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1f173f09e3e3c76ab084aba0de819c49e56614feae5c12f69883f4ae9bb5fad9"}, - {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b"}, - {file = "nvidia_curand_cu12-10.3.5.147-py3-none-win_amd64.whl", hash = "sha256:f307cc191f96efe9e8f05a87096abc20d08845a841889ef78cb06924437f6771"}, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.6.1.9" -description = "CUDA solver native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d338f155f174f90724bbde3758b7ac375a70ce8e706d70b018dd3375545fc84e"}, - {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260"}, - {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-win_amd64.whl", hash = "sha256:e77314c9d7b694fcebc84f58989f3aa4fb4cb442f12ca1a9bde50f5e8f6d1b9c"}, -] - -[package.dependencies] -nvidia-cublas-cu12 = "*" -nvidia-cusparse-cu12 = "*" -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.3.1.170" -description = "CUSPARSE native runtime libraries" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9d32f62896231ebe0480efd8a7f702e143c98cfaa0e8a76df3386c1ba2b54df3"}, - {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1"}, - {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-win_amd64.whl", hash = "sha256:9bc90fb087bc7b4c15641521f31c0371e9a612fc2ba12c338d3ae032e6b6797f"}, -] - -[package.dependencies] -nvidia-nvjitlink-cu12 = "*" - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.21.5" -description = "NVIDIA Collective Communication Library (NCCL) Runtime" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"}, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.4.127" -description = "Nvidia JIT LTO Library" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.4.127" -description = "NVIDIA Tools Extension" -optional = false -python-versions = ">=3" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\"" -files = [ - {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7959ad635db13edf4fc65c06a6e9f9e55fc2f92596db928d169c0bb031e88ef3"}, - {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a"}, - {file = "nvidia_nvtx_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:641dccaaa1139f3ffb0d3164b4b84f9d253397e38246a4f2f36728b48566d485"}, -] - -[[package]] -name = "setuptools" -version = "75.3.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, - {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, -] - -[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.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "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 (>=5.5)", "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.12.*)", "pytest-mypy"] - -[[package]] -name = "sympy" -version = "1.12.1" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.8\"" -files = [ - {file = "sympy-1.12.1-py3-none-any.whl", hash = "sha256:9b2cbc7f1a640289430e13d2a56f02f867a1da0190f2f99d8968c2f74da0e515"}, - {file = "sympy-1.12.1.tar.gz", hash = "sha256:2877b03f998cd8c08f07cd0de5b767119cd3ef40d09f41c30d722f6686b0fb88"}, -] - -[package.dependencies] -mpmath = ">=1.1.0,<1.4.0" - -[[package]] -name = "sympy" -version = "1.13.1" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version >= \"3.9\"" -files = [ - {file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"}, - {file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"}, -] - -[package.dependencies] -mpmath = ">=1.1.0,<1.4" - -[package.extras] -dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] - -[[package]] -name = "torch" -version = "2.5.1" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -files = [ - {file = "torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:71328e1bbe39d213b8721678f9dcac30dfc452a46d586f1d514a6aa0a99d4744"}, - {file = "torch-2.5.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:34bfa1a852e5714cbfa17f27c49d8ce35e1b7af5608c4bc6e81392c352dbc601"}, - {file = "torch-2.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:32a037bd98a241df6c93e4c789b683335da76a2ac142c0973675b715102dc5fa"}, - {file = "torch-2.5.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:23d062bf70776a3d04dbe74db950db2a5245e1ba4f27208a87f0d743b0d06e86"}, - {file = "torch-2.5.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:de5b7d6740c4b636ef4db92be922f0edc425b65ed78c5076c43c42d362a45457"}, - {file = "torch-2.5.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:340ce0432cad0d37f5a31be666896e16788f1adf8ad7be481196b503dad675b9"}, - {file = "torch-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:603c52d2fe06433c18b747d25f5c333f9c1d58615620578c326d66f258686f9a"}, - {file = "torch-2.5.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:31f8c39660962f9ae4eeec995e3049b5492eb7360dd4f07377658ef4d728fa4c"}, - {file = "torch-2.5.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed231a4b3a5952177fafb661213d690a72caaad97d5824dd4fc17ab9e15cec03"}, - {file = "torch-2.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:3f4b7f10a247e0dcd7ea97dc2d3bfbfc90302ed36d7f3952b0008d0df264e697"}, - {file = "torch-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:73e58e78f7d220917c5dbfad1a40e09df9929d3b95d25e57d9f8558f84c9a11c"}, - {file = "torch-2.5.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:8c712df61101964eb11910a846514011f0b6f5920c55dbf567bff8a34163d5b1"}, - {file = "torch-2.5.1-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:9b61edf3b4f6e3b0e0adda8b3960266b9009d02b37555971f4d1c8f7a05afed7"}, - {file = "torch-2.5.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1f3b7fb3cf7ab97fae52161423f81be8c6b8afac8d9760823fd623994581e1a3"}, - {file = "torch-2.5.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7974e3dce28b5a21fb554b73e1bc9072c25dde873fa00d54280861e7a009d7dc"}, - {file = "torch-2.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:46c817d3ea33696ad3b9df5e774dba2257e9a4cd3c4a3afbf92f6bb13ac5ce2d"}, - {file = "torch-2.5.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:8046768b7f6d35b85d101b4b38cba8aa2f3cd51952bc4c06a49580f2ce682291"}, -] - -[package.dependencies] -filelock = "*" -fsspec = "*" -jinja2 = "*" -networkx = "*" -nvidia-cublas-cu12 = {version = "12.4.5.8", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-cupti-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-nvrtc-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-runtime-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cudnn-cu12 = {version = "9.1.0.70", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cufft-cu12 = {version = "11.2.1.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-curand-cu12 = {version = "10.3.5.147", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusolver-cu12 = {version = "11.6.1.9", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusparse-cu12 = {version = "12.3.1.170", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu12 = {version = "2.21.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvjitlink-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvtx-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -setuptools = {version = "*", markers = "python_version >= \"3.12\""} -sympy = [ - {version = "1.12.1", markers = "python_version == \"3.8\""}, - {version = "1.13.1", markers = "python_version >= \"3.9\""}, -] -triton = {version = "3.1.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\""} -typing-extensions = ">=4.8.0" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] -optree = ["optree (>=0.12.0)"] - -[[package]] -name = "triton" -version = "3.1.0" -description = "A language and compiler for custom Deep Learning operations" -optional = false -python-versions = "*" -groups = ["main"] -markers = "python_version == \"3.8\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" or python_version >= \"3.9\" and platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\"" -files = [ - {file = "triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b0dd10a925263abbe9fa37dcde67a5e9b2383fc269fdf59f5657cac38c5d1d8"}, - {file = "triton-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f34f6e7885d1bf0eaaf7ba875a5f0ce6f3c13ba98f9503651c1e6dc6757ed5c"}, - {file = "triton-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8182f42fd8080a7d39d666814fa36c5e30cc00ea7eeeb1a2983dbb4c99a0fdc"}, - {file = "triton-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dadaca7fc24de34e180271b5cf864c16755702e9f63a16f62df714a8099126a"}, - {file = "triton-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aafa9a20cd0d9fee523cd4504aa7131807a864cd77dcf6efe7e981f18b8c6c11"}, -] - -[package.dependencies] -filelock = "*" - -[package.extras] -build = ["cmake (>=3.20)", "lit"] -tests = ["autopep8", "flake8", "isort", "llnl-hatchet", "numpy", "pytest", "scipy (>=1.7.1)"] -tutorials = ["matplotlib", "pandas", "tabulate"] - -[[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"] -markers = "python_version == \"3.8\" or python_version >= \"3.9\"" -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"}, -] - -[metadata] -lock-version = "2.1" -python-versions = ">=3.8" -content-hash = "86cbdcc9942ce0fe264ccaf656b9a1faaf82a1281d609dd55483eb95e5db46ae" diff --git a/pyproject.toml b/pyproject.toml index 5593271..8386951 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,60 +1,171 @@ -[tool.pytest.ini_options] -pythonpath = [ - ".", "src", -] -addopts = [ - "--cov=src", -# "--no-cov", - "--durations=10", -] - - -[build-system] -requires = [ - "numpy>=1.23.0", - "setuptools>=57.0.0", - "pytest>=7.4.2", - "pytest-cov>=4.1.0", - "wheel", - "torch", -] -build-backend = "setuptools.build_meta" - - - [project] name = "TorchPfaffian" -dynamic = ["version", "readme"] -description = "" -authors = [ - { name="Jérémie Gince", email="gincejeremie@gmail.com" }, -] +version = "0.0.1" +description = "PyTorch-based Pfaffian computation for skew-symmetric matrices." +authors = [{ name = "Jérémie Gince", email = "gincejeremie@gmail.com" }] +requires-python = ">=3.10,<3.15" +license = { file = "LICENSE" } classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", "Operating System :: OS Independent", ] -requires-python = ">=3.8" dependencies = [ - "numpy>=1.23.0", - "setuptools>=57.0.0", - "torch", - "numpy" + "numpy (>=1.23,<3.0.0)", + "torch (>=2.1,<3.0.0)", ] +readme = "README.md" +[project.urls] +homepage = "https://github.com/MatchCake/TorchPfaffian" +Documentation = "https://MatchCake.github.io/TorchPfaffian" +Source = "https://github.com/MatchCake/TorchPfaffian" -[tool.setuptools] -package-dir = {"" = "src"} +[tool.pytest.ini_options] +pythonpath = [ + ".", "src", +] +testpaths = ["tests"] +addopts = [ + "-n=auto", + "--cov-branch", + "--cov=src", + '--cov-report=xml:tests/.tmp/coverage.xml', + "--cov-report=term-missing", + "--durations=10", +] -[tool.setuptools.packages.find] -where = ["src"] +[dependency-groups] +dev = [ + "pytest-cov>=6.1,<7", + "pytest-json-report>=1.5,<2", + "pytest>=8.4,<9", + "mypy>=1.15,<2", + "ruff>=0.9,<1", + "nbmake>=1.5,<2", + "wheel>=0.45,<0.46", + "build>=1.4,<2", + "twine>=6.1,<7", + "pytest-xdist>=3.7,<4", + "pytest-timeout>=2.4", + "pip>=25", + "pre-commit>=4.5.1", + "maturin>=1.0,<2", + "tqdm>=4.68.2", + "seaborn>=0.13.2", +] +docs = [ + "wheel>=0.45,<0.46", + "build>=1.4,<2", + "twine>=6.1,<7", + "sphinx>=6.2,<6.3", + "docutils>=0.18,<0.20", + "sphinx-rtd-theme>=3.0,<4", + "sphinxcontrib-bibtex>=2.5,<2.6", + "sphinx-theme~=1.0", + "groundwork-sphinx-theme>=1.1,<2", + "karma-sphinx-theme>=0.0.8,<0.0.9", + "sphinx-mdinclude>=0.6,<0.7", + "myst-nb>=1.1,<2", + "ipykernel>=6.29,<7", + "matplotlib>=3.8,<4", + "nbconvert>=7.16,<8", +] +[tool.uv] +default-groups = [ + "dev", + "docs", +] +conflicts = [ + [ + { extra = "cpu" }, + { extra = "cu128" }, + { extra = "cu130" }, + ], +] -[tool.poetry] -packages = [{include = "torch_pfaffian", from = "src"}] -version = "0.0.1" +[project.optional-dependencies] +cpu = [ + "torch (>=2.1.2,<3.0.0)", +] +cu128 = [ + "torch (>=2.1.2,<3.0.0)", +] +cu130 = [ + "torch (>=2.1.2,<3.0.0)", +] + +[tool.uv.sources] +torch = [ + { index = "pytorch-cpu", extra = "cpu" }, + { index = "pytorch-cu128", extra = "cu128" }, + { index = "pytorch-cu130", extra = "cu130" }, +] + +[[tool.uv.index]] +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu128" +url = "https://download.pytorch.org/whl/cu128" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu130" +url = "https://download.pytorch.org/whl/cu130" +explicit = true + +[build-system] +requires = ["maturin>=1.0,<2"] +build-backend = "maturin" + +[tool.maturin] +python-source = "src" +manifest-path = "rust/Cargo.toml" +module-name = "torch_pfaffian._rust" +features = ["pyo3/extension-module"] +include = ["src/torch_pfaffian/py.typed"] + +[tool.coverage.report] +exclude_also = [ + 'def __repr__', + 'if self.debug:', + 'if settings.DEBUG', + 'raise AssertionError', + 'raise NotImplementedError', + 'if __name__ == .__main__.:', + 'if TYPE_CHECKING:', + '@(abc\.)?abstractmethod', +] + +[tool.coverage.run] +relative_files = true + +[[tool.mypy.overrides]] +module = [] +ignore_missing_imports = true + +[tool.ruff] +line-length = 120 +extend-exclude = ["archives"] +force-exclude = true + +[tool.ruff.lint] +select = ["E", "F", "I"] + +[tool.ruff.lint.per-file-ignores] +"**/__init__.py" = ["F401", "F403", "F405"] +"sphinx/source/conf.py" = ["E402"] + +[tool.ruff.format] +quote-style = "double" diff --git a/requirements.txt b/requirements.txt index 234cad5..46823c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,479 @@ -pytest>=7.4.2 -pytest_cov>=4.1.0 -pytest_json_report>=1.5.0 -pythonbasictools>=0.0.1a10 -setuptools>=65.5.1 -tqdm>=4.66.1 -psutil>=5.9.6 -numpy>=1.23.0 -torch \ No newline at end of file +# This file was autogenerated by uv via the following command: +# uv export --frozen --no-hashes --output-file=requirements.txt +-e . +alabaster==0.7.16 + # via sphinx +appnope==0.1.4 ; sys_platform == 'darwin' + # via ipykernel +asttokens==3.0.1 + # via stack-data +attrs==26.1.0 + # via + # jsonschema + # jupyter-cache + # referencing +babel==2.18.0 + # via sphinx +backports-tarfile==1.2.0 ; python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x' + # via jaraco-context +beautifulsoup4==4.15.0 + # via nbconvert +bleach==6.4.0 + # via nbconvert +build==1.5.0 +certifi==2026.5.20 + # via requests +cffi==2.0.0 ; (implementation_name == 'pypy' and platform_machine == 'ppc64le') or (implementation_name == 'pypy' and platform_machine == 's390x') or (implementation_name == 'pypy' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'PyPy') or (implementation_name == 'pypy' and sys_platform != 'linux') or (platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') + # via + # cryptography + # pyzmq +cfgv==3.5.0 + # via pre-commit +charset-normalizer==3.4.7 + # via requests +click==8.4.1 + # via jupyter-cache +colorama==0.4.6 ; os_name == 'nt' or sys_platform == 'win32' + # via + # build + # click + # ipython + # pytest + # sphinx + # tqdm +comm==0.2.3 + # via ipykernel +contourpy==1.3.2 ; python_full_version < '3.11' + # via matplotlib +contourpy==1.3.3 ; python_full_version >= '3.11' + # via matplotlib +coverage==7.14.1 + # via pytest-cov +cryptography==48.0.1 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux' + # via secretstorage +cycler==0.12.1 + # via matplotlib +debugpy==1.8.21 + # via ipykernel +decorator==5.3.1 + # via ipython +defusedxml==0.7.1 + # via nbconvert +distlib==0.4.2 + # via virtualenv +docutils==0.19 + # via + # myst-parser + # pybtex-docutils + # readme-renderer + # sphinx + # sphinx-mdinclude + # sphinx-rtd-theme + # sphinxcontrib-bibtex +exceptiongroup==1.3.1 ; python_full_version < '3.11' + # via + # ipython + # pytest +execnet==2.1.2 + # via pytest-xdist +executing==2.2.1 + # via stack-data +fastjsonschema==2.21.2 + # via nbformat +filelock==3.29.1 + # via + # python-discovery + # torch + # virtualenv +fonttools==4.63.0 + # via matplotlib +fsspec==2026.4.0 + # via torch +greenlet==3.5.1 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + # via sqlalchemy +groundwork-sphinx-theme==1.1.1 +id==1.6.1 + # via twine +identify==2.6.19 + # via pre-commit +idna==3.18 + # via requests +imagesize==2.0.0 + # via sphinx +importlib-metadata==9.0.0 + # via + # build + # jupyter-cache + # keyring + # myst-nb +iniconfig==2.3.0 + # via pytest +ipykernel==6.31.0 + # via + # myst-nb + # nbmake +ipython==8.39.0 ; python_full_version < '3.11' + # via + # ipykernel + # myst-nb +ipython==9.14.1 ; python_full_version >= '3.11' + # via + # ipykernel + # myst-nb +ipython-pygments-lexers==1.1.1 ; python_full_version >= '3.11' + # via ipython +jaraco-classes==3.4.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + # via keyring +jaraco-context==6.1.2 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + # via keyring +jaraco-functools==4.5.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + # via keyring +jedi==0.20.0 + # via ipython +jeepney==0.9.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux' + # via + # keyring + # secretstorage +jinja2==3.1.6 + # via + # myst-parser + # nbconvert + # sphinx + # torch +jsonschema==4.26.0 + # via nbformat +jsonschema-specifications==2025.9.1 + # via jsonschema +jupyter-cache==1.0.1 + # via myst-nb +jupyter-client==8.9.1 + # via + # ipykernel + # nbclient +jupyter-core==5.9.1 + # via + # ipykernel + # jupyter-client + # nbclient + # nbconvert + # nbformat +jupyterlab-pygments==0.3.0 + # via nbconvert +karma-sphinx-theme==0.0.8 +keyring==25.7.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + # via twine +kiwisolver==1.5.0 + # via matplotlib +latexcodec==3.0.1 + # via pybtex +librt==0.11.0 ; platform_python_implementation != 'PyPy' + # via mypy +markdown-it-py==3.0.0 + # via + # mdit-py-plugins + # myst-parser + # rich +markupsafe==3.0.3 + # via + # jinja2 + # nbconvert +matplotlib==3.10.9 + # via seaborn +matplotlib-inline==0.2.2 + # via + # ipykernel + # ipython +maturin==1.13.3 +mdit-py-plugins==0.6.1 + # via myst-parser +mdurl==0.1.2 + # via markdown-it-py +mistune==3.2.1 + # via + # nbconvert + # sphinx-mdinclude +more-itertools==11.1.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + # via + # jaraco-classes + # jaraco-functools +mpmath==1.3.0 + # via sympy +mypy==1.20.2 +mypy-extensions==1.1.0 + # via mypy +myst-nb==1.4.0 +myst-parser==3.0.1 + # via myst-nb +nbclient==0.11.0 + # via + # jupyter-cache + # myst-nb + # nbconvert + # nbmake +nbconvert==7.17.1 +nbformat==5.10.4 + # via + # jupyter-cache + # myst-nb + # nbclient + # nbconvert + # nbmake +nbmake==1.5.5 +nest-asyncio==1.6.0 + # via ipykernel +networkx==3.4.2 ; python_full_version < '3.11' + # via torch +networkx==3.6.1 ; python_full_version >= '3.11' + # via torch +nh3==0.3.5 + # via readme-renderer +nodeenv==1.10.0 + # via pre-commit +numpy==2.2.6 ; python_full_version < '3.11' + # via + # contourpy + # matplotlib + # pandas + # seaborn + # torchpfaffian +numpy==2.4.6 ; python_full_version >= '3.11' + # via + # contourpy + # matplotlib + # pandas + # seaborn + # torchpfaffian +packaging==26.2 + # via + # build + # ipykernel + # matplotlib + # nbconvert + # pytest + # sphinx + # twine +pandas==2.3.3 ; python_full_version < '3.11' + # via seaborn +pandas==3.0.3 ; python_full_version >= '3.11' + # via seaborn +pandocfilters==1.5.1 + # via nbconvert +parso==0.8.7 + # via jedi +pathspec==1.1.1 + # via mypy +pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' + # via ipython +pillow==12.2.0 + # via matplotlib +pip==26.1.2 +platformdirs==4.10.0 + # via + # jupyter-core + # python-discovery + # virtualenv +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pre-commit==4.6.0 +prompt-toolkit==3.0.52 + # via ipython +psutil==7.2.2 + # via + # ipykernel + # ipython +ptyprocess==0.7.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' + # via pexpect +pure-eval==0.2.3 + # via stack-data +pybtex==0.26.1 + # via + # pybtex-docutils + # sphinxcontrib-bibtex +pybtex-docutils==1.0.3 + # via sphinxcontrib-bibtex +pycparser==3.0 ; (implementation_name == 'pypy' and platform_machine == 'ppc64le') or (implementation_name == 'pypy' and platform_machine == 's390x') or (implementation_name == 'pypy' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'PyPy') or (implementation_name != 'PyPy' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (implementation_name == 'pypy' and sys_platform != 'linux') + # via cffi +pygments==2.20.0 + # via + # ipython + # ipython-pygments-lexers + # nbconvert + # nbmake + # pytest + # readme-renderer + # rich + # sphinx + # sphinx-mdinclude +pyparsing==3.3.2 + # via matplotlib +pyproject-hooks==1.2.0 + # via build +pytest==8.4.2 + # via + # nbmake + # pytest-cov + # pytest-json-report + # pytest-metadata + # pytest-timeout + # pytest-xdist +pytest-cov==6.3.0 +pytest-json-report==1.5.0 +pytest-metadata==3.1.1 + # via pytest-json-report +pytest-timeout==2.4.0 +pytest-xdist==3.8.0 +python-dateutil==2.9.0.post0 + # via + # jupyter-client + # matplotlib + # pandas +python-discovery==1.4.0 + # via virtualenv +pytz==2026.2 ; python_full_version < '3.11' + # via pandas +pywin32-ctypes==0.2.3 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'win32' + # via keyring +pyyaml==6.0.3 + # via + # jupyter-cache + # myst-nb + # myst-parser + # pre-commit + # pybtex +pyzmq==27.1.0 + # via + # ipykernel + # jupyter-client +readme-renderer==43.0 + # via twine +referencing==0.37.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.34.2 + # via + # requests-toolbelt + # sphinx + # twine +requests-toolbelt==1.0.0 + # via twine +rfc3986==2.0.0 + # via twine +rich==15.0.0 + # via twine +rpds-py==0.30.0 ; python_full_version < '3.11' + # via + # jsonschema + # referencing +rpds-py==2026.5.1 ; python_full_version >= '3.11' + # via + # jsonschema + # referencing +ruff==0.15.16 +seaborn==0.13.2 +secretstorage==3.5.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' and sys_platform == 'linux' + # via keyring +setuptools==82.0.1 ; python_full_version >= '3.12' + # via torch +six==1.17.0 + # via python-dateutil +snowballstemmer==3.1.1 + # via sphinx +soupsieve==2.8.4 + # via beautifulsoup4 +sphinx==6.2.1 + # via + # groundwork-sphinx-theme + # myst-nb + # myst-parser + # sphinx-mdinclude + # sphinx-rtd-theme + # sphinxcontrib-bibtex + # sphinxcontrib-jquery +sphinx-mdinclude==0.6.2 +sphinx-rtd-theme==3.1.0 +sphinx-theme==1.0 +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-bibtex==2.5.0 +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jquery==4.1 + # via sphinx-rtd-theme +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +sqlalchemy==2.0.50 + # via jupyter-cache +stack-data==0.6.3 + # via ipython +sympy==1.14.0 + # via torch +tabulate==0.10.0 + # via jupyter-cache +tinycss2==1.5.1 + # via bleach +tomli==2.4.1 ; python_full_version <= '3.11' + # via + # build + # coverage + # maturin + # mypy + # pytest +torch==2.10.0 + # via torchpfaffian +tornado==6.5.7 + # via + # ipykernel + # jupyter-client +tqdm==4.68.2 +traitlets==5.15.1 + # via + # ipykernel + # ipython + # jupyter-client + # jupyter-core + # matplotlib-inline + # nbclient + # nbconvert + # nbformat +twine==6.2.0 +typing-extensions==4.15.0 + # via + # beautifulsoup4 + # cryptography + # exceptiongroup + # ipython + # jupyter-client + # mistune + # mypy + # myst-nb + # referencing + # sqlalchemy + # torch + # virtualenv +tzdata==2026.2 ; python_full_version < '3.11' or sys_platform == 'emscripten' or sys_platform == 'win32' + # via pandas +urllib3==2.7.0 + # via + # id + # requests + # twine +virtualenv==21.4.2 + # via pre-commit +wcwidth==0.8.1 + # via prompt-toolkit +webencodings==0.5.1 + # via + # bleach + # tinycss2 +wheel==0.45.1 +zipp==4.1.0 + # via importlib-metadata diff --git a/run_pytests.py b/run_pytests.py deleted file mode 100644 index a2706a8..0000000 --- a/run_pytests.py +++ /dev/null @@ -1,37 +0,0 @@ -import json -import os - -import pytest -import pythonbasictools as pbt -from pytest_jsonreport.plugin import JSONReport -from pytest_cov.plugin import CovPlugin - -from tests import configs -from tests.conftest import RUN_SLOW_ARG_NAME - -if __name__ == '__main__': - sys_args_dict = pbt.cmds.get_cmd_kwargs( - { - 1 : os.path.join(os.getcwd(), "tests"), - "N_RANDOM_TESTS_PER_CASE": configs.N_RANDOM_TESTS_PER_CASE, - "save_report" : "True", - "cov" : "src", - "cov-report" : "xml", - RUN_SLOW_ARG_NAME : "True", - "durations" : 10, - } - ) - sys_args_dict["cov-report"] = sys_args_dict["cov_report"] # fix - configs.N_RANDOM_TESTS_PER_CASE = sys_args_dict["N_RANDOM_TESTS_PER_CASE"] - configs.RUN_SLOW_TESTS = 't' in str(sys_args_dict[RUN_SLOW_ARG_NAME]).lower() - json_plugin = JSONReport() - pytest_main_args_names = ["cov", "cov-report", "durations"] - pytest_main_args = [f"--{k}={sys_args_dict[k]}" for k in pytest_main_args_names] - pytest.main([sys_args_dict[1], *pytest_main_args], plugins=[json_plugin]) - json_path = os.path.join(os.getcwd(), "tests", "tmp", f"tests_report_rn{configs.N_RANDOM_TESTS_PER_CASE}.json") - save_report = 't' in str(sys_args_dict["save_report"]).lower() - if save_report: - json_plugin.save_report(json_path) - json_data = json.load(open(json_path)) - with open(json_path, "w") as f: - json.dump(json_data, f, indent=4) diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 0000000..37519ad --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,323 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "ndarray" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "numpy" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94caae805f998a07d33af06e6a3891e38556051b8045c615470a71590e13e78" +dependencies = [ + "libc", + "ndarray", + "num-complex", + "num-integer", + "num-traits", + "pyo3", + "rustc-hash", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "torch_pfaffian_rust" +version = "0.0.1" +dependencies = [ + "ndarray", + "num-traits", + "numpy", + "pyo3", + "rayon", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unindent" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..6b8deef --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "torch_pfaffian_rust" +version = "0.0.1" +edition = "2021" + +[lib] +name = "_rust" +crate-type = ["cdylib"] + +[dependencies] +pyo3 = { version = "0.23", features = ["abi3-py310", "extension-module"] } +numpy = "0.23" +ndarray = "0.16" +num-traits = "0.2" +rayon = "1" diff --git a/rust/src/lib.rs b/rust/src/lib.rs new file mode 100644 index 0000000..0fd6912 --- /dev/null +++ b/rust/src/lib.rs @@ -0,0 +1,164 @@ +use num_traits::Float; +use numpy::ndarray::{Array1, Array2, Axis}; +use numpy::{IntoPyArray, PyArray1, PyReadonlyArray3}; +use pyo3::prelude::*; +use rayon::prelude::*; + +const PIVOT_EPSILON: f64 = 1e-30; + +/// Batches with at least this many matrices are evaluated in parallel across threads; smaller +/// batches run serially to avoid thread-pool overhead. +const PARALLEL_BATCH_THRESHOLD: usize = 8; + +/// Signed Pfaffian of a single skew-symmetric matrix via Parlett-Reid elimination. +/// +/// Generic over the floating precision so the same algorithm serves ``f32`` and ``f64`` inputs. +/// The matrix is copied into a flat row-major buffer so the hot rank-2 Schur update runs over a +/// contiguous row slice, which the compiler can auto-vectorize (far cheaper than per-element +/// strided ndarray indexing). +fn pfaffian_one(matrix: Array2) -> T { + let dimension = matrix.nrows(); + if dimension % 2 == 1 { + return T::zero(); + } + if dimension == 0 { + return T::one(); + } + let mut data: Vec = matrix.iter().copied().collect(); // row-major, len dimension * dimension + let epsilon = T::from(PIVOT_EPSILON).unwrap(); + let mut sign = T::one(); + let mut column = 0usize; + while column + 2 < dimension { + // Partial pivoting: largest |data[row, column]| for row > column + 1. + let mut pivot_row = column + 2; + let mut best = data[(column + 2) * dimension + column].abs(); + for row in (column + 3)..dimension { + let candidate = data[row * dimension + column].abs(); + if candidate > best { + best = candidate; + pivot_row = row; + } + } + if best > data[(column + 1) * dimension + column].abs() { + // Congruence swap of rows then columns column+1 <-> pivot_row. + for index in 0..dimension { + data.swap((column + 1) * dimension + index, pivot_row * dimension + index); + } + for index in 0..dimension { + data.swap(index * dimension + (column + 1), index * dimension + pivot_row); + } + sign = -sign; + } + let pivot = data[(column + 1) * dimension + column]; + if pivot.abs() < epsilon { + return T::zero(); + } + // Rank-2 skew Schur-complement update on the trailing block, read from originals. + let base = column + 2; + let length = dimension - base; + let tau: Vec = (0..length).map(|k| data[(base + k) * dimension + column] / pivot).collect(); + let next: Vec = (0..length).map(|k| data[(base + k) * dimension + (column + 1)]).collect(); + for row_offset in 0..length { + let tau_row = tau[row_offset]; + let next_row = next[row_offset]; + let start = (base + row_offset) * dimension + base; + let row = &mut data[start..start + length]; + for column_offset in 0..length { + row[column_offset] = + row[column_offset] + tau_row * next[column_offset] - next_row * tau[column_offset]; + } + } + column += 2; + } + let mut pfaffian = sign; + let mut index = 0usize; + while index < dimension { + pfaffian = pfaffian * data[index * dimension + (index + 1)]; + index += 2; + } + pfaffian +} + +/// Signed Pfaffian of each owned matrix, computed in parallel across the batch above a threshold. +/// +/// The batch elements are independent, so they are mapped over rayon threads; the per-matrix +/// Parlett-Reid elimination itself stays sequential. The caller releases the GIL around this. +fn signed_pfaffian_owned(matrices: Vec>) -> Vec { + if matrices.len() >= PARALLEL_BATCH_THRESHOLD { + matrices.into_par_iter().map(pfaffian_one).collect() + } else { + matrices.into_iter().map(pfaffian_one).collect() + } +} + +/// Copy each ``(n, n)`` slice of a ``(batch, n, n)`` view into an owned matrix. +fn owned_matrices(matrix: &PyReadonlyArray3<'_, T>) -> Vec> { + let view = matrix.as_array(); + let batch = view.shape()[0]; + (0..batch).map(|index| view.index_axis(Axis(0), index).to_owned()).collect() +} + +/// Signed Pfaffian of a batch of ``float64`` skew-symmetric matrices, shape ``(batch, n, n)``. +#[pyfunction] +fn signed_pfaffian_f64<'py>(py: Python<'py>, matrix: PyReadonlyArray3<'py, f64>) -> Bound<'py, PyArray1> { + let matrices = owned_matrices(&matrix); + let results = py.allow_threads(|| signed_pfaffian_owned(matrices)); + Array1::from(results).into_pyarray(py) +} + +/// Signed Pfaffian of a batch of ``float32`` skew-symmetric matrices, shape ``(batch, n, n)``. +#[pyfunction] +fn signed_pfaffian_f32<'py>(py: Python<'py>, matrix: PyReadonlyArray3<'py, f32>) -> Bound<'py, PyArray1> { + let matrices = owned_matrices(&matrix); + let results = py.allow_threads(|| signed_pfaffian_owned(matrices)); + Array1::from(results).into_pyarray(py) +} + +#[pymodule] +fn _rust(module: &Bound<'_, PyModule>) -> PyResult<()> { + module.add_function(wrap_pyfunction!(signed_pfaffian_f64, module)?)?; + module.add_function(wrap_pyfunction!(signed_pfaffian_f32, module)?)?; + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::pfaffian_one; + use numpy::ndarray::array; + + #[test] + fn two_by_two_is_signed() { + // pf([[0, -3], [3, 0]]) = -3 + let m = array![[0.0_f64, -3.0], [3.0, 0.0]]; + assert!((pfaffian_one(m) - (-3.0)).abs() < 1e-12); + } + + #[test] + fn four_by_four_matches_pfaffian_formula() { + // For [[0,a,b,c],[-a,0,d,e],[-b,-d,0,f],[-c,-e,-f,0]], pf = a*f - b*e + c*d. + let (a, b, c, d, e, f) = (1.0_f64, 2.0, 3.0, 4.0, 5.0, 6.0); + let m = array![ + [0.0, a, b, c], + [-a, 0.0, d, e], + [-b, -d, 0.0, f], + [-c, -e, -f, 0.0] + ]; + let expected = a * f - b * e + c * d; // = 6 - 10 + 12 = 8 + assert!((pfaffian_one(m) - expected).abs() < 1e-9); + } + + #[test] + fn f32_two_by_two_is_signed() { + // Same algorithm in single precision. + let m = array![[0.0_f32, -3.0], [3.0, 0.0]]; + assert!((pfaffian_one(m) - (-3.0)).abs() < 1e-5); + } + + #[test] + fn odd_is_zero_and_empty_is_one() { + let odd = array![[0.0_f64, 1.0, 2.0], [-1.0, 0.0, 3.0], [-2.0, -3.0, 0.0]]; + assert_eq!(pfaffian_one(odd), 0.0); + let empty = numpy::ndarray::Array2::::zeros((0, 0)); + assert_eq!(pfaffian_one(empty), 1.0); + } +} diff --git a/setup.py b/setup.py deleted file mode 100644 index 739cb90..0000000 --- a/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -from setuptools import setup -import setuptools - -setup( - name='TorchPfaffian', - long_description='file: README.md', - long_description_content_type="text/markdown", - package_dir={"": "src"}, - packages=setuptools.find_packages(where="src"), - python_requires=">=3.8", - classifiers=[ - "Development Status :: 3 - Alpha", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", - "Topic :: Scientific/Engineering", - "Topic :: Scientific/Engineering :: Artificial Intelligence", - "Topic :: Software Development :: Libraries :: Python Modules", - "Operating System :: OS Independent", - ], - project_urls={ - 'Homepage': 'https://https://github.com/MatchCake/TorchPfaffian', - 'Source': 'https://https://github.com/MatchCake/TorchPfaffian', - 'Documentation': 'https://MatchCake.github.io/TorchPfaffian', - }, -) - - -# build library -# setup.py sdist bdist_wheel -# With pyproject.toml -# python -m pip install --upgrade build -# python -m build - -# publish on PyPI -# twine check dist/* -# twine upload --repository-url https://test.pypi.org/legacy/ dist/* -# twine upload dist/* - diff --git a/sphinx/clean_html_files.py b/sphinx/clean_html_files.py index c066388..8499831 100644 --- a/sphinx/clean_html_files.py +++ b/sphinx/clean_html_files.py @@ -3,20 +3,20 @@ def clean_html_files(): - meta_filename = "docs/html_files_list.txt" - if not os.path.exists(meta_filename): - return - with open(meta_filename, "r") as f: - files = f.readlines() - for file in files: - path = os.path.join(os.getcwd(), "docs", file.strip()) - if os.path.exists(path): - if os.path.isdir(path): - shutil.rmtree(path) - else: - os.remove(path) - os.remove(meta_filename) + meta_filename = "docs/html_files_list.txt" + if not os.path.exists(meta_filename): + return + with open(meta_filename, "r") as f: + files = f.readlines() + for file in files: + path = os.path.join(os.getcwd(), "docs", file.strip()) + if os.path.exists(path): + if os.path.isdir(path): + shutil.rmtree(path) + else: + os.remove(path) + os.remove(meta_filename) -if __name__ == '__main__': - clean_html_files() +if __name__ == "__main__": + clean_html_files() diff --git a/sphinx/generate_doc.py b/sphinx/generate_doc.py index 25de62e..f2f30a3 100644 --- a/sphinx/generate_doc.py +++ b/sphinx/generate_doc.py @@ -1,17 +1,18 @@ -import os, sys +import os +import sys -def generate_doc(path_to_root_dir: str = '.'): - commands = [ - rf"sphinx-apidoc -f -o {path_to_root_dir}/sphinx/source {path_to_root_dir}/src/neurotorch", - rf"{path_to_root_dir}\sphinx\make clean html", - rf"{path_to_root_dir}\sphinx\make html", - ] - for command in commands: - print(f"Executing: {command}") - os.system(command) +def generate_doc(path_to_root_dir: str = "."): + commands = [ + rf"sphinx-apidoc -f -o {path_to_root_dir}/sphinx/source {path_to_root_dir}/src/neurotorch", + rf"{path_to_root_dir}\sphinx\make clean html", + rf"{path_to_root_dir}\sphinx\make html", + ] + for command in commands: + print(f"Executing: {command}") + os.system(command) -if __name__ == '__main__': - root_dir = sys.argv[1] if len(sys.argv) > 1 else '..' - generate_doc(root_dir) +if __name__ == "__main__": + root_dir = sys.argv[1] if len(sys.argv) > 1 else ".." + generate_doc(root_dir) diff --git a/sphinx/make_html_files_list.py b/sphinx/make_html_files_list.py index 1422259..cc37bbf 100644 --- a/sphinx/make_html_files_list.py +++ b/sphinx/make_html_files_list.py @@ -2,12 +2,12 @@ def make_html_file_list(): - meta_filename = "./docs/html_files_list.txt" - os.makedirs(os.path.dirname(meta_filename), exist_ok=True) - files = os.listdir(os.path.join('sphinx', "build", "html")) - with open(meta_filename, "w") as f: - f.write("\n".join(files)) - - -if __name__ == '__main__': - make_html_file_list() + meta_filename = "./docs/html_files_list.txt" + os.makedirs(os.path.dirname(meta_filename), exist_ok=True) + files = os.listdir(os.path.join("sphinx", "build", "html")) + with open(meta_filename, "w") as f: + f.write("\n".join(files)) + + +if __name__ == "__main__": + make_html_file_list() diff --git a/sphinx/source/conf.py b/sphinx/source/conf.py index 98193c8..cf7d59f 100644 --- a/sphinx/source/conf.py +++ b/sphinx/source/conf.py @@ -4,13 +4,18 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html import os -import pprint -import sys import shutil -basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'src')) +import sys + +basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "src")) sys.path.insert(0, basedir) import torch_pfaffian +_nb_src = os.path.join(os.path.dirname(__file__), "..", "..", "notebooks") +_nb_dst = os.path.join(os.path.dirname(__file__), "notebooks") +if os.path.isdir(_nb_src): + shutil.rmtree(_nb_dst, ignore_errors=True) + shutil.copytree(_nb_src, _nb_dst) _html_folders_formatted = {} _allowed_special_methods = ["__init__", "__call__"] @@ -24,44 +29,44 @@ def skip(app, what, name, obj, would_skip, options): def setup(app): app.connect("autodoc-skip-member", skip) - app.connect('html-page-context', change_pathto) - app.connect('build-finished', move_private_folders) + app.connect("html-page-context", change_pathto) + app.connect("build-finished", move_private_folders) def change_pathto(app, pagename, templatename, context, doctree): """ Replace pathto helper to change paths to folders with a leading underscore. """ - pathto = context.get('pathto') - + pathto = context.get("pathto") + def gh_pathto(otheruri, *args, **kw): - if otheruri.startswith('_'): + if otheruri.startswith("_"): otheruri_fmt = otheruri[1:] _html_folders_formatted[os.path.dirname(otheruri)] = os.path.dirname(otheruri_fmt) else: otheruri_fmt = otheruri return pathto(otheruri_fmt, *args, **kw) - - context['pathto'] = gh_pathto + + context["pathto"] = gh_pathto def move_private_folders(app, e): """ Remove leading underscore from folders in in the output folder. """ - + def join(dir): return os.path.join(app.builder.outdir, dir) - + for item in os.listdir(app.builder.outdir): - if item.startswith('_') and os.path.isdir(join(item)) and item in _html_folders_formatted: + if item.startswith("_") and os.path.isdir(join(item)) and item in _html_folders_formatted: shutil.move(join(item), join(item[1:])) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = 'torch_pfaffian' +project = "torch_pfaffian" copyright = torch_pfaffian.__copyright__.replace("Copyright ", "") author = torch_pfaffian.__author__ version = torch_pfaffian.__version__ @@ -70,38 +75,41 @@ def join(dir): # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.napoleon', - 'sphinx.ext.githubpages', + "sphinx.ext.autodoc", + "sphinx.ext.napoleon", + "sphinx.ext.githubpages", # 'sphinx_rtd_theme', - 'sphinxcontrib.bibtex', - 'sphinx_mdinclude', - # 'nbsphinx', - 'sphinx.ext.mathjax', + "sphinxcontrib.bibtex", + "sphinx_mdinclude", + "myst_nb", + "sphinx.ext.mathjax", # 'sphinx.ext.mathbase', - 'sphinx.ext.todo', + "sphinx.ext.todo", ] -bibtex_bibfiles = ['references.bib'] +bibtex_bibfiles = ["references.bib"] + +nb_execution_mode = "force" +nb_execution_timeout = 300 -templates_path = ['_templates'] +templates_path = ["_templates"] exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'karma_sphinx_theme' -html_static_path = ['_static'] +html_theme = "karma_sphinx_theme" +html_static_path = ["_static"] # html_css_files = [ # 'css/float_right.css', # ] # mathjax_path = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" mathjax_path = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" -latex_engine = 'xelatex' +latex_engine = "xelatex" latex_elements = { - 'preamble': r'\usepackage{physics}' - r'\usepackage{mathtools}' - r'\usepackage{amsmath}' - r'\usepackage{nicefrac}' + "preamble": r"\usepackage{physics}" + r"\usepackage{mathtools}" + r"\usepackage{amsmath}" + r"\usepackage{nicefrac}" } diff --git a/sphinx/source/index.rst b/sphinx/source/index.rst index 388f894..360fc34 100644 --- a/sphinx/source/index.rst +++ b/sphinx/source/index.rst @@ -12,6 +12,12 @@ Welcome to 's documentation! readme +.. toctree:: + :maxdepth: 4 + :caption: Tutorials: + + notebooks/strategies_benchmark + .. toctree:: :maxdepth: 4 :caption: Modules: diff --git a/src/torch_pfaffian/__init__.py b/src/torch_pfaffian/__init__.py index 1461dad..266be90 100644 --- a/src/torch_pfaffian/__init__.py +++ b/src/torch_pfaffian/__init__.py @@ -1,29 +1,32 @@ """ -Project description. +TorchPfaffian is a Python package for efficiently computing the Pfaffian of skew-symmetric matrices using PyTorch. """ +import importlib_metadata + __author__ = "Jérémie Gince" __email__ = "gincejeremie@gmail.com" __copyright__ = "Copyright 2024, Jérémie Gince" __license__ = "Apache 2.0" __url__ = "https://github.com/MatchCake/TorchPfaffian" -__version__ = "0.0.1-beta0" +__package__ = "torch_pfaffian" +try: + __version__ = importlib_metadata.version(__package__) +except importlib_metadata.PackageNotFoundError: + __version__ = importlib_metadata.version("TorchPfaffian") import warnings from collections.abc import Callable import torch -warnings.filterwarnings("ignore", category=Warning, module="docutils") -warnings.filterwarnings("ignore", category=Warning, module="sphinx") - from .strategies import * from .utils import get_all_subclasses -pfaffian_strategy_map = { - _cls.NAME.lower().strip(): _cls - for _cls in get_all_subclasses(PfaffianStrategy) -} +warnings.filterwarnings("ignore", category=Warning, module="docutils") +warnings.filterwarnings("ignore", category=Warning, module="sphinx") + +pfaffian_strategy_map = {_cls.NAME.lower().strip(): _cls for _cls in get_all_subclasses(PfaffianStrategy)} def get_pfaffian_function(name: str = PfaffianFDBPf.NAME) -> Callable[[torch.Tensor], torch.Tensor]: @@ -32,3 +35,64 @@ def get_pfaffian_function(name: str = PfaffianFDBPf.NAME) -> Callable[[torch.Ten raise ValueError(f"Unknown strategy name: {name}. Available strategies: {list(pfaffian_strategy_map.keys())}") return pfaffian_strategy_map[name].apply + +def pfaffian(matrix: torch.Tensor, *, sign: bool = True, check_input: bool = False) -> torch.Tensor: + """ + Compute the Pfaffian of a skew-symmetric matrix, choosing the strategy from the input. + + The matrix has shape ``(..., 2n, 2n)`` and the result has shape ``(...,)``, sharing the + backend, dtype, and device of ``matrix``. + + Strategy selection: + + =================================== =========================== ========================================= + Condition Strategy Reason + =================================== =========================== ========================================= + ``sign=True``, Rust built, CPU input ``RustPfaffianParlettReid`` fastest signed path (native Rust kernel) + ``sign=True``, otherwise ``PfaffianParlettReid`` GPU-native and pure-Python fallback + ``sign=False``, grad needed ``PfaffianFDBPf`` magnitude only; robust analytic backward + ``sign=False``, no grad ``PfaffianDet`` cheapest: ``sqrt(|det|)`` only + =================================== =========================== ========================================= + + The Rust kernel runs on CPU, so a non-CPU (e.g. CUDA) input is routed to ``PfaffianParlettReid``, + which runs natively on the input device and avoids a host round-trip. + + The Pfaffian is only defined for skew-symmetric matrices; the strategies assume this and do not + check it. Pass ``check_input=True`` to validate the assumption. For large matrices the Pfaffian + can exceed the floating range and overflow to ``inf``; a ``RuntimeWarning`` is emitted when the + result is not finite. + + :param matrix: Skew-symmetric matrix of shape ``(..., 2n, 2n)``. + :param sign: When ``True`` (default) return the signed Pfaffian, otherwise its magnitude. + :param check_input: When ``True``, validate that ``matrix`` is square in its last two dimensions + and skew-symmetric (``A == -A^T``) before computing, raising ``ValueError`` otherwise. Off by + default (``False``) so trusted inputs pay nothing; the check is an O(n^2) comparison, cheap + relative to the O(n^3) Pfaffian. + :return: The Pfaffian of the input, of shape ``(...,)``. + :rtype: torch.Tensor + """ + if check_input: + if matrix.shape[-1] != matrix.shape[-2]: + raise ValueError(f"Expected a square matrix in the last two dimensions, got shape {tuple(matrix.shape)}.") + if not torch.allclose(matrix, -matrix.transpose(-1, -2)): + raise ValueError("Input matrix is not skew-symmetric (A != -A^T).") + + if sign: + # The Rust kernel is CPU-only, so non-CPU inputs use the device-native PyTorch strategy. + if RustPfaffianParlettReid is not None and matrix.device.type == "cpu": + result = RustPfaffianParlettReid.apply(matrix) + else: + result = PfaffianParlettReid.apply(matrix) + elif matrix.requires_grad and torch.is_grad_enabled(): + result = PfaffianFDBPf.apply(matrix) + else: + result = PfaffianDet.apply(matrix) + + if not torch.isfinite(result).all(): + warnings.warn( + "Pfaffian is not finite (overflow to inf/nan): its magnitude exceeds the floating range " + "of the input dtype at this matrix dimension. Consider a higher-precision dtype.", + RuntimeWarning, + stacklevel=2, + ) + return result diff --git a/src/torch_pfaffian/__main__.py b/src/torch_pfaffian/__main__.py deleted file mode 100644 index 36f5609..0000000 --- a/src/torch_pfaffian/__main__.py +++ /dev/null @@ -1,15 +0,0 @@ -import argparse -import sys - - -def parse_args(): - paser = argparse.ArgumentParser() - return paser.parse_args() - - -def main(): - pass - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/src/torch_pfaffian/py.typed b/src/torch_pfaffian/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/src/torch_pfaffian/strategies/__init__.py b/src/torch_pfaffian/strategies/__init__.py index 983c798..482bc29 100644 --- a/src/torch_pfaffian/strategies/__init__.py +++ b/src/torch_pfaffian/strategies/__init__.py @@ -1,9 +1,14 @@ from typing import Callable + import torch -from .strategy import PfaffianStrategy +from .pfaffian_block_det import PfaffianBlockDet +from .pfaffian_det import PfaffianDet from .pfaffian_fdbpf import PfaffianFDBPf -# from .pfaffian_block_det import PfaffianBlockDet -# from .pfaffian_perm import PfaffianPerm - +from .pfaffian_parlett_reid import PfaffianParlettReid +from .strategy import PfaffianStrategy +try: + from .pfaffian_rust_parlett_reid import RustPfaffianParlettReid +except ImportError: # pragma: no cover + RustPfaffianParlettReid = None # pragma: no cover diff --git a/src/torch_pfaffian/strategies/pfaffian_block_det.py b/src/torch_pfaffian/strategies/pfaffian_block_det.py index 0768598..dd083ee 100644 --- a/src/torch_pfaffian/strategies/pfaffian_block_det.py +++ b/src/torch_pfaffian/strategies/pfaffian_block_det.py @@ -1,5 +1,7 @@ -from typing import Any +from typing import cast + import torch + from .strategy import PfaffianStrategy @@ -10,6 +12,7 @@ class PfaffianBlockDet(PfaffianStrategy): The input matrix is considered to be a skew-symmetric matrix. """ + NAME = "PfaffianBlockDet" @staticmethod @@ -22,24 +25,39 @@ def forward(matrix: torch.Tensor): # take the upper right block of shape (..., N, N) of the input matrix n = matrix.shape[-1] // 2 sub_matrix = matrix[..., :n, n:] - pf = (-1)**(n*(n-1)//2) * torch.linalg.det(sub_matrix) + pf = (-1) ** (n * (n - 1) // 2) * torch.linalg.det(sub_matrix) return pf @staticmethod - def backward(ctx: torch.autograd.function.FunctionCtx, grad_output): + def backward(ctx: torch.autograd.function.BackwardCFunction, grad_output): r""" + Compute the gradient of the Pfaffian with respect to the full input matrix. - ..math: - \frac{\partial \text{pf}(A)}{\partial A_{ij}} = \frac{\text{pf}(A)}{2} A^{-1}_{ji} + The forward depends only on the upper-right block ``block = matrix[..., :n, n:]`` through + ``pf = c * det(block)``. By Jacobi's formula ``d det(block) / d block = det(block) * (block^{-1})^T``, + so ``d pf / d block = pf * (block^{-1})^T``. The gradient is therefore zero everywhere except in + the upper-right block. - :param ctx: Context - :param grad_output: Gradient of the output - :return: Gradient of the input + :param ctx: Context holding the saved input matrix and the forward Pfaffian. + :param grad_output: Gradient of the output with respect to the loss. + :return: Gradient of the input matrix, or ``None`` when the input does not require grad. + :rtype: torch.Tensor | None """ - matrix, pf = ctx.saved_tensors + matrix, pf = cast("tuple[torch.Tensor, torch.Tensor]", ctx.saved_tensors) grad_matrix = None if ctx.needs_input_grad[0]: - grad_matrix = torch.einsum('...,...ij->...ji', 0.5 * grad_output * pf, torch.linalg.pinv(matrix)) + n = matrix.shape[-1] // 2 + sub_matrix = matrix[..., :n, n:] # (..., n, n) upper-right block + inverse_transpose = torch.linalg.inv(sub_matrix).transpose(-1, -2) + grad_block = grad_output[..., None, None] * pf[..., None, None] * inverse_transpose + grad_matrix = torch.zeros_like(matrix) + grad_matrix[..., :n, n:] = grad_block return grad_matrix + @classmethod + def _pfaffian_adjugate(cls, matrices: torch.Tensor) -> torch.Tensor: + # This strategy's forward only accepts block-antidiagonal matrices, but the Pfaffian minors + # are general skew matrices, so the adjugate is computed with the general Parlett-Reid forward. + from .pfaffian_parlett_reid import PfaffianParlettReid + return PfaffianParlettReid._pfaffian_adjugate(matrices) diff --git a/src/torch_pfaffian/strategies/pfaffian_det.py b/src/torch_pfaffian/strategies/pfaffian_det.py new file mode 100644 index 0000000..7051779 --- /dev/null +++ b/src/torch_pfaffian/strategies/pfaffian_det.py @@ -0,0 +1,21 @@ +import torch + +from .strategy import PfaffianStrategy + + +class PfaffianDet(PfaffianStrategy): + """ + Compute the Pfaffian as ``pf = sqrt(|det(A)|)`` and rely on autograd for the backward pass. + + The other strategies are full ``torch.autograd.Function`` implementations with a custom analytic + backward. This strategy instead differentiates straight through ``det`` and ``sqrt`` with PyTorch + autograd, so it overrides :meth:`apply` to bypass the ``torch.autograd.Function`` machinery. The + radicand is clamped to ``EPSILON`` for numerical stability, matching the other determinant-based + strategy. + """ + + NAME = "PfaffianDet" + + @staticmethod + def apply(matrix: torch.Tensor) -> torch.Tensor: + return torch.sqrt(torch.clamp(torch.abs(torch.linalg.det(matrix)), min=PfaffianStrategy.EPSILON)) diff --git a/src/torch_pfaffian/strategies/pfaffian_fdbpf.py b/src/torch_pfaffian/strategies/pfaffian_fdbpf.py index 1ab2b3f..1695251 100644 --- a/src/torch_pfaffian/strategies/pfaffian_fdbpf.py +++ b/src/torch_pfaffian/strategies/pfaffian_fdbpf.py @@ -1,5 +1,7 @@ -from typing import Any +from typing import cast + import torch + from .strategy import PfaffianStrategy @@ -8,6 +10,7 @@ class PfaffianFDBPf(PfaffianStrategy): This class implements the Pfaffian using the determinant of the matrix for the forward pass and the derivative of the Pfaffian with respect to the input matrix for the backward pass. """ + NAME = "PfaffianFDBPf" @staticmethod @@ -16,11 +19,11 @@ def forward(matrix: torch.Tensor): if _2n % 2 != 0: return torch.zeros_like(matrix[..., 0, 0]) det = torch.linalg.det(matrix) - pf = torch.sqrt(torch.abs(det) + PfaffianFDBPf.EPSILON) + pf = torch.sqrt(torch.clamp(torch.abs(det), min=PfaffianFDBPf.EPSILON)) return pf @staticmethod - def backward(ctx: torch.autograd.function.FunctionCtx, grad_output): + def backward(ctx: torch.autograd.function.BackwardCFunction, grad_output): r""" ..math: @@ -30,10 +33,8 @@ def backward(ctx: torch.autograd.function.FunctionCtx, grad_output): :param grad_output: Gradient of the output :return: Gradient of the input """ - matrix, pf = ctx.saved_tensors + matrix, pf = cast("tuple[torch.Tensor, torch.Tensor]", ctx.saved_tensors) grad_matrix = None if ctx.needs_input_grad[0]: - grad_matrix = torch.einsum('...,...ij->...ji', 0.5 * grad_output * pf, torch.linalg.pinv(matrix)) + grad_matrix = torch.einsum("...,...ij->...ji", 0.5 * grad_output * pf, torch.linalg.pinv(matrix)) return grad_matrix - - diff --git a/src/torch_pfaffian/strategies/pfaffian_parlett_reid.py b/src/torch_pfaffian/strategies/pfaffian_parlett_reid.py new file mode 100644 index 0000000..07773db --- /dev/null +++ b/src/torch_pfaffian/strategies/pfaffian_parlett_reid.py @@ -0,0 +1,94 @@ +from typing import cast + +import torch + +from .strategy import PfaffianStrategy + + +class PfaffianParlettReid(PfaffianStrategy): + """ + Compute the signed Pfaffian of a skew-symmetric matrix with the Parlett-Reid algorithm. + + The forward performs a batched skew-tridiagonalization with partial pivoting: the batch is + processed together and only the ``n / 2`` column-elimination steps are sequential. The result + is the signed Pfaffian, unlike the determinant-based strategies which return only the magnitude. + The backward uses the closed form ``d pf(A) / d A = (1 / 2) pf(A) (A^{-1})^T`` via the Pfaffian + adjugate, with no autograd graph over the elimination. For invertible inputs this is a single + pseudo-inverse; for singular inputs (``pf == 0``) the adjugate is computed exactly from minor + Pfaffians, so the gradient is correct everywhere (see :meth:`PfaffianStrategy.pfaffian_grad_matrix`). + + The input is a skew-symmetric matrix of shape ``(..., 2n, 2n)``. + """ + + NAME = "PfaffianParlettReid" + + @staticmethod + def forward(matrix: torch.Tensor) -> torch.Tensor: + dimension = matrix.shape[-1] + if dimension % 2 != 0: + return torch.zeros(matrix.shape[:-2], dtype=matrix.dtype, device=matrix.device) + if dimension == 0: + return torch.ones(matrix.shape[:-2], dtype=matrix.dtype, device=matrix.device) + + working = matrix.reshape(-1, dimension, dimension).clone() # (batch, 2n, 2n) + batch = working.shape[0] + batch_index = torch.arange(batch, device=matrix.device) + sign = torch.ones(batch, dtype=matrix.dtype, device=matrix.device) + valid = torch.ones(batch, dtype=torch.bool, device=matrix.device) + epsilon = PfaffianStrategy.EPSILON + + for column in range(0, dimension - 2, 2): + sub_column = working[:, column + 2 :, column].abs() # (batch, 2n - column - 2) + pivot_relative = sub_column.argmax(dim=1) # (batch,) + pivot_row = pivot_relative + column + 2 # (batch,) + pivot_magnitude = sub_column.gather(1, pivot_relative[:, None]).squeeze(1) # (batch,) + pivot_condition = pivot_magnitude > working[:, column + 1, column].abs() # (batch,) + mask = pivot_condition[:, None] # (batch, 1) + + # Congruence swap of rows/columns column+1 <-> pivot_row where pivoting helps. + row_fixed = working[:, column + 1, :].clone() + row_pivot = working[batch_index, pivot_row, :].clone() + working[:, column + 1, :] = torch.where(mask, row_pivot, row_fixed) + working[batch_index, pivot_row, :] = torch.where(mask, row_fixed, row_pivot) + col_fixed = working[:, :, column + 1].clone() + col_pivot = working[batch_index, :, pivot_row].clone() + working[:, :, column + 1] = torch.where(mask, col_pivot, col_fixed) + working[batch_index, :, pivot_row] = torch.where(mask, col_fixed, col_pivot) + sign = sign * torch.where(pivot_condition, -torch.ones_like(sign), torch.ones_like(sign)) + + pivot_value = working[:, column + 1, column] # (batch,) + zero_pivot = pivot_value.abs() < epsilon + valid = valid & ~zero_pivot + safe_pivot = torch.where(zero_pivot, torch.ones_like(pivot_value), pivot_value) + tau = working[:, column + 2 :, column] / safe_pivot[:, None] # (batch, 2n - column - 2) + column_next = working[:, column + 2 :, column + 1] # (batch, 2n - column - 2) + update = torch.einsum("bi,bj->bij", tau, column_next) - torch.einsum("bi,bj->bij", column_next, tau) + working[:, column + 2 :, column + 2 :] = working[:, column + 2 :, column + 2 :] + update + working[:, column + 2 :, column] = 0 + working[:, column, column + 2 :] = 0 + working[:, column + 2 :, column + 1] = 0 + working[:, column + 1, column + 2 :] = 0 + + super_index = torch.arange(0, dimension, 2, device=matrix.device) + super_entries = working[:, super_index, super_index + 1] # (batch, n) + raw_pfaffian = sign * super_entries.prod(dim=1) # (batch,) + pfaffian = torch.where(valid, raw_pfaffian, torch.zeros_like(raw_pfaffian)) + return pfaffian.reshape(matrix.shape[:-2]) + + @staticmethod + def backward(ctx: torch.autograd.function.BackwardCFunction, grad_output: torch.Tensor) -> torch.Tensor | None: + r""" + Gradient of the signed Pfaffian with respect to the input matrix. + + .. math:: + \frac{\partial \text{pf}(A)}{\partial A_{ij}} = \frac{\text{pf}(A)}{2} (A^{-1})_{ji} + + :param ctx: Context holding the saved input matrix and the forward Pfaffian. + :param grad_output: Gradient of the output with respect to the loss. + :return: Gradient of the input matrix, or ``None`` when the input does not require grad. + :rtype: torch.Tensor | None + """ + matrix, pfaffian = cast("tuple[torch.Tensor, torch.Tensor]", ctx.saved_tensors) + if not ctx.needs_input_grad[0]: + return None + return PfaffianParlettReid.pfaffian_grad_matrix(matrix, pfaffian, grad_output) diff --git a/src/torch_pfaffian/strategies/pfaffian_rust_parlett_reid.py b/src/torch_pfaffian/strategies/pfaffian_rust_parlett_reid.py new file mode 100644 index 0000000..426e652 --- /dev/null +++ b/src/torch_pfaffian/strategies/pfaffian_rust_parlett_reid.py @@ -0,0 +1,61 @@ +from typing import cast + +import torch + +from .. import _rust +from .strategy import PfaffianStrategy + + +class RustPfaffianParlettReid(PfaffianStrategy): + """ + Compute the signed Pfaffian with the Rust Parlett-Reid kernel. + + The forward moves the input to a contiguous CPU array and calls the compiled + ``torch_pfaffian._rust`` kernel at a precision chosen from the input dtype: ``float32`` inputs + use the single-precision kernel and every other floating dtype uses the double-precision kernel. + The result is cast back to the input dtype and device. The backward is the same as + :class:`PfaffianParlettReid` (the Pfaffian adjugate ``d pf(A) / d A = (1 / 2) pf(A) (A^{-1})^T``, + exact for invertible and singular inputs), computed in PyTorch. CUDA inputs are evaluated on CPU + for the forward; the backward runs on the input device. + + The input is a skew-symmetric matrix of shape ``(..., n, n)``. + """ + + NAME = "RustPfaffianParlettReid" + + @staticmethod + def forward(matrix: torch.Tensor) -> torch.Tensor: + dimension = matrix.shape[-1] + if dimension % 2 != 0: + return torch.zeros(matrix.shape[:-2], dtype=matrix.dtype, device=matrix.device) + if dimension == 0: + return torch.ones(matrix.shape[:-2], dtype=matrix.dtype, device=matrix.device) + flat = matrix.reshape(-1, dimension, dimension) # (batch, n, n) + if matrix.dtype == torch.float32: + working_dtype = torch.float32 + kernel = _rust.signed_pfaffian_f32 + else: + working_dtype = torch.float64 + kernel = _rust.signed_pfaffian_f64 + array = flat.detach().to(working_dtype).cpu().contiguous().numpy() + result = kernel(array) # (batch,) in working_dtype + pfaffian = torch.from_numpy(result).to(dtype=matrix.dtype, device=matrix.device) + return pfaffian.reshape(matrix.shape[:-2]) + + @staticmethod + def backward(ctx: torch.autograd.function.BackwardCFunction, grad_output: torch.Tensor) -> torch.Tensor | None: + r""" + Gradient of the signed Pfaffian with respect to the input matrix. + + .. math:: + \frac{\partial \text{pf}(A)}{\partial A_{ij}} = \frac{\text{pf}(A)}{2} (A^{-1})_{ji} + + :param ctx: Context holding the saved input matrix and the forward Pfaffian. + :param grad_output: Gradient of the output with respect to the loss. + :return: Gradient of the input matrix, or ``None`` when the input does not require grad. + :rtype: torch.Tensor | None + """ + matrix, pfaffian = cast("tuple[torch.Tensor, torch.Tensor]", ctx.saved_tensors) + if not ctx.needs_input_grad[0]: + return None + return RustPfaffianParlettReid.pfaffian_grad_matrix(matrix, pfaffian, grad_output) diff --git a/src/torch_pfaffian/strategies/strategy.py b/src/torch_pfaffian/strategies/strategy.py index ff5b03f..236d0c1 100644 --- a/src/torch_pfaffian/strategies/strategy.py +++ b/src/torch_pfaffian/strategies/strategy.py @@ -1,14 +1,13 @@ -from abc import ABC, abstractmethod import torch class PfaffianStrategy(torch.autograd.Function): - EPSILON = 1e-12 + EPSILON = 1e-30 NAME = "PfaffianStrategy" @staticmethod def setup_context(ctx: torch.autograd.function.FunctionCtx, inputs, output): - matrix, = inputs + (matrix,) = inputs pf = output ctx.save_for_backward(matrix, pf) @@ -17,7 +16,67 @@ def forward(matrix: torch.Tensor): pass @staticmethod - def backward(ctx: torch.autograd.function.FunctionCtx, grad_output): + def backward(ctx: torch.autograd.function.BackwardCFunction, grad_output): pass + @classmethod + def pfaffian_grad_matrix( + cls, matrix: torch.Tensor, pfaffian: torch.Tensor, grad_output: torch.Tensor + ) -> torch.Tensor: + r""" + Gradient of the signed Pfaffian with respect to the input matrix. + Uses the closed form ``d pf(A) / d A = (1 / 2) pf(A) (A^{-1})^T`` via the Pfaffian adjugate + ``pf(A) A^{-1}``. For invertible inputs the adjugate is ``pf(A) * pinv(A)`` (a single inverse); + for singular inputs (``pf == 0``), where that product would be ``0`` and miss the true + derivative, the adjugate is recomputed exactly from minor Pfaffians via + :meth:`_pfaffian_adjugate` (using ``cls``'s own forward). The minor-based path runs only on the + singular batch elements, so invertible inputs keep the single cheap inverse. + + :param matrix: The saved input matrix of shape ``(..., n, n)``. + :param pfaffian: The saved forward Pfaffian of shape ``(...,)``. + :param grad_output: Gradient of the output with respect to the loss, of shape ``(...,)``. + :return: Gradient of the input matrix, of shape ``(..., n, n)``. + :rtype: torch.Tensor + """ + adjugate = pfaffian[..., None, None] * torch.linalg.pinv(matrix) # pf(A) A^{-1}; 0 where pf == 0 + singular = pfaffian == 0 + if bool(singular.any()): + dimension = matrix.shape[-1] + flat_matrix = matrix.reshape(-1, dimension, dimension) + flat_adjugate = adjugate.reshape(-1, dimension, dimension) + singular_index = singular.reshape(-1).nonzero(as_tuple=True)[0] + with torch.no_grad(): + singular_adjugate = cls._pfaffian_adjugate(flat_matrix.index_select(0, singular_index)) + flat_adjugate = flat_adjugate.index_copy(0, singular_index, singular_adjugate.to(flat_adjugate.dtype)) + adjugate = flat_adjugate.reshape_as(matrix) + return torch.einsum("...,...ij->...ji", 0.5 * grad_output, adjugate) + + @classmethod + def _pfaffian_adjugate(cls, matrices: torch.Tensor) -> torch.Tensor: + r""" + Pfaffian adjugate ``P = pf(A) A^{-1}`` of a batch of skew-symmetric matrices. + + The adjugate is a polynomial in the entries of ``A`` (it equals ``pf(A) A^{-1}`` for invertible + ``A`` but stays finite when ``A`` is singular), so it is computed from minor Pfaffians rather + than an inverse: ``P_{ij} = (-1)^{i+j} pf(A^{(ij)})`` for ``i < j``, where ``A^{(ij)}`` is ``A`` + with rows and columns ``i`` and ``j`` removed, and ``P`` is skew-symmetric. The minor Pfaffians + are computed with this class's own :meth:`forward`; subclasses whose forward is not valid on the + minors (e.g. :class:`PfaffianBlockDet`) override this to use a general strategy. + + :param matrices: Skew-symmetric matrices of shape ``(m, n, n)``. + :return: The Pfaffian adjugate, of shape ``(m, n, n)``. + :rtype: torch.Tensor + """ + dimension = matrices.shape[-1] + adjugate = torch.zeros_like(matrices) + indices = torch.arange(dimension, device=matrices.device) + for first in range(dimension): + for second in range(first + 1, dimension): + keep = indices[(indices != first) & (indices != second)] + minor = matrices.index_select(-2, keep).index_select(-1, keep) # (m, n-2, n-2) + minor_pfaffian = cls.forward(minor) # (m,) + sign = 1.0 if (first + second) % 2 == 0 else -1.0 + adjugate[..., first, second] = sign * minor_pfaffian + adjugate[..., second, first] = -sign * minor_pfaffian + return adjugate diff --git a/tests/__init__.py b/tests/__init__.py index 15102d4..bac659d 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,13 +1,6 @@ -import pytest import numpy as np +import pytest + from .configs import TEST_SEED np.random.seed(TEST_SEED) - - -def get_slow_test_mark(): - from .configs import RUN_SLOW_TESTS - return pytest.mark.skipif( - not RUN_SLOW_TESTS, - reason=f"Only run when configs.{RUN_SLOW_TESTS} is True.", - ) diff --git a/tests/configs.py b/tests/configs.py index 2217dab..b2a9393 100644 --- a/tests/configs.py +++ b/tests/configs.py @@ -1,4 +1,3 @@ - N_RANDOM_TESTS_PER_CASE = 10 TEST_SEED = 42 @@ -14,8 +13,6 @@ ATOL_SHAPE_COMPARISON = 0 RTOL_SHAPE_COMPARISON = 0 -RUN_SLOW_TESTS = True - def set_seed(seed: int = TEST_SEED): import numpy as np diff --git a/tests/conftest.py b/tests/conftest.py index 8cf7624..e69de29 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,45 +0,0 @@ -import pytest -from .configs import RUN_SLOW_TESTS - -RUN_SLOW_ARG_NAME = "run_slow" - - -@pytest.hookimpl() -def pytest_sessionstart(session): - pass - - -# @pytest.hookimpl() -# def pytest_sessionfinish(session, exitstatus): -# reporter = session.config.pluginmanager.get_plugin('terminalreporter') -# print('passed amount:', len(reporter.stats['passed'])) - - -def pytest_addoption(parser): - r""" - Add options to the pytest command. - - See: https://jwodder.github.io/kbits/posts/pytest-mark-off/. - - :param parser: The pytest parser. - :return: None - """ - parser.addoption( - f"--{RUN_SLOW_ARG_NAME}", - action="store_true", - default=RUN_SLOW_TESTS, - help="Run slow tests", - ) - - -def pytest_collection_modifyitems(config, items): - if config.getoption(f"--{RUN_SLOW_ARG_NAME}"): - # if RUN_SLOW_TESTS: - # print("Running slow tests") - pass - else: - # print("Skipping slow tests") - skipper = pytest.mark.skip(reason=f"Only run when '--{RUN_SLOW_ARG_NAME}=True' is given") - for item in items: - if "slow" in item.keywords: - item.add_marker(skipper) diff --git a/tests/test_strategies/__init__.py b/tests/test_strategies/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_strategies/test_pfaffian_block_det.py b/tests/test_strategies/test_pfaffian_block_det.py new file mode 100644 index 0000000..a67800f --- /dev/null +++ b/tests/test_strategies/test_pfaffian_block_det.py @@ -0,0 +1,94 @@ +import numpy as np +import pytest +import torch +from torch.autograd import gradcheck + +from tests.configs import ( + ATOL_APPROX_COMPARISON, + ATOL_MATRIX_COMPARISON, + N_RANDOM_TESTS_PER_CASE, + RTOL_APPROX_COMPARISON, + RTOL_MATRIX_COMPARISON, + TEST_SEED, +) +from torch_pfaffian.strategies.pfaffian_block_det import PfaffianBlockDet + +_RNG = np.random.default_rng(TEST_SEED) +_BLOCK_SIZES = [1, 2, 3, 4] +_RANDOM_BLOCKS = [_RNG.random((size, size)) for size in _BLOCK_SIZES for _ in range(N_RANDOM_TESTS_PER_CASE)] + + +def _block_antidiagonal(block: np.ndarray) -> torch.Tensor: + # Build the skew-symmetric matrix [[0, block], [-block^T, 0]] that PfaffianBlockDet targets. + zero = np.zeros_like(block) + top = np.concatenate([zero, block], axis=-1) + bottom = np.concatenate([-np.einsum("...ij->...ji", block), zero], axis=-1) + return torch.tensor(np.concatenate([top, bottom], axis=-2)) + + +def _well_conditioned_blocks(sizes: list[int], count: int, min_abs_det: float = 0.1) -> list[np.ndarray]: + # The gradient relies on the inverse of the upper-right block, which is unstable for near-singular + # blocks, so the gradcheck inputs are restricted to blocks whose determinant is away from zero. + blocks = [] + for size in sizes: + kept = 0 + while kept < count: + candidate = _RNG.random((size, size)) + if np.abs(np.linalg.det(candidate)) > min_abs_det: + blocks.append(candidate) + kept += 1 + return blocks + + +_GRADCHECK_BLOCKS = _well_conditioned_blocks(_BLOCK_SIZES, N_RANDOM_TESTS_PER_CASE) + + +class TestPfaffianBlockDet: + @pytest.mark.parametrize("block", _RANDOM_BLOCKS) + def test_forward_square_of_pfaffian_matches_determinant(self, block): + matrix = _block_antidiagonal(block) + pfaffian = PfaffianBlockDet.apply(matrix) + determinant = torch.linalg.det(matrix) + torch.testing.assert_close(pfaffian**2, determinant, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + def test_forward_supports_batched_input(self): + matrix = _block_antidiagonal(_RNG.random((5, 3, 3))) + pfaffian = PfaffianBlockDet.apply(matrix) + assert pfaffian.shape == matrix.shape[:-2] + torch.testing.assert_close( + pfaffian**2, torch.linalg.det(matrix), atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON + ) + + @pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) + def test_forward_preserves_dtype(self, dtype): + matrix = _block_antidiagonal(_RNG.random((3, 3))).to(dtype) + assert PfaffianBlockDet.apply(matrix).dtype == dtype + + @pytest.mark.parametrize("block", _GRADCHECK_BLOCKS) + def test_backward_passes_gradcheck(self, block): + matrix = _block_antidiagonal(block).to(torch.float64).requires_grad_(True) + assert gradcheck( + PfaffianBlockDet.apply, (matrix,), eps=1e-6, atol=ATOL_APPROX_COMPARISON, rtol=RTOL_APPROX_COMPARISON + ) + + def test_backward_returns_none_when_input_does_not_require_grad(self): + matrix = _block_antidiagonal(_RNG.random((4, 4))) + pfaffian = PfaffianBlockDet.apply(matrix) + + class _Context: + saved_tensors = (matrix, pfaffian) + needs_input_grad = (False,) + + assert PfaffianBlockDet.backward(_Context(), torch.ones_like(pfaffian)) is None + + def test_adjugate_override_delegates_to_parlett_reid(self): + # PfaffianBlockDet.forward is block-only, so its adjugate must defer to the general strategy. + from torch_pfaffian.strategies.pfaffian_parlett_reid import PfaffianParlettReid + + matrices = _block_antidiagonal(_RNG.random((3, 3, 3))) + torch.testing.assert_close( + PfaffianBlockDet._pfaffian_adjugate(matrices), + PfaffianParlettReid._pfaffian_adjugate(matrices), + atol=ATOL_MATRIX_COMPARISON, + rtol=RTOL_MATRIX_COMPARISON, + ) diff --git a/tests/test_strategies/test_pfaffian_det.py b/tests/test_strategies/test_pfaffian_det.py new file mode 100644 index 0000000..137821b --- /dev/null +++ b/tests/test_strategies/test_pfaffian_det.py @@ -0,0 +1,78 @@ +import numpy as np +import pytest +import torch +from torch.autograd import gradcheck + +from tests.configs import ( + ATOL_APPROX_COMPARISON, + ATOL_MATRIX_COMPARISON, + N_RANDOM_TESTS_PER_CASE, + RTOL_APPROX_COMPARISON, + RTOL_MATRIX_COMPARISON, + TEST_SEED, +) +from torch_pfaffian.strategies.pfaffian_det import PfaffianDet +from torch_pfaffian.strategies.pfaffian_fdbpf import PfaffianFDBPf + +_RNG = np.random.default_rng(TEST_SEED) + + +def _skew(matrix: np.ndarray) -> np.ndarray: + return matrix - np.einsum("...ij->...ji", matrix) + + +def _well_conditioned_skew_matrices(shapes: list[tuple[int, ...]], count: int, min_abs_det: float = 0.1): + matrices = [] + for shape in shapes: + kept = 0 + while kept < count: + candidate = _skew(_RNG.random(shape)) + if np.all(np.abs(np.linalg.det(candidate)) > min_abs_det): + matrices.append(candidate) + kept += 1 + return matrices + + +_FORWARD_MATRICES = [ + _skew(_RNG.random(shape)) for shape in [(8, 8), (16, 6, 6)] for _ in range(N_RANDOM_TESTS_PER_CASE) +] +_GRADCHECK_MATRICES = _well_conditioned_skew_matrices([(4, 4), (6, 6), (8, 4, 4)], N_RANDOM_TESTS_PER_CASE) + + +class TestPfaffianDet: + @pytest.mark.parametrize("skew_matrix", _FORWARD_MATRICES) + def test_forward_square_of_pfaffian_matches_determinant(self, skew_matrix): + skew_tensor = torch.tensor(skew_matrix) + pfaffian = PfaffianDet.apply(skew_tensor) + determinant = torch.linalg.det(skew_tensor) + torch.testing.assert_close(pfaffian**2, determinant, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + @pytest.mark.parametrize("skew_matrix", _FORWARD_MATRICES) + def test_forward_matches_fdbpf(self, skew_matrix): + skew_tensor = torch.tensor(skew_matrix) + torch.testing.assert_close( + PfaffianDet.apply(skew_tensor), + PfaffianFDBPf.apply(skew_tensor), + atol=ATOL_MATRIX_COMPARISON, + rtol=RTOL_MATRIX_COMPARISON, + ) + + @pytest.mark.parametrize("skew_matrix", _GRADCHECK_MATRICES) + def test_backward_passes_gradcheck(self, skew_matrix): + skew_tensor = torch.tensor(skew_matrix, requires_grad=True) + assert gradcheck( + PfaffianDet.apply, (skew_tensor,), eps=1e-6, atol=ATOL_APPROX_COMPARISON, rtol=RTOL_APPROX_COMPARISON + ) + + @pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) + def test_forward_preserves_dtype(self, dtype): + matrix = torch.tensor(_skew(_RNG.random((6, 6))), dtype=dtype) + assert PfaffianDet.apply(matrix).dtype == dtype + + def test_forward_supports_batched_input(self): + batched_matrix = torch.tensor(_skew(_RNG.random((5, 6, 6)))) + pfaffian = PfaffianDet.apply(batched_matrix) + assert pfaffian.shape == batched_matrix.shape[:-2] + torch.testing.assert_close( + pfaffian**2, torch.linalg.det(batched_matrix), atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON + ) diff --git a/tests/test_strategies/test_pfaffian_fdbpf.py b/tests/test_strategies/test_pfaffian_fdbpf.py new file mode 100644 index 0000000..3f7246f --- /dev/null +++ b/tests/test_strategies/test_pfaffian_fdbpf.py @@ -0,0 +1,103 @@ +import numpy as np +import pytest +import torch +from torch.autograd import gradcheck + +from tests.configs import ( + ATOL_APPROX_COMPARISON, + ATOL_MATRIX_COMPARISON, + N_RANDOM_TESTS_PER_CASE, + RTOL_APPROX_COMPARISON, + RTOL_MATRIX_COMPARISON, + TEST_SEED, +) +from torch_pfaffian.strategies.pfaffian_fdbpf import PfaffianFDBPf + +_RNG = np.random.default_rng(TEST_SEED) + + +def _skew(matrix: np.ndarray) -> np.ndarray: + return matrix - np.einsum("...ij->...ji", matrix) + + +def _random_skew_matrices(shapes: list[tuple[int, ...]], count: int) -> list[np.ndarray]: + return [_skew(_RNG.random(shape)) for shape in shapes for _ in range(count)] + + +def _well_conditioned_skew_matrices(shapes: list[tuple[int, ...]], count: int, min_abs_det: float = 0.1): + # The gradient relies on the (pseudo)inverse, which is unstable for near-singular matrices, so the + # gradcheck inputs are restricted to skew matrices whose determinant is comfortably away from zero. + matrices = [] + for shape in shapes: + kept = 0 + while kept < count: + candidate = _skew(_RNG.random(shape)) + if np.all(np.abs(np.linalg.det(candidate)) > min_abs_det): + matrices.append(candidate) + kept += 1 + return matrices + + +_FORWARD_MATRICES = _random_skew_matrices([(8, 8), (16, 6, 6), (18, 10, 10)], N_RANDOM_TESTS_PER_CASE) +_GRADCHECK_MATRICES = _well_conditioned_skew_matrices([(4, 4), (6, 6), (8, 4, 4)], N_RANDOM_TESTS_PER_CASE) + + +class TestPfaffianFDBPf: + @pytest.mark.parametrize("skew_matrix", _FORWARD_MATRICES) + def test_forward_square_of_pfaffian_matches_determinant(self, skew_matrix): + skew_tensor = torch.tensor(skew_matrix) + pfaffian = PfaffianFDBPf.apply(skew_tensor) + determinant = torch.linalg.det(skew_tensor) + torch.testing.assert_close(pfaffian**2, determinant, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + @pytest.mark.parametrize("skew_matrix", _GRADCHECK_MATRICES) + def test_backward_passes_gradcheck(self, skew_matrix): + skew_tensor = torch.tensor(skew_matrix, requires_grad=True) + assert gradcheck( + PfaffianFDBPf.apply, (skew_tensor,), eps=1e-6, atol=ATOL_APPROX_COMPARISON, rtol=RTOL_APPROX_COMPARISON + ) + + def test_forward_matches_known_pfaffian_magnitude(self): + # For the 2x2 skew matrix [[0, a], [-a, 0]] the Pfaffian is a, so its magnitude is |a|. + value = 0.7 + matrix = torch.tensor([[0.0, value], [-value, 0.0]], dtype=torch.float64) + pfaffian = PfaffianFDBPf.apply(matrix) + expected = torch.tensor(abs(value), dtype=torch.float64) + torch.testing.assert_close(pfaffian, expected, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + def test_forward_returns_absolute_value_so_sign_is_not_recovered(self): + # The strategy computes |pf| via sqrt(|det|); the true Pfaffian of [[0, -a], [a, 0]] is -a, + # but the strategy returns +|a|. + value = 0.7 + matrix = torch.tensor([[0.0, -value], [value, 0.0]], dtype=torch.float64) + pfaffian = PfaffianFDBPf.apply(matrix) + expected = torch.tensor(abs(value), dtype=torch.float64) + torch.testing.assert_close(pfaffian, expected, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + @pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) + def test_forward_preserves_dtype(self, dtype): + matrix = torch.tensor(_skew(_RNG.random((6, 6))), dtype=dtype) + assert PfaffianFDBPf.apply(matrix).dtype == dtype + + def test_forward_supports_batched_input(self): + batched_matrix = torch.tensor(_skew(_RNG.random((5, 6, 6)))) + pfaffian = PfaffianFDBPf.apply(batched_matrix) + assert pfaffian.shape == batched_matrix.shape[:-2] + torch.testing.assert_close( + pfaffian**2, torch.linalg.det(batched_matrix), atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON + ) + + def test_forward_returns_zero_for_odd_dimension(self): + odd_matrix = torch.tensor(_skew(_RNG.random((3, 3)))) + pfaffian = PfaffianFDBPf.apply(odd_matrix) + torch.testing.assert_close(pfaffian, torch.zeros_like(odd_matrix[..., 0, 0])) + + def test_backward_returns_none_when_input_does_not_require_grad(self): + matrix = torch.tensor(_skew(_RNG.random((4, 4)))) + pfaffian = PfaffianFDBPf.apply(matrix) + + class _Context: + saved_tensors = (matrix, pfaffian) + needs_input_grad = (False,) + + assert PfaffianFDBPf.backward(_Context(), torch.ones_like(pfaffian)) is None diff --git a/tests/test_strategies/test_pfaffian_parlett_reid.py b/tests/test_strategies/test_pfaffian_parlett_reid.py new file mode 100644 index 0000000..2e6a412 --- /dev/null +++ b/tests/test_strategies/test_pfaffian_parlett_reid.py @@ -0,0 +1,163 @@ +import numpy as np +import pytest +import torch +from torch.autograd import gradcheck + +from tests.configs import ( + ATOL_APPROX_COMPARISON, + ATOL_MATRIX_COMPARISON, + ATOL_SCALAR_COMPARISON, + N_RANDOM_TESTS_PER_CASE, + RTOL_APPROX_COMPARISON, + RTOL_MATRIX_COMPARISON, + RTOL_SCALAR_COMPARISON, + TEST_SEED, +) +from torch_pfaffian.strategies.pfaffian_block_det import PfaffianBlockDet +from torch_pfaffian.strategies.pfaffian_parlett_reid import PfaffianParlettReid + +_RNG = np.random.default_rng(TEST_SEED) +_HALF_SIZES = [1, 2, 3, 4] +_RANDOM_BLOCKS = [_RNG.random((size, size)) for size in _HALF_SIZES for _ in range(N_RANDOM_TESTS_PER_CASE)] + + +def _block_antidiagonal(block: np.ndarray) -> torch.Tensor: + # Skew matrix [[0, block], [-block^T, 0]]; PfaffianBlockDet gives its exact signed Pfaffian. + zero = np.zeros_like(block) + top = np.concatenate([zero, block], axis=-1) + bottom = np.concatenate([-np.einsum("...ij->...ji", block), zero], axis=-1) + return torch.tensor(np.concatenate([top, bottom], axis=-2)) + + +def _random_skew(dimension: int, rng: np.random.Generator) -> torch.Tensor: + upper = rng.random((dimension, dimension)) + skew = np.triu(upper, k=1) + return torch.tensor(skew - skew.T) + + +_GRADCHECK_DIMENSIONS = [2, 4, 6] + + +def _skew_from_parameters(parameters: torch.Tensor, dimension: int) -> torch.Tensor: + # Build a skew-symmetric A(theta) from the free strictly-upper-triangular entries so that + # gradcheck differentiates on the manifold where the Pfaffian is defined. + upper = torch.zeros(dimension, dimension, dtype=parameters.dtype) + indices = torch.triu_indices(dimension, dimension, offset=1) + upper = upper.index_put((indices[0], indices[1]), parameters) + return upper - upper.transpose(-1, -2) + + +class TestPfaffianParlettReid: + @pytest.mark.parametrize("block", _RANDOM_BLOCKS) + def test_forward_square_matches_determinant(self, block): + matrix = _block_antidiagonal(block) + pfaffian = PfaffianParlettReid.apply(matrix) + determinant = torch.linalg.det(matrix) + torch.testing.assert_close(pfaffian**2, determinant, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + @pytest.mark.parametrize("block", _RANDOM_BLOCKS) + def test_forward_sign_matches_block_det(self, block): + matrix = _block_antidiagonal(block) + torch.testing.assert_close( + PfaffianParlettReid.apply(matrix), + PfaffianBlockDet.apply(matrix), + atol=ATOL_MATRIX_COMPARISON, + rtol=RTOL_MATRIX_COMPARISON, + ) + + def test_forward_two_by_two_is_signed(self): + matrix = torch.tensor([[0.0, -3.0], [3.0, 0.0]], dtype=torch.float64) + torch.testing.assert_close( + PfaffianParlettReid.apply(matrix), + torch.tensor(-3.0, dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_supports_leading_batch_dims(self): + blocks = _RNG.random((2, 3, 4, 4)) + matrix = _block_antidiagonal(blocks) + pfaffian = PfaffianParlettReid.apply(matrix) + assert pfaffian.shape == matrix.shape[:-2] + torch.testing.assert_close( + pfaffian**2, torch.linalg.det(matrix), atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON + ) + + @pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) + def test_forward_preserves_dtype_and_device(self, dtype): + matrix = _random_skew(6, _RNG).to(dtype) + pfaffian = PfaffianParlettReid.apply(matrix) + assert pfaffian.dtype == dtype + assert pfaffian.device == matrix.device + + def test_forward_odd_dimension_is_zero(self): + matrix = _random_skew(5, _RNG) + torch.testing.assert_close( + PfaffianParlettReid.apply(matrix), + torch.zeros((), dtype=matrix.dtype), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_empty_matrix_is_one(self): + matrix = torch.zeros((0, 0), dtype=torch.float64) + torch.testing.assert_close( + PfaffianParlettReid.apply(matrix), + torch.ones((), dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_singular_matrix_is_zero(self): + # A skew matrix with a zero pivot column has Pfaffian 0. + matrix = torch.zeros((4, 4), dtype=torch.float64) + matrix[2, 3] = 1.0 + matrix[3, 2] = -1.0 + torch.testing.assert_close( + PfaffianParlettReid.apply(matrix), + torch.zeros((), dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + @pytest.mark.parametrize("dimension", _GRADCHECK_DIMENSIONS) + def test_backward_passes_gradcheck_on_skew_parameterization(self, dimension): + count = dimension * (dimension - 1) // 2 + parameters = torch.tensor(_RNG.random(count) + 0.5, dtype=torch.float64, requires_grad=True) + assert gradcheck( + lambda values: PfaffianParlettReid.apply(_skew_from_parameters(values, dimension)), + (parameters,), + eps=1e-6, + atol=ATOL_APPROX_COMPARISON, + rtol=RTOL_APPROX_COMPARISON, + ) + + def test_backward_exact_on_singular_matrix(self): + # At an exactly-singular skew input (pf=0) the gradient must be the TRUE derivative, via the + # Pfaffian adjugate. For the rank-2 matrix with only a_{23}=1, pf = a01*a23 - a02*a13 + a03*a12, + # so d pf / d a01 = a23 = 1 and the rest are 0. + parameters = torch.tensor([0.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=torch.float64, requires_grad=True) + PfaffianParlettReid.apply(_skew_from_parameters(parameters, 4)).backward() + expected = torch.tensor([1.0, 0.0, 0.0, 0.0, 0.0, 0.0], dtype=torch.float64) + torch.testing.assert_close(parameters.grad, expected, atol=ATOL_SCALAR_COMPARISON, rtol=RTOL_SCALAR_COMPARISON) + + def test_backward_gradcheck_at_singular_point(self): + # gradcheck centered at an exactly-singular skew point (would fail with the inverse-only form). + parameters = torch.tensor([0.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=torch.float64, requires_grad=True) + assert gradcheck( + lambda values: PfaffianParlettReid.apply(_skew_from_parameters(values, 4)), + (parameters,), + eps=1e-6, + atol=ATOL_APPROX_COMPARISON, + rtol=RTOL_APPROX_COMPARISON, + ) + + def test_backward_returns_none_when_input_does_not_require_grad(self): + matrix = _random_skew(4, _RNG) + pfaffian = PfaffianParlettReid.apply(matrix) + + class _Context: + saved_tensors = (matrix, pfaffian) + needs_input_grad = (False,) + + assert PfaffianParlettReid.backward(_Context(), torch.ones_like(pfaffian)) is None diff --git a/tests/test_strategies/test_pfaffian_rust_parlett_reid.py b/tests/test_strategies/test_pfaffian_rust_parlett_reid.py new file mode 100644 index 0000000..61ad21f --- /dev/null +++ b/tests/test_strategies/test_pfaffian_rust_parlett_reid.py @@ -0,0 +1,176 @@ +import numpy as np +import pytest +import torch +from torch.autograd import gradcheck + +pytest.importorskip("torch_pfaffian._rust") + +from tests.configs import ( # noqa: E402 + ATOL_APPROX_COMPARISON, + ATOL_MATRIX_COMPARISON, + ATOL_SCALAR_COMPARISON, + N_RANDOM_TESTS_PER_CASE, + RTOL_APPROX_COMPARISON, + RTOL_MATRIX_COMPARISON, + RTOL_SCALAR_COMPARISON, + TEST_SEED, +) +from torch_pfaffian.strategies.pfaffian_parlett_reid import PfaffianParlettReid # noqa: E402 +from torch_pfaffian.strategies.pfaffian_rust_parlett_reid import RustPfaffianParlettReid # noqa: E402 + +_RNG = np.random.default_rng(TEST_SEED) +_HALF_SIZES = [1, 2, 3, 4] +_RANDOM_BLOCKS = [_RNG.random((size, size)) for size in _HALF_SIZES for _ in range(N_RANDOM_TESTS_PER_CASE)] +_GRADCHECK_DIMENSIONS = [2, 4, 6] + + +def _block_antidiagonal(block: np.ndarray) -> torch.Tensor: + zero = np.zeros_like(block) + top = np.concatenate([zero, block], axis=-1) + bottom = np.concatenate([-np.einsum("...ij->...ji", block), zero], axis=-1) + return torch.tensor(np.concatenate([top, bottom], axis=-2)) + + +def _random_skew(dimension: int, rng: np.random.Generator) -> torch.Tensor: + upper = rng.random((dimension, dimension)) + skew = np.triu(upper, k=1) + return torch.tensor(skew - skew.T) + + +def _skew_from_parameters(parameters: torch.Tensor, dimension: int) -> torch.Tensor: + upper = torch.zeros(dimension, dimension, dtype=parameters.dtype) + indices = torch.triu_indices(dimension, dimension, offset=1) + upper = upper.index_put((indices[0], indices[1]), parameters) + return upper - upper.transpose(-1, -2) + + +class TestRustPfaffianParlettReid: + @pytest.mark.parametrize("block", _RANDOM_BLOCKS) + def test_forward_matches_python_parlett_reid(self, block): + matrix = _block_antidiagonal(block) + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix), + PfaffianParlettReid.apply(matrix), + atol=ATOL_MATRIX_COMPARISON, + rtol=RTOL_MATRIX_COMPARISON, + ) + + @pytest.mark.parametrize("block", _RANDOM_BLOCKS) + def test_forward_square_matches_determinant(self, block): + matrix = _block_antidiagonal(block) + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix) ** 2, + torch.linalg.det(matrix), + atol=ATOL_MATRIX_COMPARISON, + rtol=RTOL_MATRIX_COMPARISON, + ) + + def test_forward_two_by_two_is_signed(self): + matrix = torch.tensor([[0.0, -3.0], [3.0, 0.0]], dtype=torch.float64) + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix), + torch.tensor(-3.0, dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_supports_leading_batch_dims(self): + matrix = _block_antidiagonal(_RNG.random((2, 3, 4, 4))) + pfaffian = RustPfaffianParlettReid.apply(matrix) + assert pfaffian.shape == matrix.shape[:-2] + torch.testing.assert_close( + pfaffian**2, torch.linalg.det(matrix), atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON + ) + + @pytest.mark.parametrize("dtype", [torch.float32, torch.float64]) + def test_forward_preserves_dtype_and_device(self, dtype): + matrix = _random_skew(6, _RNG).to(dtype) + pfaffian = RustPfaffianParlettReid.apply(matrix) + assert pfaffian.dtype == dtype + assert pfaffian.device == matrix.device + + def test_forward_float32_kernel_matches_float64(self): + # The float32 input must route to the single-precision Rust kernel and agree with the + # double-precision result within single-precision tolerance. + matrix_double = _block_antidiagonal(_RNG.random((3, 4, 4))) + matrix_single = matrix_double.to(torch.float32) + result_single = RustPfaffianParlettReid.apply(matrix_single) + result_double = RustPfaffianParlettReid.apply(matrix_double) + assert result_single.dtype == torch.float32 + torch.testing.assert_close( + result_single, + result_double.to(torch.float32), + atol=ATOL_APPROX_COMPARISON, + rtol=RTOL_APPROX_COMPARISON, + ) + + def test_forward_odd_dimension_is_zero(self): + matrix = _random_skew(5, _RNG) + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix), + torch.zeros((), dtype=matrix.dtype), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_empty_matrix_is_one(self): + matrix = torch.zeros((0, 0), dtype=torch.float64) + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix), + torch.ones((), dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + def test_forward_singular_matrix_is_zero(self): + matrix = torch.zeros((4, 4), dtype=torch.float64) + matrix[2, 3] = 1.0 + matrix[3, 2] = -1.0 + torch.testing.assert_close( + RustPfaffianParlettReid.apply(matrix), + torch.zeros((), dtype=torch.float64), + atol=ATOL_SCALAR_COMPARISON, + rtol=RTOL_SCALAR_COMPARISON, + ) + + @pytest.mark.parametrize("dimension", _GRADCHECK_DIMENSIONS) + def test_backward_passes_gradcheck_on_skew_parameterization(self, dimension): + count = dimension * (dimension - 1) // 2 + parameters = torch.tensor(_RNG.random(count) + 0.5, dtype=torch.float64, requires_grad=True) + assert gradcheck( + lambda values: RustPfaffianParlettReid.apply(_skew_from_parameters(values, dimension)), + (parameters,), + eps=1e-6, + atol=ATOL_APPROX_COMPARISON, + rtol=RTOL_APPROX_COMPARISON, + ) + + def test_backward_exact_on_singular_matrix(self): + # At an exactly-singular skew input (pf=0) the gradient must be the TRUE derivative, via the + # Pfaffian adjugate. For the rank-2 matrix with only a_{23}=1, pf = a01*a23 - a02*a13 + a03*a12, + # so d pf / d a01 = a23 = 1 and the rest are 0. + parameters = torch.tensor([0.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=torch.float64, requires_grad=True) + RustPfaffianParlettReid.apply(_skew_from_parameters(parameters, 4)).backward() + expected = torch.tensor([1.0, 0.0, 0.0, 0.0, 0.0, 0.0], dtype=torch.float64) + torch.testing.assert_close(parameters.grad, expected, atol=ATOL_SCALAR_COMPARISON, rtol=RTOL_SCALAR_COMPARISON) + + def test_backward_gradcheck_at_singular_point(self): + # gradcheck centered at an exactly-singular skew point (would fail with the inverse-only form). + parameters = torch.tensor([0.0, 0.0, 0.0, 0.0, 0.0, 1.0], dtype=torch.float64, requires_grad=True) + assert gradcheck( + lambda values: RustPfaffianParlettReid.apply(_skew_from_parameters(values, 4)), + (parameters,), + eps=1e-6, + atol=ATOL_APPROX_COMPARISON, + rtol=RTOL_APPROX_COMPARISON, + ) + + def test_backward_returns_none_when_input_does_not_require_grad(self): + matrix = _random_skew(4, _RNG) + pfaffian = RustPfaffianParlettReid.apply(matrix) + + class _Context: + saved_tensors = (matrix, pfaffian) + needs_input_grad = (False,) + + assert RustPfaffianParlettReid.backward(_Context(), torch.ones_like(pfaffian)) is None diff --git a/tests/test_strategies/test_strategy.py b/tests/test_strategies/test_strategy.py new file mode 100644 index 0000000..f8644e5 --- /dev/null +++ b/tests/test_strategies/test_strategy.py @@ -0,0 +1,60 @@ +import torch + +from tests.configs import ATOL_MATRIX_COMPARISON, RTOL_MATRIX_COMPARISON +from torch_pfaffian.strategies.pfaffian_parlett_reid import PfaffianParlettReid +from torch_pfaffian.strategies.strategy import PfaffianStrategy + + +def _random_skew(dimension: int, seed: int) -> torch.Tensor: + generator = torch.Generator().manual_seed(seed) + full = torch.randn(dimension, dimension, dtype=torch.float64, generator=generator) + return full - full.transpose(-1, -2) + + +class _RecordingContext: + def save_for_backward(self, *tensors): + self.saved_tensors = tensors + + +class TestPfaffianStrategy: + def test_class_attributes(self): + assert PfaffianStrategy.NAME == "PfaffianStrategy" + assert PfaffianStrategy.EPSILON == 1e-30 + + def test_setup_context_saves_inputs_and_output(self): + matrix = torch.eye(2, dtype=torch.float64) + pfaffian = torch.tensor(1.0, dtype=torch.float64) + context = _RecordingContext() + PfaffianStrategy.setup_context(context, (matrix,), pfaffian) + assert context.saved_tensors[0] is matrix + assert context.saved_tensors[1] is pfaffian + + def test_base_forward_is_not_implemented(self): + assert PfaffianStrategy.forward(torch.eye(2, dtype=torch.float64)) is None + + def test_base_backward_is_not_implemented(self): + assert PfaffianStrategy.backward(None, None) is None + + def test_grad_matrix_matches_inverse_form_on_invertible(self): + # For invertible inputs the adjugate-based gradient equals the inverse-based closed form. + matrix = _random_skew(6, seed=0) + pfaffian = PfaffianParlettReid.forward(matrix) + grad_output = torch.tensor(1.7, dtype=torch.float64) + expected = torch.einsum("...,...ij->...ji", 0.5 * grad_output * pfaffian, torch.linalg.inv(matrix)) + result = PfaffianParlettReid.pfaffian_grad_matrix(matrix, pfaffian, grad_output) + torch.testing.assert_close(result, expected, atol=ATOL_MATRIX_COMPARISON, rtol=RTOL_MATRIX_COMPARISON) + + def test_grad_matrix_uses_adjugate_on_singular(self): + # Singular batch element (pf=0): the gradient is the exact Pfaffian-adjugate form, not zero. + singular = torch.zeros(4, 4, dtype=torch.float64) + singular[2, 3] = 1.0 + singular[3, 2] = -1.0 + invertible = _random_skew(4, seed=1) + matrix = torch.stack([singular, invertible]) + pfaffian = PfaffianParlettReid.forward(matrix) + assert pfaffian[0] == 0.0 # the singular element really has Pfaffian 0 + grad_output = torch.ones(2, dtype=torch.float64) + result = PfaffianParlettReid.pfaffian_grad_matrix(matrix, pfaffian, grad_output) + # d pf / d A_{01} = a_{23} = 1, so the gradient of the singular element is nonzero. + assert torch.isfinite(result).all() + assert result[0].abs().sum() > 0 diff --git a/tests/test_torch_pfaffian.py b/tests/test_torch_pfaffian.py index d39f328..cc98b7e 100644 --- a/tests/test_torch_pfaffian.py +++ b/tests/test_torch_pfaffian.py @@ -1,69 +1,139 @@ -import numpy as np -import pytest +from unittest import mock -from .configs import ( - N_RANDOM_TESTS_PER_CASE, - TEST_SEED, - ATOL_APPROX_COMPARISON, - RTOL_APPROX_COMPARISON, - set_seed, -) +import pytest import torch -from torch_pfaffian import pfaffian_strategy_map, get_pfaffian_function -from torch.autograd import gradcheck - -set_seed(TEST_SEED) - - -@pytest.mark.parametrize( - "matrix, function_name", - [ - (np.random.rand(*shape), function_name) - for shape in [ - (8, 8), - (16, 6, 6), - (18, 10, 10), - ] - for _ in range(N_RANDOM_TESTS_PER_CASE) - for function_name in pfaffian_strategy_map.keys() - ] -) -def test_torch_pfaffian_gradcheck(matrix, function_name): - func = get_pfaffian_function(function_name) - skew_matrix = matrix - np.einsum("...ij->...ji", matrix) - skew_tensor = torch.tensor(skew_matrix, requires_grad=True) - assert gradcheck( - func, (skew_tensor,), - eps=1e-3, - atol=ATOL_APPROX_COMPARISON, - rtol=RTOL_APPROX_COMPARISON - ) - - -@pytest.mark.parametrize( - "matrix, function_name", - [ - (np.random.rand(*shape), function_name) - for shape in [ - (8, 8), - (16, 6, 6), - (18, 10, 10), - ] - for _ in range(N_RANDOM_TESTS_PER_CASE) - for function_name in pfaffian_strategy_map.keys() - ] -) -def test_torch_pfaffian_forward_against_det(matrix, function_name): - func = get_pfaffian_function(function_name) - skew_matrix = matrix - np.einsum("...ij->...ji", matrix) - skew_tensor = torch.tensor(skew_matrix, requires_grad=True) - - pf = func(skew_tensor) - det = torch.linalg.det(skew_tensor) - - assert torch.allclose( - pf ** 2, det, - atol=ATOL_APPROX_COMPARISON, - rtol=RTOL_APPROX_COMPARISON - ) +import torch_pfaffian +from torch_pfaffian import get_pfaffian_function, pfaffian, pfaffian_strategy_map +from torch_pfaffian.strategies import PfaffianDet, PfaffianFDBPf, PfaffianParlettReid + + +class TestTorchPfaffian: + def test_rust_parlett_reid_registered_when_available(self): + pytest.importorskip("torch_pfaffian._rust") + from torch_pfaffian.strategies import RustPfaffianParlettReid + + assert RustPfaffianParlettReid is not None + assert RustPfaffianParlettReid.NAME.lower().strip() in pfaffian_strategy_map + assert get_pfaffian_function(RustPfaffianParlettReid.NAME) == RustPfaffianParlettReid.apply + + def test_pfaffian_strategy_map_contains_registered_strategies(self): + assert PfaffianFDBPf.NAME.lower().strip() in pfaffian_strategy_map + assert PfaffianDet.NAME.lower().strip() in pfaffian_strategy_map + assert all(issubclass(cls, PfaffianFDBPf.__bases__[0]) for cls in pfaffian_strategy_map.values()) + + def test_get_pfaffian_function_returns_apply_of_registered_strategy(self): + function = get_pfaffian_function(PfaffianFDBPf.NAME) + assert function == PfaffianFDBPf.apply + + def test_get_pfaffian_function_dispatches_to_pfaffian_det(self): + assert get_pfaffian_function(PfaffianDet.NAME) == PfaffianDet.apply + + def test_get_pfaffian_function_default_name_is_callable(self): + function = get_pfaffian_function() + matrix = torch.tensor([[0.0, 1.0], [-1.0, 0.0]], dtype=torch.float64) + torch.testing.assert_close(function(matrix), matrix[..., 0, 1]) + + def test_get_pfaffian_function_is_case_and_whitespace_insensitive(self): + function = get_pfaffian_function(f" {PfaffianFDBPf.NAME.upper()} ") + assert function == PfaffianFDBPf.apply + + def test_get_pfaffian_function_unknown_name_raises_value_error(self): + with pytest.raises(ValueError, match="Unknown strategy name"): + get_pfaffian_function("not_a_real_strategy") + + def test_parlett_reid_is_registered(self): + assert PfaffianParlettReid.NAME.lower().strip() in pfaffian_strategy_map + assert get_pfaffian_function(PfaffianParlettReid.NAME) == PfaffianParlettReid.apply + + @staticmethod + def _skew_matrix() -> torch.Tensor: + return torch.tensor([[0.0, -3.0], [3.0, 0.0]], dtype=torch.float64) + + def test_pfaffian_signed_by_default_matches_parlett_reid(self): + matrix = self._skew_matrix() + torch.testing.assert_close(pfaffian(matrix), PfaffianParlettReid.apply(matrix)) + assert pfaffian(matrix).item() < 0 # signed, not magnitude + + def test_pfaffian_sign_false_returns_magnitude(self): + matrix = self._skew_matrix() + torch.testing.assert_close(pfaffian(matrix, sign=False), PfaffianDet.apply(matrix)) + assert pfaffian(matrix, sign=False).item() > 0 + + def test_pfaffian_routes_sign_true_to_rust_when_available(self): + pytest.importorskip("torch_pfaffian._rust") + with mock.patch.object(torch_pfaffian, "RustPfaffianParlettReid") as fake: + fake.apply.return_value = torch.zeros(()) + pfaffian(self._skew_matrix(), sign=True) + fake.apply.assert_called_once() + + def test_pfaffian_routes_sign_true_to_python_when_rust_unavailable(self): + with ( + mock.patch.object(torch_pfaffian, "RustPfaffianParlettReid", None), + mock.patch.object(torch_pfaffian, "PfaffianParlettReid") as fake, + ): + fake.apply.return_value = torch.zeros(()) + pfaffian(self._skew_matrix(), sign=True) + fake.apply.assert_called_once() + + def test_pfaffian_sign_true_routes_to_python_on_non_cpu_device(self): + # The Rust kernel is CPU-only, so a non-CPU input must use the device-native PyTorch strategy. + pytest.importorskip("torch_pfaffian._rust") + non_cpu_matrix = mock.MagicMock() + non_cpu_matrix.device.type = "cuda" + with ( + mock.patch.object(torch_pfaffian, "RustPfaffianParlettReid") as fake_rust, + mock.patch.object(torch_pfaffian, "PfaffianParlettReid") as fake_python, + ): + fake_python.apply.return_value = torch.zeros(()) + pfaffian(non_cpu_matrix, sign=True) + fake_python.apply.assert_called_once() + fake_rust.apply.assert_not_called() + + def test_pfaffian_routes_magnitude_no_grad_to_det(self): + with mock.patch.object(torch_pfaffian, "PfaffianDet") as fake: + fake.apply.return_value = torch.zeros(()) + pfaffian(self._skew_matrix(), sign=False) + fake.apply.assert_called_once() + + def test_pfaffian_routes_magnitude_with_grad_to_fdbpf(self): + matrix = self._skew_matrix().requires_grad_(True) + with mock.patch.object(torch_pfaffian, "PfaffianFDBPf") as fake: + fake.apply.return_value = torch.zeros((), requires_grad=True) + pfaffian(matrix, sign=False) + fake.apply.assert_called_once() + + def test_pfaffian_signed_backward_flows(self): + matrix = self._skew_matrix().requires_grad_(True) + pfaffian(matrix).backward() + assert matrix.grad is not None + assert matrix.grad.shape == matrix.shape + + def test_pfaffian_check_input_rejects_non_skew(self): + non_skew = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float64) + with pytest.raises(ValueError, match="skew-symmetric"): + pfaffian(non_skew, check_input=True) + + def test_pfaffian_check_input_rejects_non_square(self): + non_square = torch.zeros((2, 4), dtype=torch.float64) + with pytest.raises(ValueError, match="square"): + pfaffian(non_square, check_input=True) + + def test_pfaffian_check_input_accepts_skew_matrix(self): + matrix = self._skew_matrix() + torch.testing.assert_close(pfaffian(matrix, check_input=True), pfaffian(matrix)) + + def test_pfaffian_check_input_off_by_default_allows_non_skew(self): + non_skew = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float64) + pfaffian(non_skew) # no validation by default, so no error is raised + + def test_pfaffian_warns_when_result_overflows(self): + # A 4x4 block-antidiagonal with huge entries makes the Pfaffian overflow to inf. + block = torch.tensor([[1e200, 0.0], [0.0, 1e200]], dtype=torch.float64) + zero = torch.zeros_like(block) + top = torch.cat([zero, block], dim=-1) + bottom = torch.cat([-block.transpose(-1, -2), zero], dim=-1) + matrix = torch.cat([top, bottom], dim=-2) + with pytest.warns(RuntimeWarning, match="not finite"): + result = pfaffian(matrix) + assert not torch.isfinite(result).all() diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..16f8505 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,30 @@ +from torch_pfaffian.utils import get_all_subclasses + + +class TestUtils: + def test_get_all_subclasses_returns_empty_for_leaf(self): + class Leaf: + pass + + assert get_all_subclasses(Leaf) == [] + + def test_get_all_subclasses_returns_direct_subclasses(self): + class Base: + pass + + class Child(Base): + pass + + assert get_all_subclasses(Base) == [Child] + + def test_get_all_subclasses_returns_nested_subclasses(self): + class Base: + pass + + class Child(Base): + pass + + class GrandChild(Child): + pass + + assert set(get_all_subclasses(Base)) == {Child, GrandChild} diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..4a86916 --- /dev/null +++ b/uv.lock @@ -0,0 +1,4827 @@ +version = 1 +revision = 3 +requires-python = ">=3.10, <3.15" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +conflicts = [[ + { package = "torchpfaffian", extra = "cpu" }, + { package = "torchpfaffian", extra = "cu128" }, + { package = "torchpfaffian", extra = "cu130" }, +]] + +[[package]] +name = "alabaster" +version = "0.7.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776, upload-time = "2024-01-10T00:56:10.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511, upload-time = "2024-01-10T00:56:08.388Z" }, +] + +[[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 = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, +] + +[[package]] +name = "backports-tarfile" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", size = 86406, upload-time = "2024-05-28T17:01:54.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, +] + +[[package]] +name = "bleach" +version = "6.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "(os_name == 'nt' and sys_platform != 'darwin') or (os_name == 'nt' and extra != 'extra-13-torchpfaffian-cpu') or (os_name != 'nt' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (os_name != 'nt' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (os_name != 'nt' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "importlib-metadata", marker = "python_full_version < '3.10.2' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "certifi" +version = "2026.5.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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]] +name = "cfgv" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182, upload-time = "2026-04-02T09:25:40.673Z" }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329, upload-time = "2026-04-02T09:25:42.354Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230, upload-time = "2026-04-02T09:25:44.281Z" }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890, upload-time = "2026-04-02T09:25:45.475Z" }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930, upload-time = "2026-04-02T09:25:46.58Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109, upload-time = "2026-04-02T09:25:48.031Z" }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684, upload-time = "2026-04-02T09:25:49.245Z" }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785, upload-time = "2026-04-02T09:25:50.671Z" }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055, upload-time = "2026-04-02T09:25:51.802Z" }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502, upload-time = "2026-04-02T09:25:53.388Z" }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295, upload-time = "2026-04-02T09:25:54.765Z" }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145, upload-time = "2026-04-02T09:25:55.904Z" }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884, upload-time = "2026-04-02T09:25:57.074Z" }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343, upload-time = "2026-04-02T09:25:58.199Z" }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174, upload-time = "2026-04-02T09:25:59.322Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805, upload-time = "2026-04-02T09:26:00.756Z" }, + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "click" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551, upload-time = "2025-04-15T17:34:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399, upload-time = "2025-04-15T17:34:51.427Z" }, + { 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/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636, upload-time = "2025-04-15T17:35:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636, upload-time = "2025-04-15T17:35:58.283Z" }, + { 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/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580, upload-time = "2025-04-15T17:37:03.105Z" }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530, upload-time = "2025-04-15T17:37:07.026Z" }, + { 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/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630, upload-time = "2025-04-15T17:38:19.142Z" }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670, upload-time = "2025-04-15T17:38:23.688Z" }, + { 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/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090, upload-time = "2025-04-15T17:43:34.084Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643, upload-time = "2025-04-15T17:43:38.626Z" }, + { 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/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681, upload-time = "2025-04-15T17:44:59.314Z" }, + { 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/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807, upload-time = "2025-04-15T17:45:15.535Z" }, + { 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' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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/91/2e/c4390a31919d8a78b90e8ecf87cd4b4c4f05a5b48d05ec17db8e5404c6f4/contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1", size = 288773, upload-time = "2025-07-26T12:01:02.277Z" }, + { url = "https://files.pythonhosted.org/packages/0d/44/c4b0b6095fef4dc9c420e041799591e3b63e9619e3044f7f4f6c21c0ab24/contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381", size = 270149, upload-time = "2025-07-26T12:01:04.072Z" }, + { 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/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, + { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, + { 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/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { 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/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { 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/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { 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/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { 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/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, + { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, + { 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.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/fd/0ab2772530e946e1be1abd0bc09e647ec9b02e88f0867857601fefca8953/coverage-7.14.1.tar.gz", hash = "sha256:30c08f7d90415aa98b3c990385dea2939b0da55f38515e5b369b83655f8523be", size = 920132, upload-time = "2026-05-26T20:41:36.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/69/0d2ef01ff4b8fcecd4cba920d11e92fa4f96ae412441d3b56a90a258e69b/coverage-7.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e3680291c4a1d0dadfa84a2c459576a4af5133abb617905714339a0c73138cf", size = 219722, upload-time = "2026-05-26T20:38:14.002Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ae/9afdeaa31b9d9ce98124b6abf8bb49119bf71aecae04f8567c189d91299f/coverage-7.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5274669f37f2343635a347b91a60777621341ab3378e9c6ac9335eee704bddf", size = 220240, upload-time = "2026-05-26T20:38:17.424Z" }, + { url = "https://files.pythonhosted.org/packages/51/69/c998589871df7ea7dba865cc5ee32b5a3e1d47ba6c68ef91104c7c46fa5e/coverage-7.14.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cfe5a5fec635799ef33428f1e5e61bafa45a92a96190ba731561ba558ccc214d", size = 246981, upload-time = "2026-05-26T20:38:19.266Z" }, + { url = "https://files.pythonhosted.org/packages/fc/10/1c7d04c13040dac531d21b712bbe08f902e6dd9b58f5d77875c4d030f8f2/coverage-7.14.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:62a9f70b52e0b5a95cfef4a5c5641b06983cadc5e538a3feeb5c00211f523ac2", size = 248812, upload-time = "2026-05-26T20:38:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/c1/65/2a38a4607ef27cadcfbcee034dba5830ae2569f90144a0f4c7dbf47d30b0/coverage-7.14.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c18ebc343e15be53049b3a2dce38fe82d58f37e20ab9094b3a39c0aa4f6bb47", size = 250675, upload-time = "2026-05-26T20:38:22.159Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a2/a446ed9752a4a59b79e0fb6cbb319f6facb2183045c0725462625e66f87e/coverage-7.14.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b84ffdf877644e7096aa936991efeed873f7f3df57b9cd001312b7668ab08550", size = 252590, upload-time = "2026-05-26T20:38:23.63Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fd/e81fbd7ba752365546e9842b1cbdaad3d6919d2a522c590aef16a281ec5e/coverage-7.14.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e854312c4103f2ad4c0dc023b69b77ebfd2c89db5f86c4c94dc2353f9a92167e", size = 247691, upload-time = "2026-05-26T20:38:25.057Z" }, + { url = "https://files.pythonhosted.org/packages/53/35/f3c26fdaae9ea937d154ca4d372e5ea0a4167ff70d36c6074ac2eacb2f83/coverage-7.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c643734307300234fafa36bf2a040a7235f8f177ea1fd6ec1423aea6fb7b929f", size = 248716, upload-time = "2026-05-26T20:38:26.406Z" }, + { url = "https://files.pythonhosted.org/packages/2e/14/940b6c49551fd343e8507ee2b0ba7af5d0aa04ed5bf768285cb7c72a9884/coverage-7.14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84ac9499e48700399a5dd0ea7085b5091961fec52c68d66b4ec0d3cf7f4441b1", size = 246721, upload-time = "2026-05-26T20:38:28.282Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2c/40fc0634186c28292a662dff578866b3913983d6c375a3c2a74020938719/coverage-7.14.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:7f02d09f70776579b926d889a4c9c235070a1f47c40458aeaca563fae5acfdb5", size = 250533, upload-time = "2026-05-26T20:38:29.753Z" }, + { url = "https://files.pythonhosted.org/packages/de/e3/2c26bf1e811f9df991ff2a9bdddebdd13ee0665d564df7d05979f9146297/coverage-7.14.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ce66d8e46da2bb5ee313a745cbd2e391d319176c1f7a9451bfcd3a2fb920859b", size = 246990, upload-time = "2026-05-26T20:38:31.516Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b0/060260ef56bd92363ebdce0c7095ce422b06e69aae71828efeca473ab1ca/coverage-7.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c912c259304cfb5ee584481cfb7ce1ff932b4d61e6c9140b8f19cb7b5ed82332", size = 247593, upload-time = "2026-05-26T20:38:33.065Z" }, + { url = "https://files.pythonhosted.org/packages/63/f3/501502046efeb0d6d94b5ca54941d95f1184183dd6bdb7f283985783bb4a/coverage-7.14.1-cp310-cp310-win32.whl", hash = "sha256:1238cb94638e610e972c60dac68e813f868dc7d6e982535270558443058d9d59", size = 222330, upload-time = "2026-05-26T20:38:35.36Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5d/1bf99f2c558f128faf7906817ccbdb576ba815d3b41ce2ac1719b70a3663/coverage-7.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:fc459e5d73be2d6332fcfe8dbf3d8994671fe33c700f4565988ecfa511547253", size = 223261, upload-time = "2026-05-26T20:38:37.196Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d7/477ad149490e6cb849f28abea1dabb9c823cea72e7500c81b4240ce619c0/coverage-7.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:478b5bcd63c2e1357c5c7e16c070690df7b07f676b1c114d7b93e533c664309f", size = 219848, upload-time = "2026-05-26T20:38:38.715Z" }, + { url = "https://files.pythonhosted.org/packages/91/82/a5eb47257c50601bb7b9a9d2857c67b7a3a85ad74180eb2c98bb1fbe0ce5/coverage-7.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a24a81f9715ee42ef59a316cc11611c98fe23920f7c81861315c9f3ff4a230f4", size = 220354, upload-time = "2026-05-26T20:38:40.232Z" }, + { url = "https://files.pythonhosted.org/packages/43/8b/78419b5391a5cb706b6544390507e469d83ffc9a8248b02c4011aceb9365/coverage-7.14.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:196a13319ad88d6d8ef5ab489ec4f44ddde2143c0c7d5b27786f6c3ffd56a7e1", size = 250771, upload-time = "2026-05-26T20:38:41.782Z" }, + { url = "https://files.pythonhosted.org/packages/77/63/e77aaacd491182210d639636b7a8bba23ffffa9b82aa3762da9431855fa9/coverage-7.14.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d452fd08b5c72c5167c93e6867b5c08500bd40f2a21e1e854a500550b6cc36f", size = 252683, upload-time = "2026-05-26T20:38:43.305Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/a022e3cfbec2ac241640003cb3a817e161d9c7f5aa9b49173756cdc03204/coverage-7.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23bf7fa51ac02e07fc7c96849b82946da47ae862dc8f86d183b2a4864fc38129", size = 254791, upload-time = "2026-05-26T20:38:45.361Z" }, + { url = "https://files.pythonhosted.org/packages/61/d6/967e408aca4c1ceb88cb0cc677169110ae7f5995fb5eaf5fb1f5a1bb8f5d/coverage-7.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bcaa50684dcaadfa599ac48f81103c756d791cfd85c97203d2217c593d48b860", size = 256748, upload-time = "2026-05-26T20:38:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/b8/be/869188f7fe28638078ec479331ace6dc5f7b40b7153eb616f47ab79404d8/coverage-7.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4ea1c034f95c9b056e856b794630b17f9fa3d57e4800ff1e503d3be0f9c9078c", size = 250907, upload-time = "2026-05-26T20:38:48.493Z" }, + { url = "https://files.pythonhosted.org/packages/07/aa/adb7d3b4278d690e68703abcd76ab1b948242e3668d921711551b78f9ddb/coverage-7.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c7e057326434e441306226fbeb5d1aaf14a2637efe97ba668306635835f32ad7", size = 252483, upload-time = "2026-05-26T20:38:50.074Z" }, + { url = "https://files.pythonhosted.org/packages/43/61/331c74103c62dcb0c4b9b3a0de9a61aca016208b0a90f109592a9f9ecc28/coverage-7.14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:59baf88468dbc8d63b1887afd92bda52e40bb1561696e5819670601403810cec", size = 250545, upload-time = "2026-05-26T20:38:51.613Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b6/c5dae3c104d89be04828f61810e6b3473825482e4c288cc4ed04553e08ae/coverage-7.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d34d75f892b3ab73ba11cab5442cce7b3e168fd64162b16f0e1e0d09c508edef", size = 254310, upload-time = "2026-05-26T20:38:53.503Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a1/2b9d5863e3b83c01ad8199e3c597802fbb3a9dc90b058885804c20296d31/coverage-7.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3a56abc20a472baf0304c455721bc601477440d28ecfde8a03dde79ede07e0df", size = 250266, upload-time = "2026-05-26T20:38:55.414Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/0e511fbdb269359be26fe678a1c3fa1f2aa2a01573cc3f54268c8d6d4797/coverage-7.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6a3cb83d1552c0cd1b4906655b6a33fd4a8473229633a901c6b73bf86914dee9", size = 251174, upload-time = "2026-05-26T20:38:57.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/10/e55307b622b3dd9671cb321824502dc10f93e72f2802b9946159a8edadeb/coverage-7.14.1-cp311-cp311-win32.whl", hash = "sha256:10274a1fbeb8ec5d72966e17bb198a3104257aca4ac09d98667c5f8aca8c8548", size = 222354, upload-time = "2026-05-26T20:38:58.727Z" }, + { url = "https://files.pythonhosted.org/packages/71/cf/107421693cfb71e4f1ca5bf70443f64d4161878068d07a3e51c7ad21d17b/coverage-7.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:87ebdf787d4888e3f3f2d523eadc6e18c6d18c6d0eb173801a189641627fb37e", size = 223290, upload-time = "2026-05-26T20:39:00.413Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1d/3e3644585eb29e9dafefb19555078529a4d7cce12bd21929664eea989277/coverage-7.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:dd34767fa19848d35659ffc0a75314f58c7af3f1cd87ec521e8292a1238398a3", size = 221953, upload-time = "2026-05-26T20:39:02.159Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b7/bdbb725ba02c5b42825b200c940f38b7a54fcad24627b7192f78f8110d76/coverage-7.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a06c76364a9360e33d6d23769aefdf7f66f38e2ffb60ceb1baaa4989d83b695c", size = 220022, upload-time = "2026-05-26T20:39:03.702Z" }, + { url = "https://files.pythonhosted.org/packages/72/81/fdc0898a55c6219223291ec1a1fe89966ef212ce82276aa0899df84b5de0/coverage-7.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fad54e871165f6ec2f536063ac74c3104508a12963e64072ba44bd822de52b0c", size = 220379, upload-time = "2026-05-26T20:39:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/de/72/de048c4a25e13bce59ac6a339351c10bdf2515e07459afcdaf04dc3143a2/coverage-7.14.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:84b535f00655ecafe1d929d1fb00ed5d6fa3051ea643ab2c161a3887b86f294b", size = 251888, upload-time = "2026-05-26T20:39:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/28/30/300c343f68beb9d4cbb64ec81e58c5b6b80b56927f72d2b38654ac26e013/coverage-7.14.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6b6b0853b895fe0e98cbfc580d1ec3393d9302b4b1e96a77b3f5c91fdab899e6", size = 254624, upload-time = "2026-05-26T20:39:09.037Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ed/7b25642496e8170b6bac14adce00537c6e5fa2d586159401a4de3e8b49e6/coverage-7.14.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:442cc9c952b2df400cda54bb04ab87330cf2cd08a8692cbbea36773531eb6f37", size = 255739, upload-time = "2026-05-26T20:39:10.889Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a2/abd210b8c4e29c24e4624916db97bb519097a91034aaeb767f937e7da794/coverage-7.14.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8270544c361ed405a27a060dbc9ed2c124b084d96dfdc2d9a2510482aef981ad", size = 257998, upload-time = "2026-05-26T20:39:12.722Z" }, + { url = "https://files.pythonhosted.org/packages/7f/24/7c50beed3792fe62f6ce0545c6686ce83379719e2c0276179333d97eae92/coverage-7.14.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:48b283b1dd6372e8de2a7a9a4c4d5dc06f4d4fd209b876f3c88a7a205a0c8f84", size = 252296, upload-time = "2026-05-26T20:39:14.259Z" }, + { url = "https://files.pythonhosted.org/packages/15/05/0f874628ebcbfc77ead559ff210281ef06a97db08481832e7dd39274a135/coverage-7.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5b0c99ba93a07d56f6df340bb79be53202a082b2fdb81bfe6190b741a3470d54", size = 253658, upload-time = "2026-05-26T20:39:15.923Z" }, + { url = "https://files.pythonhosted.org/packages/99/6f/ca6ad067364b337ef997802115e7ecad2abd2248b05471464b0dea02b4d4/coverage-7.14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e471bc5769ff073b058cfadb0d736b56ce067c8560eabeb0da88462df98c23e7", size = 251803, upload-time = "2026-05-26T20:39:17.537Z" }, + { url = "https://files.pythonhosted.org/packages/c0/30/b9b4d377cd9f40baf228068f5a81faf8450c6228503011bd499708483a50/coverage-7.14.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f497a1ea81d4cd7c10ddcaa685135b9aabd291af3d55775a9ddf3cb7a364cdd9", size = 255873, upload-time = "2026-05-26T20:39:19.414Z" }, + { url = "https://files.pythonhosted.org/packages/3c/21/7c721a9e5e6bb88547d30a787aefb97512d3f54c1324c7488d9b3743f7f9/coverage-7.14.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2222be86d0b54f5dd5a38f45f17f315f737245e857bf0bdedc70734f84a13c02", size = 251372, upload-time = "2026-05-26T20:39:21.169Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f8ae5a2200130e1503cd7661a6cd3b2b7bacef98277fbf3571fb13f8b766/coverage-7.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:85e85586565842f6932abebd4c18bcb1074223dc0b3576e7d173ca710622813a", size = 253245, upload-time = "2026-05-26T20:39:23.097Z" }, + { url = "https://files.pythonhosted.org/packages/34/62/70a9024672a5f6910517d9628c52c9afbdd3cf8f46426af52bb148a56fff/coverage-7.14.1-cp312-cp312-win32.whl", hash = "sha256:4a28fd227808366b196a75476dced2eb35b351d6766ba9c858dc93319e87f4f1", size = 222567, upload-time = "2026-05-26T20:39:24.868Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/8b7cd386839b039ebe1855733b9f9449a8dec5d79564018234f185a7fa70/coverage-7.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:54acdb6674a4661768d7bf7db32dfb9f46ab1d764f8aba6df75ce1a6a088724e", size = 223372, upload-time = "2026-05-26T20:39:26.603Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ba/b44d472022f620d289d95fa830143235c0c36461c6f2437ea8d51e5481ed/coverage-7.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:99cd41ff91afd94896fea3bc002706b6ae4ce95727d06e4a0f39c0a8d8bd8b1a", size = 221989, upload-time = "2026-05-26T20:39:28.242Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/5f6d56327c62b185225d145191c607e07515294a0aa6338e58805cd4a5ac/coverage-7.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:be9f2c802dcfce3f71298303aa5dad0dce440a76c52f2f60dacd8656dab78793", size = 220044, upload-time = "2026-05-26T20:39:29.902Z" }, + { url = "https://files.pythonhosted.org/packages/75/92/e82aca356744cbbc0f77a0b623e38918c1872361963413a3bab5d0340393/coverage-7.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6223a72fd0e4c7156353ec0f08a5f93623e1d3034d0e2683b9bb8ea674131b1d", size = 220412, upload-time = "2026-05-26T20:39:31.561Z" }, + { url = "https://files.pythonhosted.org/packages/27/c9/385bde0bf7ed0f4bf3a7ee5367060a86b5d218718cfd6fb943c0f836b34f/coverage-7.14.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7279d2110a28cebc738b6459ecda2771735a4c18465fbbd36b3288fe5ed92247", size = 251412, upload-time = "2026-05-26T20:39:33.337Z" }, + { url = "https://files.pythonhosted.org/packages/51/8c/23faf6a2343a0d17f960a4bd56c43bc7eb4cf312f774dd6ceebd82c7d8fc/coverage-7.14.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9eeb3fcbc13ba40dfbdb22d01d196a28e9cef9ed4c29b60061a1e0e823a9929d", size = 254008, upload-time = "2026-05-26T20:39:35.009Z" }, + { url = "https://files.pythonhosted.org/packages/42/06/36f4aa9ca8a815e6036156e80706a67828bb97bd826948244f6996dda957/coverage-7.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f0cfc27c539f07cf5c0a4cfe211d0b6cae039f8f40526dbaa71944e64b50a7b", size = 255241, upload-time = "2026-05-26T20:39:36.71Z" }, + { url = "https://files.pythonhosted.org/packages/ca/79/95266316352f90f6b1c6736bb413302edfde2453fb32422d3911642691b3/coverage-7.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:221c70f316241a78e77e607c227cefc8808d4e08f28d99c04f35694690e940be", size = 257373, upload-time = "2026-05-26T20:39:38.412Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9c/58316d1f66c488b5fca8a0eb3e98348807813efa8a0d0833b9021be27488/coverage-7.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:da028256b04ec30e5e0114b6f76172938c313991f0a2d3d894271315cf5d5e43", size = 251635, upload-time = "2026-05-26T20:39:40.268Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5a/ca2398a568e16fed7bb713e84ba3603a7164fb65779abe645c565ec890d5/coverage-7.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76a085d7005236a767e3426148b2c407e53ad61695c562f8a81da2d373324901", size = 253373, upload-time = "2026-05-26T20:39:42.145Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2c/0396562c32deaebe7be51d865b3a41e9a87d7561acafe1a28f53b07e019a/coverage-7.14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b553d04b5e778a8e56d57eb134aff42a92718ecba45e79c4764ecfa40efd92ff", size = 251341, upload-time = "2026-05-26T20:39:43.907Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8f/a94f9221184c9cae1ee115820e3798e48b6b17777a9f19e46fb9a0c8dc74/coverage-7.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:46f714d2fb8ae2f4f29f23ada7f1e79b759fff5a70f94a1dac23af204c3ec9e4", size = 255497, upload-time = "2026-05-26T20:39:46.166Z" }, + { url = "https://files.pythonhosted.org/packages/71/69/505d70e47db1eaebcd002c39759707621ef184cd6b1ae084d9f41293f323/coverage-7.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1896f5e19ff3f0431c7ce2172adc54890fd97f86b59ced8ca1649145d9ffe35d", size = 251159, upload-time = "2026-05-26T20:39:48.03Z" }, + { url = "https://files.pythonhosted.org/packages/e0/aa/58681c383aa33a9d2ed40a02d7a22fbf780d1fa4d575396365777828198c/coverage-7.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:62fd185ef9df3c33d1c8178c5af105f762afbad96038de9a4ae100aa6297ca33", size = 252934, upload-time = "2026-05-26T20:39:49.872Z" }, + { url = "https://files.pythonhosted.org/packages/eb/fd/11c928cd6bdffc7074bb5965c173d9ebf517fb00205e1da524b98d29ef92/coverage-7.14.1-cp313-cp313-win32.whl", hash = "sha256:ab4af6352741a604c431c6072fce5bee33bf0f20dc7a56618d6bf6bb89e9810c", size = 222584, upload-time = "2026-05-26T20:39:51.68Z" }, + { url = "https://files.pythonhosted.org/packages/6f/92/fb416fc26d340dcba19518c418d6048e913186e17243982c5e435e41fa7a/coverage-7.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:7af486dabe8954d03b087f0021540897afe084f04e16ff5579e08cc46f871416", size = 223394, upload-time = "2026-05-26T20:39:53.472Z" }, + { url = "https://files.pythonhosted.org/packages/73/c6/02d56e3867972f77d5036de924643f26c056e848f00452cafb4dbc3c29b4/coverage-7.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:2224f89ffd0c5605ccce1ed7a584da162bc7c55f601ab1c946bc9de31a486b42", size = 222015, upload-time = "2026-05-26T20:39:55.374Z" }, + { url = "https://files.pythonhosted.org/packages/4d/9e/fcc77914050df73f7662fa1f00902774c79c075a8388ab334074574bf77e/coverage-7.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de286598cc65d2b489411174b1faec2f5a7775fb3201fd925db2a76b4030f37d", size = 220733, upload-time = "2026-05-26T20:39:57.189Z" }, + { url = "https://files.pythonhosted.org/packages/f7/67/2963cbdaf5cbadec44efa3a1e39eaa1f02df4079585f05387607a221e126/coverage-7.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:042c46ded7c288aeb07cf14a28b6c1e10b78fcba40171c3fa1e939377eeef0b5", size = 221086, upload-time = "2026-05-26T20:39:59.019Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c5/8701645574e11881f2f47d8930f98bc48b5d43b25eb5b4430dfc4a2f9f48/coverage-7.14.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f4ddbe407477f04c45115d1a4e5bc480f753553b534d338d4c3358b1cdd0ea52", size = 262381, upload-time = "2026-05-26T20:40:00.822Z" }, + { url = "https://files.pythonhosted.org/packages/7c/28/7a64d73598263e0c5abd5084211a8474488d31b3c552ff531c719dfcff62/coverage-7.14.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d13e6725992e2d2fd7d81d4f5241952d13740121dfd501da09201be39b2c003a", size = 264458, upload-time = "2026-05-26T20:40:02.506Z" }, + { url = "https://files.pythonhosted.org/packages/fa/d8/4969179db9f7eb4df218e69540adf829d1c835f59452513d065d15446802/coverage-7.14.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f747dc8edcfe740130f28f32f3995e955494285717e86ee25af51db2219df08a", size = 266884, upload-time = "2026-05-26T20:40:04.421Z" }, + { url = "https://files.pythonhosted.org/packages/a6/78/a45d5794dbc9bafd97afc96a4377c86c7820d78b6cf51b89bc1d4e919275/coverage-7.14.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced2f09ef276fd58611a1ef502164ad266d2b75174e5a40cabbdb4033f9f6cf2", size = 268022, upload-time = "2026-05-26T20:40:06.298Z" }, + { url = "https://files.pythonhosted.org/packages/21/cb/4f5e354e9e3e67af96bd4e57113e6db6b22298c7168b13eec408a549903d/coverage-7.14.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b84800013769a78ccb9ef4659402e26d06867e337b61ec365f77ad008adea80e", size = 261631, upload-time = "2026-05-26T20:40:08.226Z" }, + { url = "https://files.pythonhosted.org/packages/ec/49/eced49af4cb996d5d8b7e94e736175c513e4facd3398507b89892b4326d8/coverage-7.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ea8cd6ca0ee9f616aaef3afc6882e32c2cbf18b00d96313ffd76af650574034d", size = 264443, upload-time = "2026-05-26T20:40:10.137Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d8/5603a88a7c5913a6b54f6cb1a8c46f7b39cbb30f27cd3f492908da09b2d7/coverage-7.14.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:aa5e304a873fabddc11e484e9b6b738bd38bd7bed17b09aa84eecf5332e8b8bb", size = 262069, upload-time = "2026-05-26T20:40:11.999Z" }, + { url = "https://files.pythonhosted.org/packages/f0/59/2ae3cb79da554a06c8619d6c88ea19dd1e4aed4b834b6a83bb1fa243bdc5/coverage-7.14.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5a1c5215be81035e629d5bc756650634d0bf31991038db7a0eccb90f025ce16d", size = 265780, upload-time = "2026-05-26T20:40:13.858Z" }, + { url = "https://files.pythonhosted.org/packages/af/5f/b130c1dc999031f2648bd25317fbce505ad8d5562079b4ed81e736a84967/coverage-7.14.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:79058c47dae6788504b5effb319961bcd72d7240551464b91d474bc0ed186d69", size = 260970, upload-time = "2026-05-26T20:40:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/87/d1/ec13ccddeb48ec963bdfa72a11224bac2584bd045ba13beca82f8113e9c7/coverage-7.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:370c5afae3fa0658e11694a32b24c2778f6bc2d17718121f94ee185e69f26b54", size = 263157, upload-time = "2026-05-26T20:40:18.382Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c2/cd91ead503045161092d3845f7bb95ea2f25131ce96d3e314dd835d91b9c/coverage-7.14.1-cp313-cp313t-win32.whl", hash = "sha256:3758dd0a7f1fa57365ef2e781df0f0731d38b6e3772259d13dae4bd8a958d4b1", size = 223259, upload-time = "2026-05-26T20:40:20.381Z" }, + { url = "https://files.pythonhosted.org/packages/71/9f/1e28d97e6bd2c76b07f38b7c02870f1371255ff6717f54eca578fcbbdd0e/coverage-7.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:6ff665fb023a77386fe11685190cee1f60a7d635994a30d9b0a061533d470fce", size = 224320, upload-time = "2026-05-26T20:40:22.316Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e0/d936e908f0e1efa55e52b91e01b52f1055cef5e1ab2718493390ed8e2fb8/coverage-7.14.1-cp313-cp313t-win_arm64.whl", hash = "sha256:17a5a241e5997621a956a7f402a7433ef4221e5152809b785bec79e2323799f1", size = 222577, upload-time = "2026-05-26T20:40:24.894Z" }, + { url = "https://files.pythonhosted.org/packages/d6/34/fc2f101b151af3799a101f0550b0454aa008afdc0add677394ec4aa8ea10/coverage-7.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d5ed429d0b8edaac649e889b4ffcedb6c80b06629a3f93050e3dddfb99235bee", size = 220091, upload-time = "2026-05-26T20:40:27.249Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a7/1ebae2ab5b961b5c79bb09fe7b3ac99edb190d8be4a8c510b2cf66f46468/coverage-7.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8011224a62280e50dab346960c03cf47aca1a1e09e608c0fb33fd6e0cc8e9500", size = 220421, upload-time = "2026-05-26T20:40:30.084Z" }, + { url = "https://files.pythonhosted.org/packages/5e/90/92aca9cf0acc95123c96cd1eb1f08917897a7f5dee01e15738922971ec31/coverage-7.14.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:12c42ec1e14f553c4f817e989365982e646e27211f10a0f717855b94a79c8906", size = 251466, upload-time = "2026-05-26T20:40:32.542Z" }, + { url = "https://files.pythonhosted.org/packages/26/2b/78048cbe3b999f6cbf9cc0d90abba6a88a3e0863a8c1c6cbc762f3f8802f/coverage-7.14.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:06144cd511cf2624873a035c5069cf297144f6e77a73ee3d7a55b605ec5efb42", size = 253973, upload-time = "2026-05-26T20:40:34.473Z" }, + { url = "https://files.pythonhosted.org/packages/8e/21/c2e33b29d1cfde484a19d437afc343c6cd30b08d78cbbf9f5aff14e57b2b/coverage-7.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a311d8e1da24be5c1ccf85cbfb06315dbaa1703d5a1eab3f6432c72b837917c8", size = 255318, upload-time = "2026-05-26T20:40:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ee/aad2f108d63b769121005302f16bf66db8625c88ceaba466942e09a2607e/coverage-7.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c79cead5b5bc584d9c71451cb984d0e3a84e0c0937379c8efcbf27c8d661b851", size = 257633, upload-time = "2026-05-26T20:40:40.164Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f8/11a2c29b4fd76d9849f81d0bb812ec0017a9396df3217214e38934a8c837/coverage-7.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcbf65f1f66a26cdd88c35cf68fb4729c5d1cd2e88added72420541dfb212034", size = 251488, upload-time = "2026-05-26T20:40:42.631Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b8/9a5820de4b8ac2b71d85e3b5fb49108d7469c665f0e2ad0dd7569023e305/coverage-7.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fd86572566fb40189a8260446158235159bc7a82dfbc87a3b39cf4fb57fcec1c", size = 253329, upload-time = "2026-05-26T20:40:45.208Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ff/f33e4823667e27548e8fd8df44217515303f9808d0ff29817db56f87d990/coverage-7.14.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:7771b601718fdde84832c3a434ca9bbf4ae9adbc49d84198b4110700c3c77c36", size = 251291, upload-time = "2026-05-26T20:40:47.502Z" }, + { url = "https://files.pythonhosted.org/packages/68/9b/489db0ebb209054766b90a9014a45f6d26eb724c02ec21311c3733b5a644/coverage-7.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:39b21e212c55af06fa375e3dbf90a8a8e38792f3a910c580066d23563830ddd5", size = 255564, upload-time = "2026-05-26T20:40:49.372Z" }, + { url = "https://files.pythonhosted.org/packages/27/b5/16bc2d4c2409b23c7737edb68c83bc89e345f378050549fe1d75ac7d34d5/coverage-7.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f2302660e32562a532b442480121aef8aa61a5bdb20b30bf0adab29f10a5a4b4", size = 251107, upload-time = "2026-05-26T20:40:51.677Z" }, + { url = "https://files.pythonhosted.org/packages/7d/0c/2629997469a00cd069d588a41c9dc887610f2775ae89d250c4791e65272a/coverage-7.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:03a6f93c1ec3b7f2e77b5dbcc5573a2c21f12529a5c6bbe0f16f72303cc2fa4d", size = 252764, upload-time = "2026-05-26T20:40:54.267Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ee/f78d63c8f079e0d7211c7e2401fa17e311514534ba61bae03e4b287ce4ab/coverage-7.14.1-cp314-cp314-win32.whl", hash = "sha256:8a3ce026d73290f42f08dafecbd82c193a74df280461fbf97300fec51fd133ee", size = 222837, upload-time = "2026-05-26T20:40:56.496Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b9/be539854f93a70dfbeec69117f33ec70dc42ff0b65b5b07ab8d40d04228e/coverage-7.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:114c95ef29302423b87d159075805f4ab973254a2638a5d7d046c94887cc87d7", size = 223650, upload-time = "2026-05-26T20:40:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9e/24e2842fef40f35ac82ba3a7719c8023d011bf3bf652d0675316a9d088a1/coverage-7.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:a07891c3f4805442b31b71e84ba3cf29ed1aa9a428284e06deeb4b23e5b46343", size = 222218, upload-time = "2026-05-26T20:41:00.321Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1d/ac0a9df5fe31c1e8bdd658074905fc12844a05c1a7e3fdb8417e97c31e23/coverage-7.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1101a5ebb083aecb625ebb6209d4105b58f647b093cb2dc8122d7b33f743cfe1", size = 220822, upload-time = "2026-05-26T20:41:02.281Z" }, + { url = "https://files.pythonhosted.org/packages/32/cf/f964fd9aff20323f9f1a726c97135f8a76bcd87b92dad141a456a43f3c64/coverage-7.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:851b9e1e4e8a4608e77c79714b2e77c0970d2ed7202a05e92ae407817481887b", size = 221084, upload-time = "2026-05-26T20:41:04.593Z" }, + { url = "https://files.pythonhosted.org/packages/d8/5e/7e5ef2aba844de2b80d678619fcf0841b42e3f37f16411226f3fe4c1016f/coverage-7.14.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d5b89cdfb2ee051b71e8c3c70bd81a9eff81100f736a269136fe1a68efe00474", size = 262454, upload-time = "2026-05-26T20:41:06.641Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/75809bded87015cc4935524218a2a8ed8dd1a8498bfed30a2f4f7a4b4d34/coverage-7.14.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0177614a0370f227888b4e436a7c55686d6a9f90eb1ade2b624ba685a1686e86", size = 264578, upload-time = "2026-05-26T20:41:08.556Z" }, + { url = "https://files.pythonhosted.org/packages/f3/42/d33392dc14633525012d2d504fa1a33b05538bf535f5c1d64675e5754b78/coverage-7.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d69af5dea2de76fc485a83032a630523f985198b7e25be901ec60181587b01e", size = 266981, upload-time = "2026-05-26T20:41:10.824Z" }, + { url = "https://files.pythonhosted.org/packages/2a/49/0157c4428c2aca7f1e09d5565930586fd5ae36f1655f08b0daa7cf1fcae1/coverage-7.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35ab22d91de736e8966b980dc355cbcdd2c6dbbcfe275f9a2991bc8a91b3df65", size = 268112, upload-time = "2026-05-26T20:41:12.966Z" }, + { url = "https://files.pythonhosted.org/packages/96/26/86b9ce71f4092b1ed325ce1421698081df1286b833400b6836912834d6e0/coverage-7.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:357d4e32935c36588aaba057d734fa32428c360c9fc2e4442afbf1b646beee6e", size = 261558, upload-time = "2026-05-26T20:41:15Z" }, + { url = "https://files.pythonhosted.org/packages/20/4c/c311210c5472cf5401d8422b0d7812cdd520f24417673afabda6c323faca/coverage-7.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:51bd64741cc6fa065abd300ede1afe5a5291ece9c31da8b24884deda48bcc3f8", size = 264447, upload-time = "2026-05-26T20:41:17.369Z" }, + { url = "https://files.pythonhosted.org/packages/fb/71/59513f8710ed3e6b0ac0a050a5b7e977bb9c9e880354863b5d00d8809256/coverage-7.14.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9132cd363a68a4c3daa7c8704a654b1e39d3360f6f5b8ddd470608a945236c07", size = 262048, upload-time = "2026-05-26T20:41:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/bceed32dc494f5bbf50f775cd2e78ca814953942b5ea28d3c1c3ac316f14/coverage-7.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07c6290b1697b862c0478eab545eec949a0d0e4d6d03497f446d706da3b4f2de", size = 265781, upload-time = "2026-05-26T20:41:21.559Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c5/9348fe40dbfd4991aaf78df2c6c3098bfb2cc834d1fd362a64b4efef855a/coverage-7.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5ea0c297e27133853b4d8a3eb799bff5a2dbd9f2f41537a240d337ac9b4df890", size = 260896, upload-time = "2026-05-26T20:41:23.428Z" }, + { url = "https://files.pythonhosted.org/packages/ca/92/1ea0f03929da7cf87206b1fa24f4c8e9c158be0455481af29ec0a1f3503f/coverage-7.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:01b7733daad0237daa01ef80fe2dfceffc911e6a17fa7b55d14aa8214eaaaecd", size = 263214, upload-time = "2026-05-26T20:41:25.419Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a9/b2493c054c0e01a643266742ab45e15744e60743f9260cd930c7142b1124/coverage-7.14.1-cp314-cp314t-win32.whl", hash = "sha256:6adc5a36984624a70bf11d7184e20fa0a49aa7c47ffab43804106a1a695ea22e", size = 223624, upload-time = "2026-05-26T20:41:27.795Z" }, + { url = "https://files.pythonhosted.org/packages/fc/bd/3e1e6a57fccd2d7c83fcdf338e93ba98eb85c6e877dd34731ac585375490/coverage-7.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ddf799247318f34dbcd2efa8c95a8d0642674e926bb1774cf9b63dfd2a389d1c", size = 224728, upload-time = "2026-05-26T20:41:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d7/31066cf1d2f0c6c797fce911bcfa01dd35642dc6da992a950256097c5860/coverage-7.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:145986fe66647eb489f18d9a997567a3fd358584c4b5a808769113abc07466af", size = 222752, upload-time = "2026-05-26T20:41:32.123Z" }, + { url = "https://files.pythonhosted.org/packages/8a/3c/1a983b9a745d7f83d53f057bcc5bf79ba6a2bbc08266b3f0c7d6fe630c9b/coverage-7.14.1-py3-none-any.whl", hash = "sha256:a252f21c27e38347e60111a3266b03827422a7d5525951aceee313aa68bab1d2", size = 211815, upload-time = "2026-05-26T20:41:34.078Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] + +[[package]] +name = "cryptography" +version = "48.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "(python_full_version < '3.11' and platform_python_implementation != 'PyPy' and sys_platform == 'emscripten') or (python_full_version < '3.11' and platform_python_implementation != 'PyPy' and sys_platform == 'win32') or (python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version >= '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version >= '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version >= '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (platform_python_implementation != 'PyPy' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32') or (platform_python_implementation != 'PyPy' and sys_platform == 'darwin' and extra != 'extra-13-torchpfaffian-cpu') or (platform_python_implementation == 'PyPy' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (platform_python_implementation == 'PyPy' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (platform_python_implementation == 'PyPy' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform != 'darwin') or (python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/bc/ee4137cbbe105652c0ee4252792b78fc8e7afa4b8e61d9d5dc05a7f45731/cryptography-48.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1", size = 8008324, upload-time = "2026-06-09T22:31:00.702Z" }, + { url = "https://files.pythonhosted.org/packages/d5/85/6379d42181bfc713094f081360fc5784d6c816b599d45e7f082502d173ce/cryptography-48.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225", size = 4696243, upload-time = "2026-06-09T22:32:33.446Z" }, + { url = "https://files.pythonhosted.org/packages/9c/87/c85d147b53323c7eb4d850920c8901377323c2a0ff8d79c262d4fee89aa2/cryptography-48.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691", size = 4713235, upload-time = "2026-06-09T22:31:40.141Z" }, + { url = "https://files.pythonhosted.org/packages/79/58/67cbf8cf1ee7c54b439ca07bbecf8362c07afc11a3724fea70f745784add/cryptography-48.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242", size = 4702323, upload-time = "2026-06-09T22:31:42.191Z" }, + { url = "https://files.pythonhosted.org/packages/89/c6/24266ac10c47f6cd2a865f4446062b466da1d1f10b27189eac00e61bf0c9/cryptography-48.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08", size = 5300085, upload-time = "2026-06-09T22:31:58.703Z" }, + { url = "https://files.pythonhosted.org/packages/d2/bb/cc4b78784f97efc8c5874c2a9743708d172be6663024b34a0467885ae0c8/cryptography-48.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6", size = 4746137, upload-time = "2026-06-09T22:31:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/1f/52/0c44de3f5267f8fbe8e835138017522a333436166e406f0db9b9e6e3033f/cryptography-48.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8", size = 4333867, upload-time = "2026-06-09T22:32:28.096Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2e/772d7adbfa931537bc401640b7cac9976bff689bda187833e5d63b428e49/cryptography-48.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429", size = 4701805, upload-time = "2026-06-09T22:31:38.284Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a3/b06844f303873493c963caf581c04df31c7035e0c1b0f02c4814d319ec80/cryptography-48.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f", size = 5258461, upload-time = "2026-06-09T22:31:04.187Z" }, + { url = "https://files.pythonhosted.org/packages/9f/13/8b765e2e12b07c74941caadb9d1c8fdc006c4dfbf2b8f2d610519758954d/cryptography-48.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f", size = 4745488, upload-time = "2026-06-09T22:32:30.07Z" }, + { url = "https://files.pythonhosted.org/packages/2e/aa/48972bce55049b32a94f4907eda4d75fa385aad8a39506cc2fc72196ecf0/cryptography-48.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41", size = 4830256, upload-time = "2026-06-09T22:31:43.868Z" }, + { url = "https://files.pythonhosted.org/packages/47/a2/e5079a032fb85cf6005046ca92bbd78b0c82dad2b5751ab8c311659da06f/cryptography-48.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6", size = 4979117, upload-time = "2026-06-09T22:31:05.845Z" }, + { url = "https://files.pythonhosted.org/packages/b7/a0/8f50cae9c74e718ed769d63ed5c74bd0ea830c9550a74629cebd1b9c7bc7/cryptography-48.0.1-cp311-abi3-win32.whl", hash = "sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158", size = 3304154, upload-time = "2026-06-09T22:32:16.845Z" }, + { url = "https://files.pythonhosted.org/packages/c5/69/0572c77dbace6fef72f33755bd52ea399c71367250d366237f8691826b9e/cryptography-48.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24", size = 3817138, upload-time = "2026-06-09T22:32:00.388Z" }, + { url = "https://files.pythonhosted.org/packages/42/06/3e768b4c3bc78201583fa35a0e18f640dd782ff41afba88f8545481a8874/cryptography-48.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:f817adc181390bd54f2f700107a7419040fb7c1bdf2fc26f36551a06a68c3345", size = 7989830, upload-time = "2026-06-09T22:31:07.8Z" }, + { url = "https://files.pythonhosted.org/packages/8a/13/6476736484b94041110c8340a3eb63962fea4975baea8cb4a512adb44d4d/cryptography-48.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d5d30989c6917b478b5817902e85fddaea2261efa8648383d965381ccb9e1ac4", size = 4689201, upload-time = "2026-06-09T22:31:09.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/62/65a87f34d2a431546e2509b85d55e8c90df86d668f6731da64d538512ac2/cryptography-48.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df637c05205ea7c1d7fbcbe54bbfea648a52951155f997af13d895d0ecc96991", size = 4702822, upload-time = "2026-06-09T22:32:24.409Z" }, + { url = "https://files.pythonhosted.org/packages/7f/59/810b5204b0a9b10f4b6bc06bd551a8b609803cd931806bc3b71884b225e5/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:869c3b8a53bfe27147832df48b32adadf558249d50e76cb3769d40e986b13265", size = 4694875, upload-time = "2026-06-09T22:32:08.737Z" }, + { url = "https://files.pythonhosted.org/packages/24/dc/d8ca05ffea724eec6d232ea6f18e74c269eb6bdfdcc9bfba689790d1325f/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:e361afba8918070d376df76f408a4f67fec0ee9cff81a99e48fe9a233ef59e17", size = 5290385, upload-time = "2026-06-09T22:31:15.212Z" }, + { url = "https://files.pythonhosted.org/packages/03/8c/3be6cb4da181f5bb6c19cf560c2359d60644a6b5fc5b57854e528f47b296/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d069066deead00ac7f090be101be875a06855908f7ec004c27b8fefb4acfb411", size = 4737082, upload-time = "2026-06-09T22:32:22.66Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f6/d5f60a5a1434dbfd949e227fd0065d194c7e6b6ac526b17f5c06152b8231/cryptography-48.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:09f73a725d582cef64b91281a322cd798d14a33b2b6f2b7ad9531dc336d84c02", size = 4325328, upload-time = "2026-06-09T22:32:10.777Z" }, + { url = "https://files.pythonhosted.org/packages/17/b7/ba75dd947a14b6ad907b01ae8f6b5b348cdd1b48142f0063dee9e20c1d9d/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:15254441469dd6bf027039453288e2072124f8b6603563f5d759e1c9b69273fa", size = 4694530, upload-time = "2026-06-09T22:31:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/29/50d6b9e8aff12d8b67afaeb3569335e32dc83a5723e3bbded24fdac9f809/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:8ace4507d1e6533c125f4fac754f8bb8b6a74c08e92179dabd7e16571a3efbf3", size = 5245046, upload-time = "2026-06-09T22:31:25.774Z" }, + { url = "https://files.pythonhosted.org/packages/9f/04/618f4115cfc0add0838c82507aa18a346089428da8653ad38b3ff36f5cb3/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:b4e391975f038e66432328639620a4aff2d307513b004f1ca06d6225bced815c", size = 4736660, upload-time = "2026-06-09T22:32:12.676Z" }, + { url = "https://files.pythonhosted.org/packages/24/9c/06e062462a0de28a3b3911322eded4c16deb9f441b1b7575d3dc59488ab5/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42fcd8e26fe555d9b3577a135f5091fefa0aa4e99129c23fb56787a1bd4ada72", size = 4822229, upload-time = "2026-06-09T22:31:17.062Z" }, + { url = "https://files.pythonhosted.org/packages/f4/be/0561971eaaee4b8a0e7d5113c536921063ab91aaf23278ac374eaf881e11/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1400da5e32a43253392277eac7490a60e497d810a63dd5608d71bbd7af507c9", size = 4966364, upload-time = "2026-06-09T22:31:32.842Z" }, + { url = "https://files.pythonhosted.org/packages/a4/27/728c77876f12b000820b69ae490f3c4083775e79e07827e9e60be07ad209/cryptography-48.0.1-cp314-cp314t-win32.whl", hash = "sha256:0df56b056bc17c1b7d6821dfa65216e62bd232d8ab05eb3db44e71d235651471", size = 3278498, upload-time = "2026-06-09T22:31:29.154Z" }, + { url = "https://files.pythonhosted.org/packages/06/e3/79a612c6d7b1e6ee0edd43633d53035bec2cfb78c82b76f7864f39e36f34/cryptography-48.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9de21387aa95e2a895823d0745b430bed4f33503ba9ab5e0b5311f33e37d66d2", size = 3798790, upload-time = "2026-06-09T22:31:56.697Z" }, + { url = "https://files.pythonhosted.org/packages/ca/6c/00fa2a95997164c8b2072ce327c23d4ab20809ccc323ea5fab91e53a4bba/cryptography-48.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67", size = 7987408, upload-time = "2026-06-09T22:32:20.777Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d9/45f309a7e4e5f3f8f121d6d3be9e94024a7726ec598d6e08ae04edb2f04d/cryptography-48.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8", size = 4690196, upload-time = "2026-06-09T22:31:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9f/a1bc8bcc798811b8527eb374bbccf30a3f3e806829d967118222bf1125eb/cryptography-48.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a", size = 4696782, upload-time = "2026-06-09T22:31:45.615Z" }, + { url = "https://files.pythonhosted.org/packages/66/c2/81a4fb4e4373c500bb526bc337ac5719dd31dd15b970b84a238168c6aa08/cryptography-48.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577", size = 4696618, upload-time = "2026-06-09T22:31:11.564Z" }, + { url = "https://files.pythonhosted.org/packages/e5/0b/aa68b221dde92d09cb29a024ede17550ee21e77a404e59fc093c82bb51e1/cryptography-48.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1", size = 5289970, upload-time = "2026-06-09T22:31:20.368Z" }, + { url = "https://files.pythonhosted.org/packages/78/13/fba657f958d2af66ea959a4ba01212632089249d34af1ae48054136344d7/cryptography-48.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d", size = 4731873, upload-time = "2026-06-09T22:31:22.253Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4c/9a964756d24a26b3e34dfcb16f961b89838786e6700b635b0d1e3adff4b6/cryptography-48.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6", size = 4330804, upload-time = "2026-06-09T22:31:36.56Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0f/a10f3a6eb12950a10e3a874070283aa2dd5875b2bfd15fad8a3e17b3f13e/cryptography-48.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46", size = 4696217, upload-time = "2026-06-09T22:31:13.351Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6f/5cd12f951165ea73ef85266775d97e4c763b2474ccfd816dd69d3a18d6f8/cryptography-48.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401", size = 5245252, upload-time = "2026-06-09T22:32:02.193Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/8aaa12e4516ec4464033ab79b6f3b592bd5a92102467c4ace8a0d970203f/cryptography-48.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b", size = 4731388, upload-time = "2026-06-09T22:32:04.019Z" }, + { url = "https://files.pythonhosted.org/packages/1b/24/50027ea4dca85ec1f40688f3c24fb32ccacd520583c9592c3cc95628e6fb/cryptography-48.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1", size = 4824186, upload-time = "2026-06-09T22:32:18.707Z" }, + { url = "https://files.pythonhosted.org/packages/52/41/04cb5eb17085ade6f50cc611fb657df6a0f5885350de8764ece89c050197/cryptography-48.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475", size = 4964539, upload-time = "2026-06-09T22:31:18.793Z" }, + { url = "https://files.pythonhosted.org/packages/36/bf/ed70785c496e89d7e73b7cda2d21f2447fd6d4e821714b8d04ff217fed92/cryptography-48.0.1-cp39-abi3-win32.whl", hash = "sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1", size = 3282307, upload-time = "2026-06-09T22:30:53.162Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ff/371ea7d252656ee1eb6d83eeeef3d1d0c6baf1d6497687d081ea03814670/cryptography-48.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac", size = 3793408, upload-time = "2026-06-09T22:32:15.191Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d3/eb4e394e587341fdad09a09101fa76478ead3a78b0ad63e55c22f0d75c02/cryptography-48.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:08a597acce1ff37f347400087776599e2348a3a8bc53b44120e463cd274efe4a", size = 3951747, upload-time = "2026-06-09T22:31:23.871Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4a/3f43451b4f858bfceaaaffc649e6e787e8d4fb332a1d443af39ab02cc8f1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:735824ec41b7f74a7c45fb1591349333e4c696cb6c044e5f46356e560143e4cd", size = 4641226, upload-time = "2026-06-09T22:31:02.532Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/855584c2c23b09e4ce2d3b9c30e983e679cd60b068c513c6bbdb91e11782/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:92a46e1d638daa264ba2971c0b0489c9409787943efae4d60ffda3d091ef832c", size = 4668958, upload-time = "2026-06-09T22:32:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/42/3b/d35750e41d803d1e516fd6d6011f065424924da7af1748cef4cc9cb3ede1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:7e234ac052af99f2700826a5c29ea99d9c1b1f80341cde62d11c8154dc8e0bd9", size = 4640793, upload-time = "2026-06-09T22:32:26.331Z" }, + { url = "https://files.pythonhosted.org/packages/ca/aa/cdb7181fe865285e87e96825aaab239400f1de0c3bfba9bd9769b79f1a92/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:33842cf0888951cef5bc7ac724ab844a42044c1727b967b7f8997289a0464f92", size = 4668505, upload-time = "2026-06-09T22:31:27.534Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8c/ce3823c06c2804f194f9e64f0d67fa3f4094a39f2bb1a990cd03603af8fc/cryptography-48.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6184ca7b174f28d7c703f1290d4b297217c45355f77a98f67e9b7f14549ac54a", size = 3742204, upload-time = "2026-06-09T22:31:34.773Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "12.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/31/bfcc870f69c6a017c4ad5c42316207fc7551940db6f3639aa4466ec5faf3/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a022c96b8bd847e8dc0675523431149a4c3e872f440e3002213dbb9e08f0331a", size = 11800959, upload-time = "2025-10-21T14:51:26.458Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d8/b546104b8da3f562c1ff8ab36d130c8fe1dd6a045ced80b4f6ad74f7d4e1/cuda_bindings-12.9.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d3c842c2a4303b2a580fe955018e31aea30278be19795ae05226235268032e5", size = 12148218, upload-time = "2025-10-21T14:51:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1e/9c8ed3f3dbed7b7d038805fdc65cbc65fda9983e84437778a9571e7092bc/cuda_bindings-12.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:f69107389e6b9948969bfd0a20c4f571fd1aefcfb1d2e1b72cc8ba5ecb7918ab", size = 11464568, upload-time = "2025-10-21T14:51:31.454Z" }, + { url = "https://files.pythonhosted.org/packages/a9/2b/ebcbb60aa6dba830474cd360c42e10282f7a343c0a1f58d24fbd3b7c2d77/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6a429dc6c13148ff1e27c44f40a3dd23203823e637b87fd0854205195988306", size = 11840604, upload-time = "2025-10-21T14:51:34.565Z" }, + { url = "https://files.pythonhosted.org/packages/45/e7/b47792cc2d01c7e1d37c32402182524774dadd2d26339bd224e0e913832e/cuda_bindings-12.9.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c912a3d9e6b6651853eed8eed96d6800d69c08e94052c292fec3f282c5a817c9", size = 12210593, upload-time = "2025-10-21T14:51:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/dd/be/90d32049e06abcfba4b2e7df1dbcb5e16215c8852eef0cd8b25f38a66bd4/cuda_bindings-12.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:443b0875916879c2e4c3722941e25e42d5ab9bcbf34c9e83404fb100fa1f6913", size = 11490933, upload-time = "2025-10-21T14:51:38.792Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c2/65bfd79292b8ff18be4dd7f7442cea37bcbc1a228c1886f1dea515c45b67/cuda_bindings-12.9.4-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:694ba35023846625ef471257e6b5a4bc8af690f961d197d77d34b1d1db393f56", size = 11760260, upload-time = "2025-10-21T14:51:40.79Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c1/dabe88f52c3e3760d861401bb994df08f672ec893b8f7592dc91626adcf3/cuda_bindings-12.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fda147a344e8eaeca0c6ff113d2851ffca8f7dfc0a6c932374ee5c47caa649c8", size = 12151019, upload-time = "2025-10-21T14:51:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/df/6b/9c1b1a6c01392bfdd758e9486f52a1a72bc8f49e98f9355774ef98b5fb4e/cuda_bindings-12.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:696ca75d249ddf287d01b9a698b8e2d8a05046495a9c051ca15659dc52d17615", size = 11586961, upload-time = "2025-10-21T14:51:45.394Z" }, + { url = "https://files.pythonhosted.org/packages/05/8b/b4b2d1c7775fa403b64333e720cfcfccef8dcb9cdeb99947061ca5a77628/cuda_bindings-12.9.4-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf8bfaedc238f3b115d957d1fd6562b7e8435ba57f6d0e2f87d0e7149ccb2da5", size = 11570071, upload-time = "2025-10-21T14:51:47.472Z" }, + { url = "https://files.pythonhosted.org/packages/63/56/e465c31dc9111be3441a9ba7df1941fe98f4aa6e71e8788a3fb4534ce24d/cuda_bindings-12.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:32bdc5a76906be4c61eb98f546a6786c5773a881f3b166486449b5d141e4a39f", size = 11906628, upload-time = "2025-10-21T14:51:49.905Z" }, + { url = "https://files.pythonhosted.org/packages/05/d0/d0e4e2e047d8e899f023fa15ad5e9894ce951253f4c894f1cd68490fdb14/cuda_bindings-12.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:a2e82c8985948f953c2be51df45c3fe11c812a928fca525154fb9503190b3e64", size = 11556719, upload-time = "2025-10-21T14:51:52.248Z" }, + { url = "https://files.pythonhosted.org/packages/ec/07/6aff13bc1e977e35aaa6b22f52b172e2890c608c6db22438cf7ed2bf43a6/cuda_bindings-12.9.4-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3adf4958dcf68ae7801a59b73fb00a8b37f8d0595060d66ceae111b1002de38d", size = 11566797, upload-time = "2025-10-21T14:51:54.581Z" }, + { url = "https://files.pythonhosted.org/packages/a3/84/1e6be415e37478070aeeee5884c2022713c1ecc735e6d82d744de0252eee/cuda_bindings-12.9.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56e0043c457a99ac473ddc926fe0dc4046694d99caef633e92601ab52cbe17eb", size = 11925991, upload-time = "2025-10-21T14:51:56.535Z" }, + { url = "https://files.pythonhosted.org/packages/4d/3c/972edfddb4ae8a9fccd3c3766ed47453b6f805b6026b32f10209dd4b8ad4/cuda_bindings-12.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b32d8b685f0e66f5658bcf4601ef034e89fc2843582886f0a58784a4302da06c", size = 11894363, upload-time = "2025-10-21T14:51:58.633Z" }, + { url = "https://files.pythonhosted.org/packages/1e/b5/96a6696e20c4ffd2b327f54c7d0fde2259bdb998d045c25d5dedbbe30290/cuda_bindings-12.9.4-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f53a7f453d4b2643d8663d036bafe29b5ba89eb904c133180f295df6dc151e5", size = 11624530, upload-time = "2025-10-21T14:52:01.539Z" }, + { url = "https://files.pythonhosted.org/packages/d1/af/6dfd8f2ed90b1d4719bc053ff8940e494640fe4212dc3dd72f383e4992da/cuda_bindings-12.9.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b72ee72a9cc1b531db31eebaaee5c69a8ec3500e32c6933f2d3b15297b53686", size = 11922703, upload-time = "2025-10-21T14:52:03.585Z" }, + { url = "https://files.pythonhosted.org/packages/e6/87/652796522cc1a7af559460e1ce59b642e05c1468b9c08522a9a096b4cf04/cuda_bindings-12.9.4-cp314-cp314-win_amd64.whl", hash = "sha256:53a10c71fdbdb743e0268d07964e5a996dd00b4e43831cbfce9804515d97d575", size = 11517716, upload-time = "2025-10-21T14:52:06.013Z" }, + { url = "https://files.pythonhosted.org/packages/39/73/d2fc40c043bac699c3880bf88d3cebe9d88410cd043795382826c93a89f0/cuda_bindings-12.9.4-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20f2699d61d724de3eb3f3369d57e2b245f93085cab44fd37c3bea036cea1a6f", size = 11565056, upload-time = "2025-10-21T14:52:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/6c/19/90ac264acc00f6df8a49378eedec9fd2db3061bf9263bf9f39fd3d8377c3/cuda_bindings-12.9.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d80bffc357df9988dca279734bc9674c3934a654cab10cadeed27ce17d8635ee", size = 11924658, upload-time = "2025-10-21T14:52:10.411Z" }, + { url = "https://files.pythonhosted.org/packages/ab/52/a30f46e822bfa6b4a659d1e8de8c4a4adf908ea075dac568b55362541bd8/cuda_bindings-12.9.4-cp314-cp314t-win_amd64.whl", hash = "sha256:53e11991a92ff6f26a0c8a98554cd5d6721c308a6b7bfb08bebac9201e039e43", size = 12055608, upload-time = "2025-10-21T14:52:12.335Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-pathfinder", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/98/0666ee759cd2e5306f911cbc95d2c6c814326906ed6b9c09e817a4b4a7c8/cuda_bindings-13.0.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56e46a9e984bb754e56b9d060cf027fe99f08a97651ce6d8aa1c2032476d01e", size = 11762523, upload-time = "2025-10-21T15:08:45.913Z" }, + { url = "https://files.pythonhosted.org/packages/e1/36/2b2a43c8a6f8d8ff7a5ec7de1357ba3f1438ea69281c9deb90df29d55d56/cuda_bindings-13.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f797ce534a303525259be0ae7ee9cfcf4f7874b22f1f9b8e85555509dccb83", size = 12136098, upload-time = "2025-10-21T15:08:48.233Z" }, + { url = "https://files.pythonhosted.org/packages/47/67/5de1d48189511114859a1a131193896f88271c067a64b1159787e2d9f89b/cuda_bindings-13.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:74307cea1feee6c32a6e27b42e77beb22cd21cff4b7764fd214fa6ff89f8bd69", size = 11106982, upload-time = "2025-10-21T15:08:50.433Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/9e171ee6359d4aabf2d8202802c85487cae6c2eb52b9352bb7754583802f/cuda_bindings-13.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfd66c25a133365c4f93e3396c38c64b04400ccafd18c3a889ae251a1bfabaa1", size = 11807212, upload-time = "2025-10-21T15:08:52.988Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/d7036d9e402e6b5b57877a7496aba3bf2a0090f4fa3f072743fce3373eba/cuda_bindings-13.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9afede5937474864aa794eb57399dbdf5d2b05427aadcac275209b0857528a61", size = 12198791, upload-time = "2025-10-21T15:08:55.687Z" }, + { url = "https://files.pythonhosted.org/packages/83/25/620ce2afb6ea6d5da89d98375c85641f691924eef574247f7f0dd99f8bee/cuda_bindings-13.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:fce6d6b162457475b35e1a259ab643e683d1d20a84459fea898782e2f1e10a3b", size = 11138783, upload-time = "2025-10-21T15:08:57.741Z" }, + { url = "https://files.pythonhosted.org/packages/61/3c/c33fd3aa5fcc89aa1c135e477a0561f29142ab5fe028ca425fc87f7f0a74/cuda_bindings-13.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b899e5a513c11eaa18648f9bf5265d8de2a93f76ef66a6bfca0a2887303965cd", size = 11709086, upload-time = "2025-10-21T15:09:00.005Z" }, + { url = "https://files.pythonhosted.org/packages/21/ac/6b34452a3836c9fbabcd360689a353409d15f500dd9d9ced7f837549e383/cuda_bindings-13.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf41d9e69019939aa15296fa66ea7d3fdb8d2c6383f729f4b1156c8b37808a06", size = 12128303, upload-time = "2025-10-21T15:09:02.889Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/ad9cc2f0496886c37aefbc00256197a6043a3f04bbe959481e6908310afe/cuda_bindings-13.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6b12ccd98f447aea9589d32caf9efda0c193994080752a60f790b646d519fe8c", size = 11237397, upload-time = "2025-10-21T15:09:05.421Z" }, + { url = "https://files.pythonhosted.org/packages/2f/36/41ccc303eb6be8ae82c5edd2ccae938876e8a794660e8bb96a193174a978/cuda_bindings-13.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb16a7f769c9c67469add7a1d9f6c14dd44637f6921cb6b9eb82cb5015b35c3d", size = 11537064, upload-time = "2025-10-21T15:09:07.84Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ac/699889100536f1b63779646291e74eefa818087a0974eb271314d850f5dc/cuda_bindings-13.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:512d0d803a5e47a8a42d5a34ce0932802bf72fe952fdb11ac798715a35c6e5cb", size = 11910447, upload-time = "2025-10-21T15:09:09.942Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f9/a2f5910aaf21f4cd43f456ea80f47f1424eece5b8f063dac1980304b8ef0/cuda_bindings-13.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:dd83e8d79587e265b82d3e589ba6b061770537443dfb1bb4a74f755c8b13f62b", size = 11211659, upload-time = "2025-10-21T15:09:12.639Z" }, + { url = "https://files.pythonhosted.org/packages/11/67/9656e003f18c5b32e1a2496998b24f4355ec978c5f3639b0eb9f6d0ff83f/cuda_bindings-13.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c859e326c776a47e66c50386a10c84fe34291eb6e711610c9fd7cc27d446334f", size = 11522409, upload-time = "2025-10-21T15:09:14.674Z" }, + { url = "https://files.pythonhosted.org/packages/18/d8/a83379caa7c1bed4195e704c24467a6c07fe8e29c7055ccd4f00c5702363/cuda_bindings-13.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e675dbd009fb5e66d63fd13a8ff35f849120f01bcc4dafadbced3004605c3588", size = 11903148, upload-time = "2025-10-21T15:09:16.918Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e0/ff1eeda06364df8c750843432ac6efb33a06df38261f0a1ceee59bb7dac2/cuda_bindings-13.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:193762306b6032c00a141fc38bcef92c6fb4d332fd2d6a550c7f950e7fd8acd8", size = 11543153, upload-time = "2025-10-21T15:09:19.252Z" }, + { url = "https://files.pythonhosted.org/packages/e8/99/0042dc5e98e3364480b1aaabc0f5c150d037825b264bba35ac7a883e46ee/cuda_bindings-13.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c7e6e89cdfc9b34f16a065cc6ad6c4bab19ce5dcef8da3ace8ad10bda899fa0", size = 11594384, upload-time = "2025-10-21T15:09:21.938Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c4/a931a90ce763bd7d587e18e73e4ce246b8547c78247c4f50ee24efc0e984/cuda_bindings-13.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e93866465e7ff4b7ebdf711cf9cd680499cd875f992058c68be08d4775ac233d", size = 11920899, upload-time = "2025-10-21T15:09:26.306Z" }, + { url = "https://files.pythonhosted.org/packages/14/3e/5725b2e5b9ac22bf19a50ec5f7611301ab6111c98ccf1b6b125fdaa71550/cuda_bindings-13.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bd2364bc49925837ce18dda259c3a36e539977ca0297799a54891cae1d5213f5", size = 11160621, upload-time = "2025-10-21T15:09:28.7Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/ec611e27ba48a9056f3b0610c5e27727e539f3905356cfe07acea18e772c/cuda_bindings-13.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed06ef3507bd0aefb0da367e3d15676a8c7443bd68a88f298562d60b41078c20", size = 11521928, upload-time = "2025-10-21T15:09:30.714Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2e/02cebf281ef5201b6bb9ea193b1a4d26e6233c46571cfb04c4a7dede12b9/cuda_bindings-13.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ab845487ca2c14accdcb393a559a3070469ea4b591d05e6ef439471f47f3e24", size = 11902749, upload-time = "2025-10-21T15:09:32.688Z" }, + { url = "https://files.pythonhosted.org/packages/36/d2/088c28751f54df7a251259ef3f99d34c428e12653f15db02fd62a96247af/cuda_bindings-13.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:aaa0934e16aa20ec10fbb1ecc53a6961b8d1c06a970fe05cc6ee7d2a805a090f", size = 11697137, upload-time = "2025-10-21T15:09:35.232Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c8/26f2e4aae92f11522a96043892ba39a90eac610d5242523aa863212bc1c7/cuda_pathfinder-1.5.5-py3-none-any.whl", hash = "sha256:0228c023f95d1480f143ef5c8922d27a2ab052087a942e81dc289c9eb8f91689", size = 51671, upload-time = "2026-05-27T01:21:25.413Z" }, +] + +[[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 = "debugpy" +version = "1.8.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/f3/6b1d4c71f4cbb5360009f928934a03b42906f28fc7b3f7f35f04e58acead/debugpy-1.8.21-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:8eeab7b5462f683452c57c0126aaa5ec4e974ddb705f39ba87dff8818c8e08f9", size = 2113873, upload-time = "2026-06-01T19:30:37.148Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f2/17c3bf91cebc173bfbf5734cd2669723d0a35c0cf9d2fd2124546efeae83/debugpy-1.8.21-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:0fddfdc130ac6d8bfc0415b0409822fa901c8f310e5c945ac5653a0352532344", size = 3004715, upload-time = "2026-06-01T19:30:38.888Z" }, + { url = "https://files.pythonhosted.org/packages/5a/22/1f8efd80c7b5909e760f9cfd0c9e8681d2d35d532f7c0a40760cd4da4a19/debugpy-1.8.21-cp310-cp310-win32.whl", hash = "sha256:72b5d676c4cbfac3bac5bb01c138a4656e843f93f03ce2a5f4e394ad49fbee73", size = 5303455, upload-time = "2026-06-01T19:30:40.52Z" }, + { url = "https://files.pythonhosted.org/packages/da/ce/54c79abd6cccef92fa7b43d97e3acafedf4d645557267ece05e948b5e4b8/debugpy-1.8.21-cp310-cp310-win_amd64.whl", hash = "sha256:a7fe47fd23da57b9e0bec3f4a8ee65a2dc55782455ed7f2141d75ab5d2eaeef5", size = 5331751, upload-time = "2026-06-01T19:30:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/cbf306d6e07a313a91e7171a98669054502840931432c227cfd505ee367f/debugpy-1.8.21-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:da456226c7b4c69e35dbe35dcee6623d912000a77816db7856a41af1c72a0264", size = 2203120, upload-time = "2026-06-01T19:30:43.964Z" }, + { url = "https://files.pythonhosted.org/packages/aa/57/aa739bd4ad2cbf96aeb1b20b56918ddd5ae4c28b68709bfcd327f02123ee/debugpy-1.8.21-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:f68b891688e61bdc08b8d364d919ff0051e0b94657b39dcd027bc3173edb7cdc", size = 3059958, upload-time = "2026-06-01T19:30:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/a8/31/453d2c9a23d133fe2c8ec7ca1d816ded52a913487fe3ffef7c01b4b706af/debugpy-1.8.21-cp311-cp311-win32.whl", hash = "sha256:f843a8b08c2edeaf9b1582eed4f25441af21a297c22ff16bf76a662557aa9c9e", size = 5236515, upload-time = "2026-06-01T19:30:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/60/94/6660de2f2d7bf388f229335ba4637646eebabdbf38564cb439a95a9193c9/debugpy-1.8.21-cp311-cp311-win_amd64.whl", hash = "sha256:84c564d8cc701d41843b29a92814c1f1bef6798724ca9d675c284ad9f6a547d7", size = 5256138, upload-time = "2026-06-01T19:30:49.113Z" }, + { url = "https://files.pythonhosted.org/packages/a2/df/bf625547431a9cadc9f4cbfeda38866e2b17f6aed147b625377e87834449/debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e", size = 2483609, upload-time = "2026-06-01T19:30:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/59324b903599031ff9faaec1758292409f6561a0ec2492fe4b703327705a/debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176", size = 3968900, upload-time = "2026-06-01T19:30:52.341Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/27f65b805d7fe005c44e1a36b9183ecdfbcdbf9d3e721a5115d461ecc7ee/debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9", size = 5336340, upload-time = "2026-06-01T19:30:54.047Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/c84e30c0c674184948b66f076ab271c01d940618a2824c23cd035a27bc20/debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c", size = 5374751, upload-time = "2026-06-01T19:30:55.891Z" }, + { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" }, + { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" }, + { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3d/f4bbb323a548bfab2af3d6b4ffd9bf22636e55956a1285d317a1de643aad/debugpy-1.8.21-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9bb2a685287a2ac9b181cde89edcec64845cb51de7faaa75badb9a698bc24782", size = 2477209, upload-time = "2026-06-01T19:31:04.157Z" }, + { url = "https://files.pythonhosted.org/packages/8c/2d/6e7ec524984a1702777868de49a4c53202bddac2a432a76a093469587750/debugpy-1.8.21-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3d6922439bf33fd38a3e2c447869ebc7b97da5cd3d329ff1ef9bc06c4903437e", size = 3927115, upload-time = "2026-06-01T19:31:05.863Z" }, + { url = "https://files.pythonhosted.org/packages/97/47/d1aa6d64005a98a9144647d99306b419396f9ad7bf1d73c119e17a81fb4d/debugpy-1.8.21-cp314-cp314-win32.whl", hash = "sha256:15d4963bd5ffa48f0da0947fd06757fa7621945048a14ad7705431566d3c0e7c", size = 5336724, upload-time = "2026-06-01T19:31:07.711Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/b905b90d163af11878c1af8abafa4a25206335e112e284e413454543a6da/debugpy-1.8.21-cp314-cp314-win_amd64.whl", hash = "sha256:fe0744a12353406de0ae8ccff0d0a4a666f00801a3db8fd04e7a5f761cd520e8", size = 5373803, upload-time = "2026-06-01T19:31:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/8d/873e9252ea2c0e0c857884e0a2899ec43ade132345df1925ef24cbe64f18/distlib-0.4.2.tar.gz", hash = "sha256:baeb401c90f27acd15c4861ae0847d1e731c27ac3dbf4210643ba61fa1e813db", size = 614914, upload-time = "2026-06-08T16:24:15.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/60/aa891c893821d4d127292ed66c6940d1d715894bd5a0ce048056bc641773/distlib-0.4.2-py2.py3-none-any.whl", hash = "sha256:ca4cb11e5d746b5ec13c199cbf19ae27a241f89702b54e153a74332955446067", size = 470510, upload-time = "2026-06-08T16:24:13.208Z" }, +] + +[[package]] +name = "docutils" +version = "0.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/330ea8d383eb2ce973df34d1239b3b21e91cd8c865d21ff82902d952f91f/docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", size = 2056383, upload-time = "2022-07-05T20:17:31.045Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/69/e391bd51bc08ed9141ecd899a0ddb61ab6465309f1eb470905c0c8868081/docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc", size = 570472, upload-time = "2022-07-05T20:17:26.388Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "execnet" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fastjsonschema" +version = "2.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.29.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/f9/f38573ed5844586db374d085911740a501ccfa373b455fc9413f09f85237/filelock-3.29.1.tar.gz", hash = "sha256:d97e6b1b9757569626c58caa07dc4beb1613f4a2938b1e8cc81afca398906c9e", size = 59335, upload-time = "2026-06-03T15:19:04.053Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/a0/614c5fe402fd88951df45f4dda2fa3b4e17a99ecd92340771929169b3b95/filelock-3.29.1-py3-none-any.whl", hash = "sha256:85199dfd706869641b72b2e8955d5416a4b2b7dc4b0e8e6d97b4cc1299a6983b", size = 40750, upload-time = "2026-06-03T15:19:02.959Z" }, +] + +[[package]] +name = "fonttools" +version = "4.63.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/c9/4141c90a90db20f807c7e10bfd689fe53eb8f7f4caff58ee4d4dfe46919f/fonttools-4.63.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b", size = 2884632, upload-time = "2026-05-14T12:02:38.56Z" }, + { url = "https://files.pythonhosted.org/packages/b8/46/ad12b5c10eae602d7ef814b02afa08aacbf89da917fed5b071282b7eadc2/fonttools-4.63.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94", size = 2429441, upload-time = "2026-05-14T12:02:41.162Z" }, + { url = "https://files.pythonhosted.org/packages/90/8f/bdca24a84c81d56fffed052229cdcff368f6e05882e526f4558891481f65/fonttools-4.63.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579", size = 4946346, upload-time = "2026-05-14T12:02:43.41Z" }, + { url = "https://files.pythonhosted.org/packages/04/59/a639c0e136441ee91a65b56fdf89e5d075927e7a09c559d1b0f5276577db/fonttools-4.63.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22", size = 4903184, upload-time = "2026-05-14T12:02:45.742Z" }, + { url = "https://files.pythonhosted.org/packages/e6/53/91b7e0cb45b536f3da1b29ba8cbab89f27e8b986809e0b1982303a3f4eca/fonttools-4.63.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e", size = 4922967, upload-time = "2026-05-14T12:02:48.386Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b7/87439bf44e6b97c5538cd29d0b7e366a5b8ce2cc132a4134fb67fa3f2fa2/fonttools-4.63.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69", size = 5042799, upload-time = "2026-05-14T12:02:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/ad/7c/8b96c3263b89ef99cded544c0f0636686f85dbd3c211c4dceef0231fca23/fonttools-4.63.0-cp310-cp310-win32.whl", hash = "sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e", size = 1519704, upload-time = "2026-05-14T12:02:52.523Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4d/2c2f0069970b6907de8fb5b05c5c0193cc22f717df151d1c7aef1c738f58/fonttools-4.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac", size = 1568666, upload-time = "2026-05-14T12:02:54.917Z" }, + { url = "https://files.pythonhosted.org/packages/75/2b/a7f1545bdf5da69c4bda0cea2a5781f0ad2a6623e0277267672db43c5fe6/fonttools-4.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f", size = 2881793, upload-time = "2026-05-14T12:02:56.645Z" }, + { url = "https://files.pythonhosted.org/packages/49/50/965308c703f085f225db2886813b27e015b8b3438c350b22dd65b52c2a2c/fonttools-4.63.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9", size = 2428130, upload-time = "2026-05-14T12:02:58.891Z" }, + { url = "https://files.pythonhosted.org/packages/d8/38/6937fbd7f2dc3a6b48725851bc2c15ec949b9af14d9bbcb5fe83cdf9bdf9/fonttools-4.63.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b", size = 5111952, upload-time = "2026-05-14T12:03:01.263Z" }, + { url = "https://files.pythonhosted.org/packages/0b/43/a81f20050a3115b57d62c8e781446949512eac36690dc384ccea65ff4cc1/fonttools-4.63.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18", size = 5082308, upload-time = "2026-05-14T12:03:03.211Z" }, + { url = "https://files.pythonhosted.org/packages/67/00/cdd9d4944ca6ae280d01e69cc37bde3bf663630b837a6fc6d2cd65d80e0e/fonttools-4.63.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0", size = 5087932, upload-time = "2026-05-14T12:03:05.147Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f1/0aa0dbea778c75adbef223c42019fd47d22262b905974d62d829545d485f/fonttools-4.63.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007", size = 5213271, upload-time = "2026-05-14T12:03:07.238Z" }, + { url = "https://files.pythonhosted.org/packages/a8/99/253e4056e1f0e67b9390125a154b73b5eb73ad521bece95c004858fdeec2/fonttools-4.63.0-cp311-cp311-win32.whl", hash = "sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb", size = 2304473, upload-time = "2026-05-14T12:03:09.271Z" }, + { url = "https://files.pythonhosted.org/packages/08/60/defa5e69641db890a63be281f41345f4c33b157824eaf0b9fad3e08b0dcb/fonttools-4.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c", size = 2356389, upload-time = "2026-05-14T12:03:11.53Z" }, + { url = "https://files.pythonhosted.org/packages/08/ef/b3c6b9b5be2f82416d73fe2ed2e96e2793cd80e7510bd6a17ca79cdd88ec/fonttools-4.63.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02", size = 2881131, upload-time = "2026-05-14T12:03:13.386Z" }, + { url = "https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0", size = 2426704, upload-time = "2026-05-14T12:03:15.801Z" }, + { url = "https://files.pythonhosted.org/packages/44/04/0b91d8e916e92ad1fac9e4624760baf0fd5ff2ead614c2f68fb21373f03f/fonttools-4.63.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af", size = 5044298, upload-time = "2026-05-14T12:03:18.085Z" }, + { url = "https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8", size = 4999800, upload-time = "2026-05-14T12:03:20.161Z" }, + { url = "https://files.pythonhosted.org/packages/e6/6d/67fe16c48d7ce050979b33f47e0d28a318f02da030602e944c34f7a16ef3/fonttools-4.63.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b", size = 4982666, upload-time = "2026-05-14T12:03:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/3bbab338c07c71fa56269953845e92c951a61457bbbb0f1022551ea266d9/fonttools-4.63.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78", size = 5133598, upload-time = "2026-05-14T12:03:25.168Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/aa27c7f98db5b064883dadcc5283947e81e034de42e22a33675878d98b54/fonttools-4.63.0-cp312-cp312-win32.whl", hash = "sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263", size = 2292575, upload-time = "2026-05-14T12:03:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/87/36/cccb9bc2a6ab63d1b2980374f0dca72ce95ae267c9b4cfe77455bb70d0d4/fonttools-4.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272", size = 2343211, upload-time = "2026-05-14T12:03:30.057Z" }, + { url = "https://files.pythonhosted.org/packages/0f/8d/d8fec3dcde2963f8c908fb315e5ff2cd0ac34f82394bbbf73a2aa5145ce3/fonttools-4.63.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd", size = 2876062, upload-time = "2026-05-14T12:03:32.554Z" }, + { url = "https://files.pythonhosted.org/packages/ef/71/d935dc54e4ff121bfdd11e08702db63a7e6f25af21d8a3d7b7212df53641/fonttools-4.63.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59", size = 2424594, upload-time = "2026-05-14T12:03:34.86Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/e76320afa1df918e146155ef239b1719ee266092e96f5423bfd075affba1/fonttools-4.63.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d", size = 5024840, upload-time = "2026-05-14T12:03:36.745Z" }, + { url = "https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68", size = 4975801, upload-time = "2026-05-14T12:03:38.833Z" }, + { url = "https://files.pythonhosted.org/packages/c8/26/2cee03d0aa083ab022da5c07aff9ed3f689da1defb81ad6917c9627896da/fonttools-4.63.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be", size = 4965009, upload-time = "2026-05-14T12:03:41.494Z" }, + { url = "https://files.pythonhosted.org/packages/7e/48/cc4b66d9058c0d0982c833fad10127c4b0e9324606aafa41382295ca4102/fonttools-4.63.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27", size = 5105892, upload-time = "2026-05-14T12:03:43.525Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1f/a98a30a814b9ddef3a2e706025f90b9e0bc94890e6cb15254bc86547d11a/fonttools-4.63.0-cp313-cp313-win32.whl", hash = "sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380", size = 2291313, upload-time = "2026-05-14T12:03:45.594Z" }, + { url = "https://files.pythonhosted.org/packages/92/46/5177b01f3b4abfdd4409f31cca4ab279c9343a26efbe9ec78c97fc612e02/fonttools-4.63.0-cp313-cp313-win_amd64.whl", hash = "sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b", size = 2342299, upload-time = "2026-05-14T12:03:47.414Z" }, + { url = "https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745", size = 2875338, upload-time = "2026-05-14T12:03:50.052Z" }, + { url = "https://files.pythonhosted.org/packages/cd/58/7dfa0c761cb3b2964e2a84c4dc986c926a87de0cb9fb60d5b28ded3f2914/fonttools-4.63.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03", size = 2422661, upload-time = "2026-05-14T12:03:52.154Z" }, + { url = "https://files.pythonhosted.org/packages/dd/87/64cfa18a7a1621d17b7f4502b2b0ed8a135a90c3db51ea590ee99043e76b/fonttools-4.63.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49", size = 5010526, upload-time = "2026-05-14T12:03:54.647Z" }, + { url = "https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b", size = 4923946, upload-time = "2026-05-14T12:03:56.984Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/872e6e233b8c5e8b41413796ff18b7fe479661bd40147e071b450dfad7a1/fonttools-4.63.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6", size = 4962489, upload-time = "2026-05-14T12:03:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/30/c4/83c24f2ec38b90cfda84bf4b1a1f49df80e84a1db4e7ac6e0d41bf23bc39/fonttools-4.63.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4", size = 5071870, upload-time = "2026-05-14T12:04:02.122Z" }, + { url = "https://files.pythonhosted.org/packages/de/40/3ae22b60ff1d41ce0bd044b31238cdc72cef99f28b976f1e128ebd618c9b/fonttools-4.63.0-cp314-cp314-win32.whl", hash = "sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616", size = 2295026, upload-time = "2026-05-14T12:04:04.47Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d4/98078064ccc76b45cb0f6c002452011e93c4bd26f6850344f0951cc1fe89/fonttools-4.63.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5", size = 2347454, upload-time = "2026-05-14T12:04:06.752Z" }, + { url = "https://files.pythonhosted.org/packages/49/4e/652d1580c5f4e39f7d103b0c793e4773129ad633dce4addd0cf4dfebde02/fonttools-4.63.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001", size = 2958152, upload-time = "2026-05-14T12:04:08.706Z" }, + { url = "https://files.pythonhosted.org/packages/0e/55/ad864c9a9b219f552eb46b32cd7906c466e5a578ba0c3abfcc0fe7413eb6/fonttools-4.63.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e", size = 2460809, upload-time = "2026-05-14T12:04:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2b/0aa8db70f18cf52e49b4ed5ecec68547f981160bf5ded3b5aed6faa0a6f9/fonttools-4.63.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096", size = 5148649, upload-time = "2026-05-14T12:04:12.747Z" }, + { url = "https://files.pythonhosted.org/packages/7f/63/18e4369c25043096f1048e0c9915951adc4f842bd81c6b18155824d6fa99/fonttools-4.63.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f", size = 4932147, upload-time = "2026-05-14T12:04:14.806Z" }, + { url = "https://files.pythonhosted.org/packages/a1/3f/67f3eac2ffd8a98446c5022f8ed3864eac878a5ff7af8df4c8286dba16cc/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40", size = 5027237, upload-time = "2026-05-14T12:04:17.675Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ba/4e6214cb38a7b04779e97bb7636de9a5c7f20af7018d03dee0b64c08510a/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196", size = 5053933, upload-time = "2026-05-14T12:04:20.818Z" }, + { url = "https://files.pythonhosted.org/packages/34/3b/214dcc19ee31d3d38fb5ad2755c11ef0514e5dc300bbaf41c0b69f393799/fonttools-4.63.0-cp314-cp314t-win32.whl", hash = "sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8", size = 2359326, upload-time = "2026-05-14T12:04:24.22Z" }, + { url = "https://files.pythonhosted.org/packages/dd/1e/3ff1a9b523058c2eeb6a9d50f5574e2a738200d0d94107d5bc4105e8da3f/fonttools-4.63.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419", size = 2425829, upload-time = "2026-05-14T12:04:26.829Z" }, + { url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, +] + +[[package]] +name = "greenlet" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/6e/802acd792aebb2256fbbee8cacf2727faaeb6f240ac11008f09eae4414bc/greenlet-3.5.1.tar.gz", hash = "sha256:5a56aeb7d5d9cc4b3a735efb5095bd4b4f6f0e4f93e5ca876d0e2315137b7829", size = 197356, upload-time = "2026-05-20T15:05:03.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/21/117c8710abb7f146d804a124c07eb5964a60b90d02b72452885aecc18efa/greenlet-3.5.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:7eacb17a9d41538a2bc4912eba5ef13823c83cb69e4d141d0813debe7163187f", size = 283510, upload-time = "2026-05-20T13:12:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f7/6762a56fa5f6c2295c449c6524e10ce481e381c994cc44d9d03aef0700fb/greenlet-3.5.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e5cc9606aa5f4e0bde0d3bd502b44f743864c3ffa5cfa1011b1e30f5aa02366f", size = 599696, upload-time = "2026-05-20T14:00:02.906Z" }, + { url = "https://files.pythonhosted.org/packages/0f/05/85a511e68ee109aff0aa00b4b497806091dd2d82ce209e49c6e801bd5d92/greenlet-3.5.1-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c3d35f87c7253b715d13d679e0783d845910144f282cb939fe1ba4ac8616269c", size = 612618, upload-time = "2026-05-20T14:05:39.202Z" }, + { url = "https://files.pythonhosted.org/packages/2e/19/60df45065b2981ff894fdd51e7c99a3a4b107412822b083d88d5d528f663/greenlet-3.5.1-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:00929c98ec525fd9bf075875d8c5f6a983a90906cdf78a66e6de2d8e466c2a19", size = 619237, upload-time = "2026-05-20T14:09:06.421Z" }, + { url = "https://files.pythonhosted.org/packages/89/b8/8b83d18ae07c46c019617f35afd7b47aab7f9b4fbb12fc637d681e10bdd8/greenlet-3.5.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:540dae7b956209af4d70a3be35927b4055f617763771e5e84a5255bea934d2f5", size = 612947, upload-time = "2026-05-20T13:14:23.469Z" }, + { url = "https://files.pythonhosted.org/packages/26/9a/4ba4c2bc9d9df5f41bb8943fb7bb11e440352e6b9c2e36716b6e85f8b82d/greenlet-3.5.1-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:001775efe7b8e758861294c7a27c28af87f3f3f1c20468a2bc618c45b346c061", size = 415653, upload-time = "2026-05-20T14:01:36.999Z" }, + { url = "https://files.pythonhosted.org/packages/5d/14/ad1f9fc9b82384c010212464a3702bd911f95dab2f1180bc6fbcfb1f958c/greenlet-3.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed8cdb691169715a9a492844a83246f090182247d1a5031dc78a403f68ba1e97", size = 1571425, upload-time = "2026-05-20T14:02:22.671Z" }, + { url = "https://files.pythonhosted.org/packages/46/1c/43b8203cf10f4292c9e3d270e9e5f5ade79115a0a0ca5ea6f1be5f8915a7/greenlet-3.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d59e840387076a51016777a9328b3f2c427c6f9208a6e958bad251be50a648d", size = 1638688, upload-time = "2026-05-20T13:14:30.026Z" }, + { url = "https://files.pythonhosted.org/packages/ac/6e/0344b1e99f58f71715456e46492101fd2daa408957b8186ade0a4b515da7/greenlet-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:b9152fca4a6466e114aaec745ae61cba739903a109754a9d4e1262f01e9259b1", size = 237763, upload-time = "2026-05-20T13:11:35.659Z" }, + { url = "https://files.pythonhosted.org/packages/42/3c/ff890b466eaba2b0f5e6bdfff025f8c75f41b8ffdc3dbc3d24ad261e764a/greenlet-3.5.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:73f78f9b9f0a5c06e5c946ba1e8e36f5114923b6be109ee618c54f079c3ea14f", size = 284764, upload-time = "2026-05-20T13:09:10.204Z" }, + { url = "https://files.pythonhosted.org/packages/81/0e/5e5457be3d256918f6a4756f073548a3f0190836e2cc94aa6d0d617a940b/greenlet-3.5.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0cbed8bb44e23c5b199f888f4e4ce096b45ad9f25ff74a7ad0213875e936bb2", size = 603479, upload-time = "2026-05-20T14:00:04.757Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e1/f89a21d58d308298e6f275f13a1b472ed96c680b601a371b08be6a725989/greenlet-3.5.1-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a203a8bd0acb0701653d3bbb26e404854a68674139ed5cbb778830f42b09bb33", size = 615495, upload-time = "2026-05-20T14:05:40.87Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f2/8fd452fd81adb9ec79c8275c1375702ab0fd6bee4952da12eaa09b9508d8/greenlet-3.5.1-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ebeb75c81211f5c702576cf81f315e77e23cfdb2c7c6fcb9dd143e6de35c360", size = 623515, upload-time = "2026-05-20T14:09:07.853Z" }, + { url = "https://files.pythonhosted.org/packages/75/de/af6cef182862d2ccd6975440d21c9058a77c3f9b469abf94e322dfd2e0e3/greenlet-3.5.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a271fcd66c74615cda6a964fda3f304267a12e50a084472218a39bb0376f563", size = 614754, upload-time = "2026-05-20T13:14:24.947Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bc/c318aa9f3ffc77320fddcee3d892be957b42e2ff947198d9450b004f3a38/greenlet-3.5.1-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:017a544f0385d441e88714160d089d6900ef46c9eff9d99b6715a5ef2d127747", size = 418439, upload-time = "2026-05-20T14:01:38.446Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c6/50e520283a9f19388a7326b05f9e8637e566003475eacaadad04f558c68d/greenlet-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ded7b068c7c31c1a8657d4fd42d886b3e051ae29f88b80c5ff9d502257b0f071", size = 1574097, upload-time = "2026-05-20T14:02:24.003Z" }, + { url = "https://files.pythonhosted.org/packages/21/1c/13abd1f4860d987fa5e1170a01930d6e6cd40d328de487a3c9fdaff0ffd0/greenlet-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0932b81d72f552ded9d810d00021b64d89f2195a91ce115b893f943b7a4ab3c", size = 1641058, upload-time = "2026-05-20T13:14:31.83Z" }, + { url = "https://files.pythonhosted.org/packages/f5/56/5f332b7705545eac2dc01b4e9254d24a793f2656d55d5cc6b94ee59d22ae/greenlet-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:88e300d136eac057b2397aa1cfd7328b4c87c7eb66a09c7bc6a1292234db474e", size = 238089, upload-time = "2026-05-20T13:14:03.229Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a9/a3c2fa886c5b94863fb0e61b3bc14610b7aa94cf4f17f8741b11708305fc/greenlet-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:cc6ab7e555c8a112ad3a76e368e86e12a2754bcae1652a5602e133ec7b635523", size = 234989, upload-time = "2026-05-20T13:08:27.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/37/4549f149c9797c21b32c2683c33522af22522099de128b2406672526d005/greenlet-3.5.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:fa4f98af3a528f0c3fd592a26df7f376f93329c8f4d987f6bb979057af8bf5e2", size = 286220, upload-time = "2026-05-20T13:07:28.463Z" }, + { url = "https://files.pythonhosted.org/packages/38/ff/a4f436709716965eaab9f36ea7b906c8a927fbe32fb1372a2071d964f6b1/greenlet-3.5.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffea73584b216150eab159b6d12348fb253e68757974de1e2c40d8a318ac89ed", size = 601585, upload-time = "2026-05-20T14:00:06.141Z" }, + { url = "https://files.pythonhosted.org/packages/65/ad/54bc3fcee3ad368a61b19b67d88117f7a8c29727bf71fffdeda81fbd946e/greenlet-3.5.1-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1072b4f9edcc1e192d9283a66a3e68d6b84c561de33a83d7858beb9ba1effe10", size = 614215, upload-time = "2026-05-20T14:05:42.675Z" }, + { url = "https://files.pythonhosted.org/packages/7c/6c/de5b1b388cd2d9fbdfeab324863daba37d54e6e233ddbefd70b385a8c591/greenlet-3.5.1-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:89101bfd5011e069be974903cb3a4e4523845e4ece2d62dcd8d358933c0ef249", size = 620094, upload-time = "2026-05-20T14:09:09.18Z" }, + { url = "https://files.pythonhosted.org/packages/40/69/b91cda0647df839483201545913514c2827ebea5e5ccdf931842763bc127/greenlet-3.5.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:add5217d68b31130f0beca584d7fef4878327d2e31642b66618a14eef312b63b", size = 611358, upload-time = "2026-05-20T13:14:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/4a/43/1204baffab8a6476464795a7ccf394a3248d4f22c9f87173a15b36b6d971/greenlet-3.5.1-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:e6cd99ea59dd5d89f0c956606571d79bfe6f68c9eb7f4a4083a41a7f1587edee", size = 422782, upload-time = "2026-05-20T14:01:39.597Z" }, + { url = "https://files.pythonhosted.org/packages/59/90/3cf77e080350cd02fa307bb2abf05df48f4482c240275bbd2c203ba8bb1c/greenlet-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a5ea42a752d47a145eae922b605cd1634665ac3d5ec1e72402d5048e8d60d207", size = 1570475, upload-time = "2026-05-20T14:02:25.29Z" }, + { url = "https://files.pythonhosted.org/packages/65/2c/18cece62045e74598c3c393f70dce4a63f56222015ba29a5d4eeb04f764c/greenlet-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c5551170cf4f5ff5623e9af81323751979fee2c731e2287b61f73cd27257b823", size = 1635625, upload-time = "2026-05-20T13:14:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/30/f5/310d104ddf41eb5a70f4c268d22508dfb0c3c8e86fec152be34d0d2ed819/greenlet-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c8bb982ad117d29478ef8f5533e97df21f1e2befd17a299257b0c96d1371c0b", size = 238791, upload-time = "2026-05-20T13:10:39.018Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/ceca11f504cd23a8047a3dea31919adc48df9b626dd0c13f0d858734fdfd/greenlet-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:80eb4b04dadc4e67df3fae179a32c4706a3f495bc7f22fc8a81115d5f5512188", size = 235580, upload-time = "2026-05-20T13:08:45.056Z" }, + { url = "https://files.pythonhosted.org/packages/27/69/7f7e5372d998b81001899b1c0823c957aa413ba0f2662e65821611cc31e4/greenlet-3.5.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:51518ff74664078fc51bffcc6fc529b0df5ae58da192691cee765d45ce944a2b", size = 285060, upload-time = "2026-05-20T13:08:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/b1/bf/387f9b6b865fd2ae0d0be09e0004827295a01b71be76ed350dd1e28a91a4/greenlet-3.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ffdb3c0bb002c99cd8f298957e046c3dbf6006b5b7cdf11a4e19194624a0a0a", size = 604370, upload-time = "2026-05-20T14:00:07.492Z" }, + { url = "https://files.pythonhosted.org/packages/32/f5/169ce3d4e4c67291bd18f8cbe0299c9f3e45102c7f1fb3c14780c93e4532/greenlet-3.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7715a5a2c3378ba602c3a440558261e13a820bb53a82693aacd7b7f6d964e283", size = 616987, upload-time = "2026-05-20T14:05:44.237Z" }, + { url = "https://files.pythonhosted.org/packages/19/ba/c24110c55dffa55aa6e1d98b45310da33801aeba7686ff0190fe5d46fd32/greenlet-3.5.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d40a890035c0058cadbdc4af7569800fd28a0e527a0fdbb7b5f9418f176846ce", size = 622911, upload-time = "2026-05-20T14:09:10.598Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e5/7f2e41d5273be07e77560d61ea4e56485b4d6c316d2a84518c62d1364061/greenlet-3.5.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc71ff466927a201b08305acac451ebe1aedfcea002f62f1f2f2ac2ac1e6a135", size = 613911, upload-time = "2026-05-20T13:14:27.539Z" }, + { url = "https://files.pythonhosted.org/packages/ec/7b/d20db2e8a5ad6c038702f3179b136f93f0a3d1a21a0c0777f3e470cdf4b2/greenlet-3.5.1-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:67821bb03e4e98664490edb787ff6af501194c29bbee0f5c1dfdcf1dc3d9d436", size = 425228, upload-time = "2026-05-20T14:01:40.837Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a4/fbdc67579b73615a1f91615e814303cc71e06128f7baaba87be79b8fb90c/greenlet-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cd443683db272ebaaca03af98c0b063ab30db70ea8a31a1559f35e3f7b744ccd", size = 1570689, upload-time = "2026-05-20T14:02:27.225Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b4/77abbe35078be39718a46cd49caf16bceb35662f97a34101dca28aa98e47/greenlet-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:089fff7a6ce8d9316d1f65ebc00273a56be258c1725b32b94de90a3a979557e1", size = 1635602, upload-time = "2026-05-20T13:14:36.344Z" }, + { url = "https://files.pythonhosted.org/packages/37/f7/129f27ca700845b8ee8ca88ce7f43435a1239c2eddb7677fc938822762cf/greenlet-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:110a1ca7b49b014b097f6078272c3f4ed31af45b254de5228b79adba879f6af9", size = 238683, upload-time = "2026-05-20T13:11:50.57Z" }, + { url = "https://files.pythonhosted.org/packages/6d/5c/a485a36e87df8d8fd0632ee01511244f5156a20ed3746cc6599340326395/greenlet-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f16ba1efc0715b680a18b8123d90dad887c6112ae3555b4b5c32c149540c6b4e", size = 235499, upload-time = "2026-05-20T13:12:42.028Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cb/c62454606daf5640369c94d8a9dd540599b1bfc090e2d2180cb77f4038d2/greenlet-3.5.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d8ab31c9de8651a2facdd5c5bb0011f2380dd1a7af78ce2adf4b56095294fc07", size = 285579, upload-time = "2026-05-20T13:08:56.396Z" }, + { url = "https://files.pythonhosted.org/packages/ec/71/c4270398c2eba968a6071af1dfbdcaeee6ec1c24bc8b435b8cc452700da6/greenlet-3.5.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e300185139abc337ade480c327183adf42a875ac7181bfe66d7d4efea31fbea", size = 651106, upload-time = "2026-05-20T14:00:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ab/71e34b78a44ec271fb5f550c17bc46d301ddc5953890d935f270b0dcdb5a/greenlet-3.5.1-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7ffdb990dcaa0234cf9845aead5df2e3c3a8b6507d409274dd87e0d5ab05ffc2", size = 663478, upload-time = "2026-05-20T14:05:45.88Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/2d80842910da44f78c286532d084b8a5c3717c844ae80ceb3858738ae89a/greenlet-3.5.1-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c09df69dc1712d131332054a858a3e5cca400967fa3a672e2324fbb0971448c", size = 667767, upload-time = "2026-05-20T14:09:12.15Z" }, + { url = "https://files.pythonhosted.org/packages/77/96/4efd6fa5c62c85426a0c19077a586258ebc3a2a146ff2493e4312a697a22/greenlet-3.5.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f82b3597e9d83b63408affed0b48fd0f54935edac4302237b9a837be0dae33c", size = 660800, upload-time = "2026-05-20T13:14:29.129Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d3/dad2eecedfbb1ed7050a20dcfae40c1442b74bc7423608be2c7e03ee7133/greenlet-3.5.1-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:a4764e0bfc6a4d114c865b32520805c16a990ef5f286a514413b05d5ecd6a23d", size = 470786, upload-time = "2026-05-20T14:01:42.064Z" }, + { url = "https://files.pythonhosted.org/packages/7a/e0/6c71401a25cac7000261304e866a2f2cc04dc74810d40e2f118aa4799495/greenlet-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c0141e37414c10164e702b8fb1473304221ad98f71600850c6ef7ff4880feba0", size = 1617518, upload-time = "2026-05-20T14:02:28.662Z" }, + { url = "https://files.pythonhosted.org/packages/41/26/c5c06643e8c0af9e7bf18e16cb51d0ab7625155f0392e1c9015d66d556cd/greenlet-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:50ae25a67bea74ea41fb14b960bc532df73eb713417b2d61892dced82fe8d3bc", size = 1681593, upload-time = "2026-05-20T13:14:39.417Z" }, + { url = "https://files.pythonhosted.org/packages/8a/bd/e11a108317485075e68af9d23039619b86b28130c3b50d227d42edece64b/greenlet-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:8a17c42330e261299766b75ac1ea32caa437a9453c8f65d16a13140db378ecd3", size = 239800, upload-time = "2026-05-20T13:09:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/47/f8/8e8e8417b7bf28639a5a56356ef934d0375e1d0c70a57e04d7701e870ffe/greenlet-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:7b5f5fae05b8ac6d176a61b60c394a8cbdc2b5b91b81793066e68745cf165e54", size = 236862, upload-time = "2026-05-20T13:09:10.498Z" }, + { url = "https://files.pythonhosted.org/packages/90/12/41bf27fde4d3605d3773ae57751eda182b8be2f5398011c041173b1d9534/greenlet-3.5.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:ea8da1e900d758d078810d4255d8c6aa572181896a31ec79d779eb79c3adc9ad", size = 293637, upload-time = "2026-05-20T13:12:35.529Z" }, + { url = "https://files.pythonhosted.org/packages/44/44/ba14b23e9757707050c2f397d305bbcae62e5d7cad122f8b6baec5ae4a1f/greenlet-3.5.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a19570c52a21420dcbc94e661994bc325c0b5b11304540fed514586da5dc8f2e", size = 650840, upload-time = "2026-05-20T14:00:11.079Z" }, + { url = "https://files.pythonhosted.org/packages/a8/37/5ddc2b686a6844f91abecef43411842426da2e1573f60b49ecf2547f4ae1/greenlet-3.5.1-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3d955c89b75eeca4723d7cc14135f393cd47c32e2a6cb4a8e4c6e760a26b0986", size = 656416, upload-time = "2026-05-20T14:05:47.118Z" }, + { url = "https://files.pythonhosted.org/packages/8c/46/5987dcd1a2570ba84f3b187536b2ca3ae97613387e57f5cfa99df068fe5e/greenlet-3.5.1-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea37d5a157eb9493820d3792ac4ece28619a394391d2b9f2f78057d396ff0f0f", size = 656607, upload-time = "2026-05-20T14:09:13.949Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f0/d17510297c35a2992712f0bf84de3779749999f7d3d63aa1f09db7c62dbe/greenlet-3.5.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2daaaebd1a5aa88c49045b6baf9310b3263796bd88db713edf37cf53e7bb4e", size = 654397, upload-time = "2026-05-20T13:14:30.696Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c1/6da0a9ddcc29d7e51ef14883fa3dc1e53b3f4ffba00582106c7bf55da1d8/greenlet-3.5.1-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:8d8a23250ea3ec7b36de8fa4b541e9e2db3ee82915cc060ab0631609ad8b28de", size = 488287, upload-time = "2026-05-20T14:01:43.143Z" }, + { url = "https://files.pythonhosted.org/packages/37/eb/147387705bb89092645b012586e7273cb5ed3c90ef7eaf3a69173eaf0209/greenlet-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3bfbd69cc349e43bf3a8ae1c85548ff0718efc887615c2db16c3833d7b0b072d", size = 1614469, upload-time = "2026-05-20T14:02:30.192Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4e/37ee0da7732b7aa9896f17e15579a9df34b9fcb9dd494f0adfa749af6623/greenlet-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4378720dd888136c27215a0214d32a4d37c3852765d45bc37aad0623423cfd78", size = 1675115, upload-time = "2026-05-20T13:14:40.972Z" }, + { url = "https://files.pythonhosted.org/packages/57/f3/97dfcf4a6eb5077f8a672234216fb5923eb89f2cab7081cb10b2cf75b605/greenlet-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:45718441607f9325d948db98cbc691276059316d0358c188c246da4e1d4d23d2", size = 245246, upload-time = "2026-05-20T13:12:22.646Z" }, +] + +[[package]] +name = "groundwork-sphinx-theme" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/9d/304bfacefd0ef853c48af60aee35c096dd392ef4b340d336a59a7b8c953b/groundwork-sphinx-theme-1.1.1.tar.gz", hash = "sha256:5f1217bf34daba5fcd93e8a2a04ef5a6c2b144ec43754aec7ce14de501e23fe4", size = 26423, upload-time = "2019-11-25T05:24:22.842Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/e3/7c1b4e2d62d89229c9df5b90f2195b36758dab8a7f00f0710a90d0f414cc/groundwork_sphinx_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:b4796989ce3cd6d5b5a3c7ebe52a8c9cf848110e9f12c2c88e2b3c0e4e8f0e24", size = 26875, upload-time = "2019-11-25T05:24:25.253Z" }, +] + +[[package]] +name = "id" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/04/c2156091427636080787aac190019dc64096e56a23b7364d3c1764ee3a06/id-1.6.1.tar.gz", hash = "sha256:d0732d624fb46fd4e7bc4e5152f00214450953b9e772c182c1c22964def1a069", size = 18088, upload-time = "2026-02-04T16:19:41.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl", hash = "sha256:f5ec41ed2629a508f5d0988eda142e190c9c6da971100612c4de9ad9f9b237ca", size = 14689, upload-time = "2026-02-04T16:19:40.051Z" }, +] + +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "imagesize" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/e6/7bf14eeb8f8b7251141944835abd42eb20a658d89084b7e1f3e5fe394090/imagesize-2.0.0.tar.gz", hash = "sha256:8e8358c4a05c304f1fccf7ff96f036e7243a189e9e42e90851993c558cfe9ee3", size = 1773045, upload-time = "2026-03-03T14:18:29.941Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl", hash = "sha256:5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96", size = 9441, upload-time = "2026-03-03T14:18:27.892Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipykernel" +version = "6.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "ipython", version = "9.14.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { 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/a5/1d/d5ba6edbfe6fae4c3105bca3a9c889563cc752c7f2de45e333164c7f4846/ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6", size = 167493, upload-time = "2025-10-20T11:42:39.948Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af", size = 117003, upload-time = "2025-10-20T11:42:37.502Z" }, +] + +[[package]] +name = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "colorama", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "decorator", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jedi", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pexpect", marker = "(python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pygments", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "stack-data", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "traitlets", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971, upload-time = "2026-03-27T10:02:13.94Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849, upload-time = "2026-03-27T10:02:07.846Z" }, +] + +[[package]] +name = "ipython" +version = "9.14.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "colorama", marker = "(python_full_version >= '3.11' and sys_platform == 'win32') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "decorator", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jedi", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pexpect", marker = "(python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "psutil", marker = "(python_full_version >= '3.11' and sys_platform != 'emscripten') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pygments", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "stack-data", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "traitlets", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457, upload-time = "2026-06-05T08:12:34.921Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/22/58818a63eaf8982b67632b1bc20585c811611b15a8da19d6012323dc76a5/ipython-9.14.1-py3-none-any.whl", hash = "sha256:5d4a9ecaa3b10e6e5f269dd0948bdb58ca9cb851899cd23e07c320d3eb11613c", size = 627770, upload-time = "2026-06-05T08:12:33.045Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-tarfile", marker = "python_full_version < '3.12' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/cf/ea4ef2920830dea3f5ab2ea4da6fb67724e6dca80ee2553788c3607243d0/jaraco_functools-4.5.0.tar.gz", hash = "sha256:3bb5665ea4a020cf78a7040e89154c77edadb3ca74f366479669c5999aa70b03", size = 20272, upload-time = "2026-05-15T21:34:10.025Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl", hash = "sha256:79ce39246eddbde4b3a03b77ea5f0f7878dc669b166a66cf3fa8e266aa3fa2f4", size = 10594, upload-time = "2026-05-15T21:34:08.595Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[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 = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "jupyter-cache" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "importlib-metadata" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pyyaml" }, + { name = "sqlalchemy" }, + { name = "tabulate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/f7/3627358075f183956e8c4974603232b03afd4ddc7baf72c2bc9fff522291/jupyter_cache-1.0.1.tar.gz", hash = "sha256:16e808eb19e3fb67a223db906e131ea6e01f03aa27f49a7214ce6a5fec186fb9", size = 32048, upload-time = "2024-11-15T16:03:55.322Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/6b/67b87da9d36bff9df7d0efbd1a325fa372a43be7158effaf43ed7b22341d/jupyter_cache-1.0.1-py3-none-any.whl", hash = "sha256:9c3cafd825ba7da8b5830485343091143dff903e4d8c69db9349b728b140abf6", size = 33907, upload-time = "2024-11-15T16:03:54.021Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/dc/5512503b088997c2250b8bf18258fba9d9ce5ead641183700960d3c9d342/jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa", size = 359256, upload-time = "2026-06-09T13:15:01.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81", size = 109828, upload-time = "2026-06-09T13:14:58.835Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "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 = "karma-sphinx-theme" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/38/25be66e776ee0d088d19a0b3d1abc58020cf8cb88d921e8b72d1c25ae641/karma_sphinx_theme-0.0.8.tar.gz", hash = "sha256:5a95f91818b458bd5bdf62690828361a369a222f0721cd0e1eb2ea29056e8c27", size = 96101, upload-time = "2018-06-20T00:03:29.073Z" } + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.12' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "secretstorage", marker = "sys_platform == 'linux' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/f8/06549565caa026e540b7e7bab5c5a90eb7ca986015f4c48dace243cd24d9/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374", size = 122802, upload-time = "2026-03-09T13:12:37.515Z" }, + { url = "https://files.pythonhosted.org/packages/84/eb/8476a0818850c563ff343ea7c9c05dcdcbd689a38e01aa31657df01f91fa/kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd", size = 66216, upload-time = "2026-03-09T13:12:38.812Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c4/f9c8a6b4c21aed4198566e45923512986d6cef530e7263b3a5f823546561/kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476", size = 63917, upload-time = "2026-03-09T13:12:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/f1/0e/ba4ae25d03722f64de8b2c13e80d82ab537a06b30fc7065183c6439357e3/kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22", size = 1628776, upload-time = "2026-03-09T13:12:41.976Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e4/3f43a011bc8a0860d1c96f84d32fa87439d3feedf66e672fef03bf5e8bac/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b", size = 1228164, upload-time = "2026-03-09T13:12:44.002Z" }, + { url = "https://files.pythonhosted.org/packages/4b/34/3a901559a1e0c218404f9a61a93be82d45cb8f44453ba43088644980f033/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e", size = 1246656, upload-time = "2026-03-09T13:12:45.557Z" }, + { url = "https://files.pythonhosted.org/packages/87/9e/f78c466ea20527822b95ad38f141f2de1dcd7f23fb8716b002b0d91bbe59/kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb", size = 1295562, upload-time = "2026-03-09T13:12:47.562Z" }, + { url = "https://files.pythonhosted.org/packages/0a/66/fd0e4a612e3a286c24e6d6f3a5428d11258ed1909bc530ba3b59807fd980/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537", size = 2178473, upload-time = "2026-03-09T13:12:50.254Z" }, + { url = "https://files.pythonhosted.org/packages/dc/8e/6cac929e0049539e5ee25c1ee937556f379ba5204840d03008363ced662d/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4", size = 2274035, upload-time = "2026-03-09T13:12:51.785Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d3/9d0c18f1b52ea8074b792452cf17f1f5a56bd0302a85191f405cfbf9da16/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c", size = 2443217, upload-time = "2026-03-09T13:12:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/45/2a/6e19368803a038b2a90857bf4ee9e3c7b667216d045866bf22d3439fd75e/kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede", size = 2249196, upload-time = "2026-03-09T13:12:55.057Z" }, + { url = "https://files.pythonhosted.org/packages/75/2b/3f641dfcbe72e222175d626bacf2f72c3b34312afec949dd1c50afa400f5/kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2", size = 73389, upload-time = "2026-03-09T13:12:56.496Z" }, + { url = "https://files.pythonhosted.org/packages/da/88/299b137b9e0025d8982e03d2d52c123b0a2b159e84b0ef1501ef446339cf/kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875", size = 64782, upload-time = "2026-03-09T13:12:57.609Z" }, + { url = "https://files.pythonhosted.org/packages/12/dd/a495a9c104be1c476f0386e714252caf2b7eca883915422a64c50b88c6f5/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c", size = 122798, upload-time = "2026-03-09T13:12:58.963Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/37b4047a2af0cf5ef6d8b4b26e91829ae6fc6a2d1f74524bcb0e7cd28a32/kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb", size = 66216, upload-time = "2026-03-09T13:13:00.155Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/510dc933d87767584abfe03efa445889996c70c2990f6f87c3ebaa0a18c5/kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac", size = 63911, upload-time = "2026-03-09T13:13:01.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/46/bddc13df6c2a40741e0cc7865bb1c9ed4796b6760bd04ce5fae3928ef917/kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27", size = 1438209, upload-time = "2026-03-09T13:13:03.385Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d6/76621246f5165e5372f02f5e6f3f48ea336a8f9e96e43997d45b240ed8cd/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398", size = 1248888, upload-time = "2026-03-09T13:13:05.231Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c1/31559ec6fb39a5b48035ce29bb63ade628f321785f38c384dee3e2c08bc1/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db", size = 1266304, upload-time = "2026-03-09T13:13:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ef/1cb8276f2d29cc6a41e0a042f27946ca347d3a4a75acf85d0a16aa6dcc82/kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc", size = 1319650, upload-time = "2026-03-09T13:13:08.607Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e4/5ba3cecd7ce6236ae4a80f67e5d5531287337d0e1f076ca87a5abe4cd5d0/kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679", size = 970949, upload-time = "2026-03-09T13:13:10.299Z" }, + { url = "https://files.pythonhosted.org/packages/5a/69/dc61f7ae9a2f071f26004ced87f078235b5507ab6e5acd78f40365655034/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309", size = 2199125, upload-time = "2026-03-09T13:13:11.841Z" }, + { url = "https://files.pythonhosted.org/packages/e5/7b/abbe0f1b5afa85f8d084b73e90e5f801c0939eba16ac2e49af7c61a6c28d/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2", size = 2293783, upload-time = "2026-03-09T13:13:14.399Z" }, + { url = "https://files.pythonhosted.org/packages/8a/80/5908ae149d96d81580d604c7f8aefd0e98f4fd728cf172f477e9f2a81744/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c", size = 1960726, upload-time = "2026-03-09T13:13:16.047Z" }, + { url = "https://files.pythonhosted.org/packages/84/08/a78cb776f8c085b7143142ce479859cfec086bd09ee638a317040b6ef420/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08", size = 2464738, upload-time = "2026-03-09T13:13:17.897Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e1/65584da5356ed6cb12c63791a10b208860ac40a83de165cb6a6751a686e3/kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4", size = 2270718, upload-time = "2026-03-09T13:13:19.421Z" }, + { url = "https://files.pythonhosted.org/packages/be/6c/28f17390b62b8f2f520e2915095b3c94d88681ecf0041e75389d9667f202/kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b", size = 73480, upload-time = "2026-03-09T13:13:20.818Z" }, + { url = "https://files.pythonhosted.org/packages/d8/0e/2ee5debc4f77a625778fec5501ff3e8036fe361b7ee28ae402a485bb9694/kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac", size = 64930, upload-time = "2026-03-09T13:13:21.997Z" }, + { url = "https://files.pythonhosted.org/packages/4d/b2/818b74ebea34dabe6d0c51cb1c572e046730e64844da6ed646d5298c40ce/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9", size = 123158, upload-time = "2026-03-09T13:13:23.127Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588", size = 66388, upload-time = "2026-03-09T13:13:24.765Z" }, + { url = "https://files.pythonhosted.org/packages/99/9f/795fedf35634f746151ca8839d05681ceb6287fbed6cc1c9bf235f7887c2/kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819", size = 64068, upload-time = "2026-03-09T13:13:25.878Z" }, + { url = "https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f", size = 1477934, upload-time = "2026-03-09T13:13:27.166Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2f/cebfcdb60fd6a9b0f6b47a9337198bcbad6fbe15e68189b7011fd914911f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf", size = 1278537, upload-time = "2026-03-09T13:13:28.707Z" }, + { url = "https://files.pythonhosted.org/packages/f2/0d/9b782923aada3fafb1d6b84e13121954515c669b18af0c26e7d21f579855/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d", size = 1296685, upload-time = "2026-03-09T13:13:30.528Z" }, + { url = "https://files.pythonhosted.org/packages/27/70/83241b6634b04fe44e892688d5208332bde130f38e610c0418f9ede47ded/kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083", size = 1346024, upload-time = "2026-03-09T13:13:32.818Z" }, + { url = "https://files.pythonhosted.org/packages/e4/db/30ed226fb271ae1a6431fc0fe0edffb2efe23cadb01e798caeb9f2ceae8f/kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6", size = 987241, upload-time = "2026-03-09T13:13:34.435Z" }, + { url = "https://files.pythonhosted.org/packages/ec/bd/c314595208e4c9587652d50959ead9e461995389664e490f4dce7ff0f782/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1", size = 2227742, upload-time = "2026-03-09T13:13:36.4Z" }, + { url = "https://files.pythonhosted.org/packages/c1/43/0499cec932d935229b5543d073c2b87c9c22846aab48881e9d8d6e742a2d/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0", size = 2323966, upload-time = "2026-03-09T13:13:38.204Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/79b0d760907965acfd9d61826a3d41f8f093c538f55cd2633d3f0db269f6/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15", size = 1977417, upload-time = "2026-03-09T13:13:39.966Z" }, + { url = "https://files.pythonhosted.org/packages/ab/31/01d0537c41cb75a551a438c3c7a80d0c60d60b81f694dac83dd436aec0d0/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314", size = 2491238, upload-time = "2026-03-09T13:13:41.698Z" }, + { url = "https://files.pythonhosted.org/packages/e4/34/8aefdd0be9cfd00a44509251ba864f5caf2991e36772e61c408007e7f417/kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9", size = 2294947, upload-time = "2026-03-09T13:13:43.343Z" }, + { url = "https://files.pythonhosted.org/packages/ad/cf/0348374369ca588f8fe9c338fae49fa4e16eeb10ffb3d012f23a54578a9e/kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384", size = 73569, upload-time = "2026-03-09T13:13:45.792Z" }, + { url = "https://files.pythonhosted.org/packages/28/26/192b26196e2316e2bd29deef67e37cdf9870d9af8e085e521afff0fed526/kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7", size = 64997, upload-time = "2026-03-09T13:13:46.878Z" }, + { url = "https://files.pythonhosted.org/packages/9d/69/024d6711d5ba575aa65d5538042e99964104e97fa153a9f10bc369182bc2/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09", size = 123166, upload-time = "2026-03-09T13:13:48.032Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/adbb40df306f587054a348831220812b9b1d787aff714cfbc8556e38fccd/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3", size = 66395, upload-time = "2026-03-09T13:13:49.365Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3a/d0a972b34e1c63e2409413104216cd1caa02c5a37cb668d1687d466c1c45/kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd", size = 64065, upload-time = "2026-03-09T13:13:50.562Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3", size = 1477903, upload-time = "2026-03-09T13:13:52.084Z" }, + { url = "https://files.pythonhosted.org/packages/18/d8/55638d89ffd27799d5cc3d8aa28e12f4ce7a64d67b285114dbedc8ea4136/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96", size = 1278751, upload-time = "2026-03-09T13:13:54.673Z" }, + { url = "https://files.pythonhosted.org/packages/b8/97/b4c8d0d18421ecceba20ad8701358453b88e32414e6f6950b5a4bad54e65/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099", size = 1296793, upload-time = "2026-03-09T13:13:56.287Z" }, + { url = "https://files.pythonhosted.org/packages/c4/10/f862f94b6389d8957448ec9df59450b81bec4abb318805375c401a1e6892/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8", size = 1346041, upload-time = "2026-03-09T13:13:58.269Z" }, + { url = "https://files.pythonhosted.org/packages/a3/6a/f1650af35821eaf09de398ec0bc2aefc8f211f0cda50204c9f1673741ba9/kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87", size = 987292, upload-time = "2026-03-09T13:13:59.871Z" }, + { url = "https://files.pythonhosted.org/packages/de/19/d7fb82984b9238115fe629c915007be608ebd23dc8629703d917dbfaffd4/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23", size = 2227865, upload-time = "2026-03-09T13:14:01.401Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b9/46b7f386589fd222dac9e9de9c956ce5bcefe2ee73b4e79891381dda8654/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859", size = 2324369, upload-time = "2026-03-09T13:14:02.972Z" }, + { url = "https://files.pythonhosted.org/packages/92/8b/95e237cf3d9c642960153c769ddcbe278f182c8affb20cecc1cc983e7cc5/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902", size = 1977989, upload-time = "2026-03-09T13:14:04.503Z" }, + { url = "https://files.pythonhosted.org/packages/1b/95/980c9df53501892784997820136c01f62bc1865e31b82b9560f980c0e649/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167", size = 2491645, upload-time = "2026-03-09T13:14:06.106Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/900647fd0840abebe1561792c6b31e6a7c0e278fc3973d30572a965ca14c/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0", size = 2295237, upload-time = "2026-03-09T13:14:08.891Z" }, + { url = "https://files.pythonhosted.org/packages/be/8a/be60e3bbcf513cc5a50f4a3e88e1dcecebb79c1ad607a7222877becaa101/kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276", size = 73573, upload-time = "2026-03-09T13:14:12.327Z" }, + { url = "https://files.pythonhosted.org/packages/4d/d2/64be2e429eb4fca7f7e1c52a91b12663aeaf25de3895e5cca0f47ef2a8d0/kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c", size = 64998, upload-time = "2026-03-09T13:14:13.469Z" }, + { url = "https://files.pythonhosted.org/packages/b0/69/ce68dd0c85755ae2de490bf015b62f2cea5f6b14ff00a463f9d0774449ff/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1", size = 125700, upload-time = "2026-03-09T13:14:14.636Z" }, + { url = "https://files.pythonhosted.org/packages/74/aa/937aac021cf9d4349990d47eb319309a51355ed1dbdc9c077cdc9224cb11/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e", size = 67537, upload-time = "2026-03-09T13:14:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/ee/20/3a87fbece2c40ad0f6f0aefa93542559159c5f99831d596050e8afae7a9f/kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7", size = 65514, upload-time = "2026-03-09T13:14:18.035Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7f/f943879cda9007c45e1f7dba216d705c3a18d6b35830e488b6c6a4e7cdf0/kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c", size = 1584848, upload-time = "2026-03-09T13:14:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/37/f8/4d4f85cc1870c127c88d950913370dd76138482161cd07eabbc450deff01/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368", size = 1391542, upload-time = "2026-03-09T13:14:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/04/0b/65dd2916c84d252b244bd405303220f729e7c17c9d7d33dca6feeff9ffc4/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489", size = 1404447, upload-time = "2026-03-09T13:14:23.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/2606a373247babce9b1d056c03a04b65f3cf5290a8eac5d7bdead0a17e21/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1", size = 1455918, upload-time = "2026-03-09T13:14:24.74Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d1/c6078b5756670658e9192a2ef11e939c92918833d2745f85cd14a6004bdf/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3", size = 1072856, upload-time = "2026-03-09T13:14:26.597Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c8/7def6ddf16eb2b3741d8b172bdaa9af882b03c78e9b0772975408801fa63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18", size = 2333580, upload-time = "2026-03-09T13:14:28.237Z" }, + { url = "https://files.pythonhosted.org/packages/9e/87/2ac1fce0eb1e616fcd3c35caa23e665e9b1948bb984f4764790924594128/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021", size = 2423018, upload-time = "2026-03-09T13:14:30.018Z" }, + { url = "https://files.pythonhosted.org/packages/67/13/c6700ccc6cc218716bfcda4935e4b2997039869b4ad8a94f364c5a3b8e63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310", size = 2062804, upload-time = "2026-03-09T13:14:32.888Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/877056304626943ff0f1f44c08f584300c199b887cb3176cd7e34f1515f1/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3", size = 2597482, upload-time = "2026-03-09T13:14:34.971Z" }, + { url = "https://files.pythonhosted.org/packages/75/19/c60626c47bf0f8ac5dcf72c6c98e266d714f2fbbfd50cf6dab5ede3aaa50/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2", size = 2394328, upload-time = "2026-03-09T13:14:36.816Z" }, + { url = "https://files.pythonhosted.org/packages/47/84/6a6d5e5bb8273756c27b7d810d47f7ef2f1f9b9fd23c9ee9a3f8c75c9cef/kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53", size = 68410, upload-time = "2026-03-09T13:14:38.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/060f45052f2a01ad5762c8fdecd6d7a752b43400dc29ff75cd47225a40fd/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615", size = 123231, upload-time = "2026-03-09T13:14:41.323Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/78da680eadd06ff35edef6ef68a1ad273bad3e2a0936c9a885103230aece/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02", size = 66489, upload-time = "2026-03-09T13:14:42.534Z" }, + { url = "https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e", size = 64063, upload-time = "2026-03-09T13:14:44.759Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac", size = 1475913, upload-time = "2026-03-09T13:14:46.247Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f0/f768ae564a710135630672981231320bc403cf9152b5596ec5289de0f106/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05", size = 1282782, upload-time = "2026-03-09T13:14:48.458Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9f/1de7aad00697325f05238a5f2eafbd487fb637cc27a558b5367a5f37fb7f/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd", size = 1300815, upload-time = "2026-03-09T13:14:50.721Z" }, + { url = "https://files.pythonhosted.org/packages/5a/c2/297f25141d2e468e0ce7f7a7b92e0cf8918143a0cbd3422c1ad627e85a06/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a", size = 1347925, upload-time = "2026-03-09T13:14:52.304Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d3/f4c73a02eb41520c47610207b21afa8cdd18fdbf64ffd94674ae21c4812d/kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554", size = 991322, upload-time = "2026-03-09T13:14:54.637Z" }, + { url = "https://files.pythonhosted.org/packages/7b/46/d3f2efef7732fcda98d22bf4ad5d3d71d545167a852ca710a494f4c15343/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581", size = 2232857, upload-time = "2026-03-09T13:14:56.471Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ec/2d9756bf2b6d26ae4349b8d3662fb3993f16d80c1f971c179ce862b9dbae/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303", size = 2329376, upload-time = "2026-03-09T13:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/8f/9f/876a0a0f2260f1bde92e002b3019a5fabc35e0939c7d945e0fa66185eb20/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9", size = 1982549, upload-time = "2026-03-09T13:14:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/ba3624dfac23a64d54ac4179832860cb537c1b0af06024936e82ca4154a0/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79", size = 2494680, upload-time = "2026-03-09T13:15:01.364Z" }, + { url = "https://files.pythonhosted.org/packages/39/b7/97716b190ab98911b20d10bf92eca469121ec483b8ce0edd314f51bc85af/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796", size = 2297905, upload-time = "2026-03-09T13:15:03.925Z" }, + { url = "https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e", size = 75086, upload-time = "2026-03-09T13:15:07.775Z" }, + { url = "https://files.pythonhosted.org/packages/70/15/9b90f7df0e31a003c71649cf66ef61c3c1b862f48c81007fa2383c8bd8d7/kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df", size = 66577, upload-time = "2026-03-09T13:15:09.139Z" }, + { url = "https://files.pythonhosted.org/packages/17/01/7dc8c5443ff42b38e72731643ed7cf1ed9bf01691ae5cdca98501999ed83/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e", size = 125794, upload-time = "2026-03-09T13:15:10.525Z" }, + { url = "https://files.pythonhosted.org/packages/46/8a/b4ebe46ebaac6a303417fab10c2e165c557ddaff558f9699d302b256bc53/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4", size = 67646, upload-time = "2026-03-09T13:15:12.016Z" }, + { url = "https://files.pythonhosted.org/packages/60/35/10a844afc5f19d6f567359bf4789e26661755a2f36200d5d1ed8ad0126e5/kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028", size = 65511, upload-time = "2026-03-09T13:15:13.311Z" }, + { url = "https://files.pythonhosted.org/packages/f8/8a/685b297052dd041dcebce8e8787b58923b6e78acc6115a0dc9189011c44b/kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657", size = 1584858, upload-time = "2026-03-09T13:15:15.103Z" }, + { url = "https://files.pythonhosted.org/packages/9e/80/04865e3d4638ac5bddec28908916df4a3075b8c6cc101786a96803188b96/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920", size = 1392539, upload-time = "2026-03-09T13:15:16.661Z" }, + { url = "https://files.pythonhosted.org/packages/ba/01/77a19cacc0893fa13fafa46d1bba06fb4dc2360b3292baf4b56d8e067b24/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9", size = 1405310, upload-time = "2026-03-09T13:15:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/53/39/bcaf5d0cca50e604cfa9b4e3ae1d64b50ca1ae5b754122396084599ef903/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d", size = 1456244, upload-time = "2026-03-09T13:15:20.444Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7a/72c187abc6975f6978c3e39b7cf67aeb8b3c0a8f9790aa7fd412855e9e1f/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65", size = 1073154, upload-time = "2026-03-09T13:15:22.039Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ca/cf5b25783ebbd59143b4371ed0c8428a278abe68d6d0104b01865b1bbd0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa", size = 2334377, upload-time = "2026-03-09T13:15:23.741Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e5/b1f492adc516796e88751282276745340e2a72dcd0d36cf7173e0daf3210/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0", size = 2425288, upload-time = "2026-03-09T13:15:25.789Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e5/9b21fbe91a61b8f409d74a26498706e97a48008bfcd1864373d32a6ba31c/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9", size = 2063158, upload-time = "2026-03-09T13:15:27.63Z" }, + { url = "https://files.pythonhosted.org/packages/b1/02/83f47986138310f95ea95531f851b2a62227c11cbc3e690ae1374fe49f0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f", size = 2597260, upload-time = "2026-03-09T13:15:29.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/18/43a5f24608d8c313dd189cf838c8e68d75b115567c6279de7796197cfb6a/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646", size = 2394403, upload-time = "2026-03-09T13:15:31.517Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b5/98222136d839b8afabcaa943b09bd05888c2d36355b7e448550211d1fca4/kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681", size = 79687, upload-time = "2026-03-09T13:15:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/99/a2/ca7dc962848040befed12732dff6acae7fb3c4f6fc4272b3f6c9a30b8713/kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57", size = 70032, upload-time = "2026-03-09T13:15:34.411Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fa/2910df836372d8761bb6eff7d8bdcb1613b5c2e03f260efe7abe34d388a7/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797", size = 130262, upload-time = "2026-03-09T13:15:35.629Z" }, + { url = "https://files.pythonhosted.org/packages/0f/41/c5f71f9f00aabcc71fee8b7475e3f64747282580c2fe748961ba29b18385/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203", size = 138036, upload-time = "2026-03-09T13:15:36.894Z" }, + { url = "https://files.pythonhosted.org/packages/fa/06/7399a607f434119c6e1fdc8ec89a8d51ccccadf3341dee4ead6bd14caaf5/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7", size = 194295, upload-time = "2026-03-09T13:15:38.22Z" }, + { url = "https://files.pythonhosted.org/packages/b5/91/53255615acd2a1eaca307ede3c90eb550bae9c94581f8c00081b6b1c8f44/kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57", size = 75987, upload-time = "2026-03-09T13:15:39.65Z" }, + { url = "https://files.pythonhosted.org/packages/17/6f/6fd4f690a40c2582fa34b97d2678f718acf3706b91d270c65ecb455d0a06/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4", size = 59606, upload-time = "2026-03-09T13:15:40.81Z" }, + { url = "https://files.pythonhosted.org/packages/82/a0/2355d5e3b338f13ce63f361abb181e3b6ea5fffdb73f739b3e80efa76159/kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca", size = 57537, upload-time = "2026-03-09T13:15:42.071Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b9/1d50e610ecadebe205b71d6728fd224ce0e0ca6aba7b9cbe1da049203ac5/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f", size = 79888, upload-time = "2026-03-09T13:15:43.317Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ee/b85ffcd75afed0357d74f0e6fc02a4507da441165de1ca4760b9f496390d/kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed", size = 77584, upload-time = "2026-03-09T13:15:44.605Z" }, + { url = "https://files.pythonhosted.org/packages/6b/dd/644d0dde6010a8583b4cd66dd41c5f83f5325464d15c4f490b3340ab73b4/kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc", size = 73390, upload-time = "2026-03-09T13:15:45.832Z" }, + { url = "https://files.pythonhosted.org/packages/e9/eb/5fcbbbf9a0e2c3a35effb88831a483345326bbc3a030a3b5b69aee647f84/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232", size = 59532, upload-time = "2026-03-09T13:15:47.047Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9b/e17104555bb4db148fd52327feea1e96be4b88e8e008b029002c281a21ab/kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a", size = 57420, upload-time = "2026-03-09T13:15:48.199Z" }, + { url = "https://files.pythonhosted.org/packages/48/44/2b5b95b7aa39fb2d8d9d956e0f3d5d45aef2ae1d942d4c3ffac2f9cfed1a/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737", size = 79892, upload-time = "2026-03-09T13:15:49.694Z" }, + { url = "https://files.pythonhosted.org/packages/52/7d/7157f9bba6b455cfb4632ed411e199fc8b8977642c2b12082e1bd9e6d173/kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16", size = 77603, upload-time = "2026-03-09T13:15:50.945Z" }, + { url = "https://files.pythonhosted.org/packages/0a/dd/8050c947d435c8d4bc94e3252f4d8bb8a76cfb424f043a8680be637a57f1/kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1", size = 73558, upload-time = "2026-03-09T13:15:52.112Z" }, +] + +[[package]] +name = "latexcodec" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/dd/4270b2c5e2ee49316c3859e62293bd2ea8e382339d63ab7bbe9f39c0ec3b/latexcodec-3.0.1.tar.gz", hash = "sha256:e78a6911cd72f9dec35031c6ec23584de6842bfbc4610a9678868d14cdfb0357", size = 31222, upload-time = "2025-06-17T18:47:34.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532, upload-time = "2025-06-17T18:47:30.726Z" }, +] + +[[package]] +name = "librt" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/40/08/9e7f6b5d2b5bed6ad055cdd5925f192bb403a51280f86b56554d9d0699a2/librt-0.11.0.tar.gz", hash = "sha256:075dc3ef4458a278e0195cbf6ac9d38808d9b906c5a6c7f7f79c3888276a3fb1", size = 200139, upload-time = "2026-05-10T18:17:25.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/10/37fd9e9ba96cb0bd742dfb20fc3d082e54bdbec759d7300df927f360ef07/librt-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6e94ebfcfa2d5e9926d6c3b9aa4617ffc42a845b4321fb84021b872358c82a0f", size = 141706, upload-time = "2026-05-10T18:15:16.129Z" }, + { url = "https://files.pythonhosted.org/packages/cf/72/1b1466f358e4a0b728051f69bc27e67b432c6eaa2e05b88db49d3785ae0d/librt-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae627397a2f351560440d872d6f7c8dbb4072e57868e7b2fc5b8b430fe489d45", size = 142605, upload-time = "2026-05-10T18:15:18.148Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/ed26dd2f6bc9a0baf48306433e579e8d354d70b2bcb78134ed950a5d0e1e/librt-0.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc329359321b67d24efdf4bc69012b0597001649544db662c001db5a0184794c", size = 476555, upload-time = "2026-05-10T18:15:19.569Z" }, + { url = "https://files.pythonhosted.org/packages/66/fe/11891191c0e0a3fd617724e891f6e67a71a7658974a892b9a9a97fdb2977/librt-0.11.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:7e82e642ab0f7608ce2fe53d76ca2280a9ee33a1b06556142c7c6fe80a86fc33", size = 468434, upload-time = "2026-05-10T18:15:20.87Z" }, + { url = "https://files.pythonhosted.org/packages/6f/50/5ec949d7f9ce1a07af903aa3e13abb98b717923bdead6e719b2f824ccc07/librt-0.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88145c15c67731d54283d135b03244028c750cc9edc334a96a4f5950ebdb2884", size = 496918, upload-time = "2026-05-10T18:15:22.616Z" }, + { url = "https://files.pythonhosted.org/packages/ea/c4/177336c7524e34875a38bf668e88b193a6723a4eb4045d07f74df6e1506c/librt-0.11.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9d36a51b3d93320b686588e27123f4995804dbf1bce81df78c02fc3c6eea9280", size = 490334, upload-time = "2026-05-10T18:15:24.2Z" }, + { url = "https://files.pythonhosted.org/packages/13/1f/da3112f7569eda3b49f9a2629bae1fe059812b6085df16c885f6454dff49/librt-0.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3ac06a2a8b246327f11e186a53a100a4d5c7ed52346367e5ec751d51586c", size = 511287, upload-time = "2026-05-10T18:15:26.226Z" }, + { url = "https://files.pythonhosted.org/packages/fa/94/03fec301522e172d105581431223be56b27594ff46440ebfbb658a3735d5/librt-0.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:461bbceede621f1ffb8839755f8663e886087ee7af16294cab7fb4d782c62eeb", size = 517202, upload-time = "2026-05-10T18:15:27.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/6e/339f6e5a7b413ce014f1917a756dae630fe59cc99f34153205b1cb540901/librt-0.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0cad8a4d6a8ff03c9b76f9414caccd78e7cfbc8a2e12fa334d8e1d9932753783", size = 497517, upload-time = "2026-05-10T18:15:29.614Z" }, + { url = "https://files.pythonhosted.org/packages/cd/43/acdd5ce317cb46e8253ca9bfbdb8b12e68a24d745949336a7f3d5fb79ba0/librt-0.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f37aa505b3cf60701562eddb32df74b12a9e380c207fd8b06dd157a943ac7ea0", size = 538878, upload-time = "2026-05-10T18:15:30.928Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/7a25bb12e3172839f647f196b3e988318b7bb1ca7501732a225c4dce2ec0/librt-0.11.0-cp310-cp310-win32.whl", hash = "sha256:94663a21534637f0e787ec2a2a756022df6e5b7b2335a5cdd7d8e33d68a2af89", size = 100070, upload-time = "2026-05-10T18:15:32.551Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0d/ebbcf4d77999c02c937b05d2b90ff4cd4dcc7e9a365ba132329ac1fe7a0f/librt-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:dec7db73758c2b54953fd8b7fe348c45188fe26b39ee18446196edd08453a5d4", size = 117918, upload-time = "2026-05-10T18:15:33.678Z" }, + { url = "https://files.pythonhosted.org/packages/fe/87/2bf31fe17587b29e3f93ec31421e2b1e1c3e349b8bf6c7c313dbad1d5340/librt-0.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:93d95bd45b7d58343d8b90d904450a545144eec19a002511163426f8ab1fae29", size = 141092, upload-time = "2026-05-10T18:15:34.795Z" }, + { url = "https://files.pythonhosted.org/packages/cf/08/5c5bf772920b7ebac6e32bc91a643e0ab3870199c0b542356d3baa83970a/librt-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ee278c769a713638cdacd4c0436d72156e75df3ebc0166ab2b9dc43acc386c9", size = 142035, upload-time = "2026-05-10T18:15:36.242Z" }, + { url = "https://files.pythonhosted.org/packages/06/20/662a03d254e5b000d838e8b345d83303ddb768c080fd488e40634c0fa66b/librt-0.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f230cb1cbc9faaa616f9a678f530ebcf186e414b6bcbd88b960e4ba1b92428d5", size = 475022, upload-time = "2026-05-10T18:15:37.56Z" }, + { url = "https://files.pythonhosted.org/packages/de/f3/aa81523e45184c6ec23dc7f63263362ec55f80a09d424c012359ecbe7e35/librt-0.11.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5d63c855d86938d9de93e265c9bd8c705b51ec494de5738340ee93767a686e4b", size = 467273, upload-time = "2026-05-10T18:15:39.182Z" }, + { url = "https://files.pythonhosted.org/packages/6b/6f/59c74b560ca8853834d5501d589c8a2519f4184f273a085ffd0f37a1cc47/librt-0.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f028be9e96a08d31df3479ac80d99be374d17f3b78e4796b3fd3c913d4e89", size = 497083, upload-time = "2026-05-10T18:15:40.634Z" }, + { url = "https://files.pythonhosted.org/packages/fe/7b/5aa4d2c9600a719401160bf7055417df0b2a47439b9d88286ce45e56b65f/librt-0.11.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:258d73a0aa66a055e65b2e4d1b8cdb23b9d132c5bb915d9547d804fcaed116cc", size = 489139, upload-time = "2026-05-10T18:15:41.934Z" }, + { url = "https://files.pythonhosted.org/packages/d6/31/9143803d7da6856a69153785768c4936864430eec0fd9461c3ea527d9922/librt-0.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0827efe7854718f04aaddf6496e96960a956e676fe1d0f04eb41511fd8ad06d5", size = 508442, upload-time = "2026-05-10T18:15:43.206Z" }, + { url = "https://files.pythonhosted.org/packages/2f/5a/bce08184488426bda4ccc2c4964ac048c8f68ae89bd7120082eef4233cfd/librt-0.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7753e57d6e12d019c0d8786f1c09c709f4c3fcc57c3887b24e36e6c06ec938b7", size = 514230, upload-time = "2026-05-10T18:15:44.761Z" }, + { url = "https://files.pythonhosted.org/packages/89/8c/bb5e213d254b7505a0e658da199d8ab719086632ce09eef311ab27976523/librt-0.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11bd19822431cc21af9f27374e7ae2e58103c7d98bda823536a6c47f6bb2bb3d", size = 494231, upload-time = "2026-05-10T18:15:46.308Z" }, + { url = "https://files.pythonhosted.org/packages/9d/fb/541cdad5b1ab1300398c74c4c9a497b88e5074c21b1244c8f49731d3a284/librt-0.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:22bdf239b219d3993761a148ffa134b19e52e9989c84f845d5d7b71d70a17412", size = 537585, upload-time = "2026-05-10T18:15:47.629Z" }, + { url = "https://files.pythonhosted.org/packages/8f/f2/464bb69295c320cb06bddb4f14a4ec67934ee14b2bffb12b19fb7ab287ba/librt-0.11.0-cp311-cp311-win32.whl", hash = "sha256:46c60b61e308eb535fbd6fa622b1ee1bb2815691c1ad9c98bf7b84952ec3bc8d", size = 100509, upload-time = "2026-05-10T18:15:49.157Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e7/a17ee1788f9e4fbf548c19f4afa07c92089b9e24fef6cb2410863781ef4c/librt-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:902e546ff044f579ff1c953ff5fce97b636fe9e3943996b2177710c6ef076f73", size = 118628, upload-time = "2026-05-10T18:15:50.345Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c7/6c766214f9f9903bcfcfbef97d807af8d8f5aa3502d247858ab17582d212/librt-0.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:65ac3bc20f78aa0ee5ae84baa68917f89fef4af63e941084dd019a0d0e749f0c", size = 103122, upload-time = "2026-05-10T18:15:52.068Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d0/07c77e067f0838949b43bd89232c29d72efebb9d2801a9750184eb706b71/librt-0.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b87504f1690a23b9a2cca841191a04f83895d4fc2dd04df91d82b1a04ca2ad46", size = 144147, upload-time = "2026-05-10T18:15:53.227Z" }, + { url = "https://files.pythonhosted.org/packages/7a/24/8493538fa4f62f982686398a5b8f68008138a75086abdea19ade64bf4255/librt-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40071fc5fe0ce8daa6de616702314a01e1250711682b0523d6ab8d4525910cb3", size = 143614, upload-time = "2026-05-10T18:15:54.657Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1e/f8bad050810d9171f34a1648ed910e56814c2ba61639f2bd53c6377ae24b/librt-0.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:137e79445c896a0ea7b265f52d23954e05b64222ee1af69e2cb34219067cbb67", size = 485538, upload-time = "2026-05-10T18:15:56.117Z" }, + { url = "https://files.pythonhosted.org/packages/c0/fe/3594ebfbaf03084ba4b120c9ba5c3183fd938a48725e9bbe6ff0a5159ad8/librt-0.11.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:cca6644054e78746d8d4ef238681f9c34ff8b584fe6b988ecebb8db3b15e622a", size = 479623, upload-time = "2026-05-10T18:15:57.544Z" }, + { url = "https://files.pythonhosted.org/packages/b0/da/5d1876984b3746c85dbd219dbfcb73c85f54ee263fd32e5b2a632ec14571/librt-0.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5b0eea49f5562861ee8d757a32ef7d559c1d35be2aaaa1ec28941d74c9ffc8a", size = 513082, upload-time = "2026-05-10T18:15:58.805Z" }, + { url = "https://files.pythonhosted.org/packages/19/6e/55bdf5d5ca00c3e18430690bf2c953d8d3ffd3c337418173d33dec985dc9/librt-0.11.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0d1029d7e1ae1a7e647ed6fb5df8c4ce2dffefb7a9f5fd1376a4554d96dac09f", size = 508105, upload-time = "2026-05-10T18:16:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/f1f23a7c595ee90ece4d35c851e5d104b1311a887ed1b4ac4c35bbd13da8/librt-0.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bc3ce6b33c5828d9e80592011a5c584cb2ce86edbc4088405f70da47dc1d1b3b", size = 522268, upload-time = "2026-05-10T18:16:01.708Z" }, + { url = "https://files.pythonhosted.org/packages/b6/02/5720f5697a7f54b78b3aefbe20df3a48cedcff1276618c4aa481177942ed/librt-0.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:936c5995f3514a42111f20099397d8177c79b4d7e70961e396c6f5a0a3566766", size = 527348, upload-time = "2026-05-10T18:16:03.496Z" }, + { url = "https://files.pythonhosted.org/packages/50/db/b4a47c6f91db4ff76348a0b3dd0cc65e090a078b765a810a62ff9434c3d3/librt-0.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9bc0ca6ad9381cbe8e4aa6e5726e4c80c78115a6e9723c599ed1d73e092bc49d", size = 516294, upload-time = "2026-05-10T18:16:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/9e/58/9384b2f4eb1ed1d273d40948a7c5c4b2360213b402ef3be4641c06299f9c/librt-0.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:070aa8c26c0a74774317a72df8851facc7f0f012a5b406557ac56992d92e1ec8", size = 553608, upload-time = "2026-05-10T18:16:06.839Z" }, + { url = "https://files.pythonhosted.org/packages/21/7b/5aa8848a7c6a9278c79375146da1812e695754ceec5f005e6043461a7315/librt-0.11.0-cp312-cp312-win32.whl", hash = "sha256:6bf14feb84b05ae945277395451998c89c54d0def4070eb5c08de544930b245a", size = 101879, upload-time = "2026-05-10T18:16:08.103Z" }, + { url = "https://files.pythonhosted.org/packages/37/33/8a745436944947575b584231750a41417de1a38cf6a2e9251d1065651c09/librt-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:75672f0bc524ede266287d532d7923dbce94c7514ad07627bac3d0c6d92cc4d9", size = 119831, upload-time = "2026-05-10T18:16:09.174Z" }, + { url = "https://files.pythonhosted.org/packages/59/67/a6739ac96e28b7855808bdb0370e250606104a859750d209e5a0716fe7ab/librt-0.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f10cf143e4a9bb0f4f5af568a00df94a2d69ef41c2579584454bb0fe5cc642c", size = 103470, upload-time = "2026-05-10T18:16:10.369Z" }, + { url = "https://files.pythonhosted.org/packages/82/61/e59168d4d0bf2bf90f4f0caf7a001bfc60254c3af4586013b04dc3ef517b/librt-0.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78dc31f7fdfe9c9d0eb0e8f42d139db230e826415bbcabd9f0e9faaaee909894", size = 144119, upload-time = "2026-05-10T18:16:11.771Z" }, + { url = "https://files.pythonhosted.org/packages/61/fd/caa1d60b12f7dd79ccea23054e06eeaebe266a5f52c40a6b651069200ce5/librt-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fa475675db22290c3158e1d42326d0f5a65f04f44a0e68c3630a25b53560fb9c", size = 143565, upload-time = "2026-05-10T18:16:13.334Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/dc744f5c2b4978d48db970be29f22716d3413d28b14ad99740817315cf2c/librt-0.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:621db29691044bdeda22e789e482e1b0f3a985d90e3426c9c6d17606416205ea", size = 485395, upload-time = "2026-05-10T18:16:14.729Z" }, + { url = "https://files.pythonhosted.org/packages/8f/21/7f8e97a1e4dae952a5a95948f6f8507a173bc1e669f54340bba6ca1ca31b/librt-0.11.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:a9010e2ed5b3a9e158c5fd966b3ab7e834bb3d3aacc8f66c91dd4b57a3799230", size = 479383, upload-time = "2026-05-10T18:16:16.321Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6d/d8ee9c114bebf2c50e29ec2aa940826fccb62a645c3e4c18760987d0e16d/librt-0.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c39513d8b7477a2e1ed8c43fc21c524e8d5a0f8d4e8b7b074dbdbe7820a08e2", size = 513010, upload-time = "2026-05-10T18:16:17.647Z" }, + { url = "https://files.pythonhosted.org/packages/f0/43/0b5708af2bd30a46400e72ba6bdaa8f066f15fb9a688527e34220e8d6c06/librt-0.11.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7aef3cf1d5af86e770ab04bfd993dfc4ae8b8c17f66fb77dd4a7d50de7bbb1a3", size = 508433, upload-time = "2026-05-10T18:16:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/4a/50/356187247d09013490481033183b3532b58acf8028bcb34b2b56a375c9b2/librt-0.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:557183ddc36babe46b27dd60facbd5adb4492181a5be887587d57cda6e092f21", size = 522595, upload-time = "2026-05-10T18:16:20.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/c6ac4240899c7f3248079d5a9900debe0dadb3fdeaf856684c987105ba47/librt-0.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83d3e1f72bd42f6c5c0b7daec530c3f829bd02db42c70b8ddf0c2d90a2459930", size = 527255, upload-time = "2026-05-10T18:16:22.352Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b5/a81322dbeedeeaf9c1ee6f001734d28a09d8383ac9e6779bc24bbd0743c6/librt-0.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4ce1f21fbe589bc1afd7872dece84fb0e1144f794a288e58a10d2c54a55c43be", size = 516847, upload-time = "2026-05-10T18:16:23.627Z" }, + { url = "https://files.pythonhosted.org/packages/ae/66/6e6323787d592b55204a42595ff1102da5115601b53a7e9ddebc889a6da5/librt-0.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b09f7044ea2b64c9da42fd3d335666518cfd1c6e8a182c95da73d0214b41e", size = 553920, upload-time = "2026-05-10T18:16:25.025Z" }, + { url = "https://files.pythonhosted.org/packages/9c/21/623f8ca230857102066d9ca8c6c1734995908c4d0d1bee7bb2ef0021cb33/librt-0.11.0-cp313-cp313-win32.whl", hash = "sha256:78fddc31cd4d3caa897ad5d31f856b1faadc9474021ad6cb182b9018793e254e", size = 101898, upload-time = "2026-05-10T18:16:26.649Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1d/b4ebd44dd723f768469007515cb92251e0ae286c94c140f374801140fa74/librt-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ca8aa88751a775870b764e93bad5135385f563cb8dcee399abf034ea4d3cb47", size = 119812, upload-time = "2026-05-10T18:16:27.859Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e4/b2f4ca7965ca373b491cdb4bc25cdb30c1649ca81a8782056a83850292a9/librt-0.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:96f044bb325fd9cf1a723015638c219e9143f0dfbc0ca54c565df2b7fc748b44", size = 103448, upload-time = "2026-05-10T18:16:29.066Z" }, + { url = "https://files.pythonhosted.org/packages/29/eb/dbce197da4e227779e56b5735f2decc3eb36e55a1cdbf1bd65d6639d76c1/librt-0.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4a017a95e5837dc15a8c5661d60e05daa96b90908b1aa6b7acdf443cd25c8ebd", size = 143345, upload-time = "2026-05-10T18:16:30.674Z" }, + { url = "https://files.pythonhosted.org/packages/76/a3/254bebd0c11c8ba684018efb8006ff22e466abce445215cca6c778e7d9de/librt-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b1ecbd9819deccc39b7542bf4d2a740d8a620694d39989e58661d3763458f8d4", size = 143131, upload-time = "2026-05-10T18:16:32.037Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3f/f77d6122d21ac7bf6ae8a7dfced1bd2a7ac545d3273ebdcaf8042f6d619f/librt-0.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7da327dacd7be8f8ec36547373550744a3cc0e536d54665cd83f8bcd961200e8", size = 477024, upload-time = "2026-05-10T18:16:33.493Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0a/2c996dadebaa7d9bbbd43ef2d4f3e66b6da545f838a41694ef6172cebec8/librt-0.11.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:0dc56b1f8d06e60db362cc3fdae206681817f86ce4725d34511473487f12a34b", size = 474221, upload-time = "2026-05-10T18:16:34.864Z" }, + { url = "https://files.pythonhosted.org/packages/0a/7e/f5d92af8486b8272c23b3e686b46ff72d89c8169585eb61eef01a2ac7147/librt-0.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05fb8fb2ab90e21c8d12ea240d744ad514da9baf381ebfa70d91d20d21713175", size = 505174, upload-time = "2026-05-10T18:16:36.705Z" }, + { url = "https://files.pythonhosted.org/packages/af/1a/cb0734fe86398eb33193ab753b7326255c74cac5eb09e76b9b16536e7adb/librt-0.11.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cae74872be221df4374d10fec61f93ed1513b9546ea84f2c0bf73ab3e9bd0b03", size = 497216, upload-time = "2026-05-10T18:16:38.418Z" }, + { url = "https://files.pythonhosted.org/packages/18/06/094820f91558b66e29943c0ec41c9914f460f48dd51fc503c3101e10842d/librt-0.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:32bcc918c0148eb7e3d57385125bac7e5f9e4359d05f07448b09f6f778c2f31c", size = 513921, upload-time = "2026-05-10T18:16:39.848Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c2/00de9018871a282f530cacb457d5ec0428f6ac7e6fedde9aff7468d9fb04/librt-0.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f9743fc99135d5f78d2454435615f6dec0473ca507c26ce9d92b10b562a280d3", size = 520850, upload-time = "2026-05-10T18:16:41.471Z" }, + { url = "https://files.pythonhosted.org/packages/51/9d/64631832348fd1834fb3a61b996434edddaaf25a31d03b0a76273159d2cf/librt-0.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5ba067f4aadae8fda802d91d2124c90c42195ff32d9161d3549e6d05cfe26f96", size = 504237, upload-time = "2026-05-10T18:16:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ec/ae5525eb16edc827a044e7bb8777a455ff95d4bca9379e7e6bddd7383647/librt-0.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:de3bf945454d032f9e390b85c4072e0a0570bf825421c8be0e71209fa65e1abe", size = 546261, upload-time = "2026-05-10T18:16:44.408Z" }, + { url = "https://files.pythonhosted.org/packages/5a/09/adce371f27ca039411da9659f7430fcc2ba6cd0c7b3e4467a0f091be7fa9/librt-0.11.0-cp314-cp314-win32.whl", hash = "sha256:d2277a05f6dcb9fd13db9566aac4fabd68c3ea1ea46ee5567d4eef8efa495a2f", size = 96965, upload-time = "2026-05-10T18:16:46.039Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ee/8ac720d98548f173c7ce2e632a7ca94673f74cacd5c8162a84af5b35958a/librt-0.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:ab73e8db5e3f564d812c1f5c3a175930a5f9bc96ccb5e3b22a34d7858b401cf7", size = 115151, upload-time = "2026-05-10T18:16:47.133Z" }, + { url = "https://files.pythonhosted.org/packages/94/20/c900cf14efeb09b6bef2b2dff20779f73464b97fd58d1c6bccc379588ae3/librt-0.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:aea3caa317752e3a466fa8af45d91ee0ea8c7fdd96e42b0a8dd9b76a7931eba1", size = 98850, upload-time = "2026-05-10T18:16:48.597Z" }, + { url = "https://files.pythonhosted.org/packages/0c/71/944bfe4b64e12abffcd3c15e1cce07f72f3d55655083786285f4dedeb532/librt-0.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d1b36540d7aaf9b9101b3a6f376c8d8e9f7a9aec93ed05918f2c69d493ffef72", size = 151138, upload-time = "2026-05-10T18:16:49.839Z" }, + { url = "https://files.pythonhosted.org/packages/b6/10/99e64a5c86989357fda078c8143c533389585f6473b7439172dd8f3b3b2d/librt-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:efbb343ab2ce3540f4ecbe6315d677ed70f37cd9a72b1e58066c918ca83acbaa", size = 151976, upload-time = "2026-05-10T18:16:51.062Z" }, + { url = "https://files.pythonhosted.org/packages/21/31/5072ad880946d83e5ea4147d6d018c78eefce85b77819b19bdd0ee229435/librt-0.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0dd688aab3f7914d3e6e5e3554978e0383312fb8e771d84be008a35b9ee548", size = 557927, upload-time = "2026-05-10T18:16:52.632Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8d/70b5fb7cfbab60edbe7381614ab985da58e144fbf465c86d44c95f43cdca/librt-0.11.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f5fb36b8c6c63fdcbb1d526d94c0d1331610d43f4118cc1beb4efef4f3faacb2", size = 539698, upload-time = "2026-05-10T18:16:53.934Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a3/ba3495a0b3edbd24a4cae0d1d3c64f39a9fc45d06e812101289b50c1a619/librt-0.11.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a9a237d13addb93715b6fee74023d5ee3469b53fce527626c0e088aa585805f", size = 577162, upload-time = "2026-05-10T18:16:55.589Z" }, + { url = "https://files.pythonhosted.org/packages/f7/db/36e25fb81f99937ff1b96612a1dc9fd66f039cb9cc3aee12c01fac31aab9/librt-0.11.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5ddd17bd87b2c56ddd60e546a7984a2e64c4e8eab92fb4cf3830a48ad5469d51", size = 566494, upload-time = "2026-05-10T18:16:56.975Z" }, + { url = "https://files.pythonhosted.org/packages/33/0d/3f622b47f0b013eeb9cf4cc07ae9bfe378d832a4eec998b2b209fe84244d/librt-0.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd43992b4473d42f12ff9e68326079f0696d9d4e6000e8f39a0238d482ba6ee2", size = 596858, upload-time = "2026-05-10T18:16:58.374Z" }, + { url = "https://files.pythonhosted.org/packages/a9/02/71b90bc93039c46a2000651f6ad60122b114c8f54c4ad306e0e96f5b75ad/librt-0.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:f8e3e8056dd674e279741485e2e512d6e9a751c7455809d0114e6ebf8d781085", size = 590318, upload-time = "2026-05-10T18:16:59.676Z" }, + { url = "https://files.pythonhosted.org/packages/04/04/418cb3f75621e2b761fb1ab0f017f4d70a1a72a6e7c74ee4f7e8d198c2f3/librt-0.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c1f708d8ae9c56cf38a903c44297243d2ec83fd82b396b977e0144a3e76217e3", size = 575115, upload-time = "2026-05-10T18:17:01.007Z" }, + { url = "https://files.pythonhosted.org/packages/cc/2c/5a2183ac58dd911f26b5d7e7d7d8f1d87fcecdddd99d6c12169a258ff62c/librt-0.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0add982e0e7b9fc14cf4b33789d5f13f66581889b88c2f58099f6ce8f92617bd", size = 617918, upload-time = "2026-05-10T18:17:02.682Z" }, + { url = "https://files.pythonhosted.org/packages/15/1f/dc6771a52592a4451be6effa200cbfc9cec61e4393d3033d81a9d307961d/librt-0.11.0-cp314-cp314t-win32.whl", hash = "sha256:2b481d846ac894c4e8403c5fd0e87c5d11d6499e404b474602508a224ff531c8", size = 103562, upload-time = "2026-05-10T18:17:03.99Z" }, + { url = "https://files.pythonhosted.org/packages/62/4a/7d1415567027286a75ba1093ec4aca11f073e0f559c530cf3e0a757ad55c/librt-0.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:28edb433edde181112a908c78907af28f964eabc15f4dd16c9d66c834302677c", size = 124327, upload-time = "2026-05-10T18:17:05.465Z" }, + { url = "https://files.pythonhosted.org/packages/ce/62/b40b382fa0c66fee1478073eb8db352a4a6beda4a1adccf1df911d8c289c/librt-0.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dee008f20b542e3cd162ba338a7f9ec0f6d23d395f66fe8aeeec3c9d067ea253", size = 102572, upload-time = "2026-05-10T18:17:06.809Z" }, +] + +[[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.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.10.9" +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' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/6f/340b04986e67aac6f66c5145ce68bf72c64bed30f92c8913499a6e6b8f99/matplotlib-3.10.9-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77210dce9cb8153dffc967efaae990543392563d5a376d4dd8539bebcb0ed217", size = 8296625, upload-time = "2026-04-24T00:11:43.376Z" }, + { url = "https://files.pythonhosted.org/packages/bb/2f/127081eb83162053ebb9678ceac64220b93a663e0167432566e9c7c82aab/matplotlib-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1e7698ac9868428e84d2c967424803b2472ff7167d9d6590d4204ed775343c3b", size = 8188790, upload-time = "2026-04-24T00:11:46.556Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b7/d8bcec2626c35f96972bff656299fef4578113ea6193c8fdad324710410c/matplotlib-3.10.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aa972116abb4c9d201bf245620b433726cb6856f3bef6a78f776a00f5c92d37", size = 8769389, upload-time = "2026-04-24T00:11:48.959Z" }, + { url = "https://files.pythonhosted.org/packages/12/49/b78e214a527ea732033b7f4d37f7afb504d74ba9d134bd47938230dfb8b1/matplotlib-3.10.9-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae2f11957b27ce53497dd4d7b235c4d4f1faf383dfb39d0c5beb833bff883294", size = 9589657, upload-time = "2026-04-24T00:11:51.915Z" }, + { url = "https://files.pythonhosted.org/packages/5f/15/5246f7b43beae19c74dfee651d58d6cc8112e06f77adb4e88cc04f2e3a23/matplotlib-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b049278ddce116aaa1c1377ebf58adea909132dfce0281cf7e3a1ea9fc2e2c65", size = 9651983, upload-time = "2026-04-24T00:11:54.766Z" }, + { url = "https://files.pythonhosted.org/packages/75/77/5acecfe672ba0fa1b8c0454f69ce155d1e6fc5852fa7206bf9afaf767121/matplotlib-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:82834c3c292d24d3a8aae77cd2d20019de69d692a34a970e4fdb8d33e2ea3dda", size = 8199701, upload-time = "2026-04-24T00:11:58.389Z" }, + { url = "https://files.pythonhosted.org/packages/4c/8c/290f021104741fea63769c31494f5324c0cd249bf536a65a4350767b1f22/matplotlib-3.10.9-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:68cfdcede415f7c8f5577b03303dd94526cdb6d11036cecdc205e08733b2d2bb", size = 8306860, upload-time = "2026-04-24T00:12:01.207Z" }, + { url = "https://files.pythonhosted.org/packages/51/18/325cd32ece1120d1da51cc4e4294c6580190699490183fc2fe8cb6d61ec5/matplotlib-3.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfca0129678bd56379db26c52b5d77ed7de314c047492fbdc763aa7501710cfb", size = 8199254, upload-time = "2026-04-24T00:12:04.239Z" }, + { url = "https://files.pythonhosted.org/packages/79/db/e28c1b83e3680740aa78925f5fb2ae4d16207207419ad75ea9fe604f8676/matplotlib-3.10.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e436d155fa8a3399dc62683f8f5d0e2e50d25d0144a73edd73f82eec8f4abfb", size = 8777092, upload-time = "2026-04-24T00:12:06.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/fa/3ce7adfe9ba101748f465211660d9c6374c876b671bdb8c2bb6d347e8b94/matplotlib-3.10.9-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56fc0bd271b00025c6edfdc7c2dcd247372c8e1544971d62e1dc7c17367e8bf9", size = 9595691, upload-time = "2026-04-24T00:12:09.706Z" }, + { url = "https://files.pythonhosted.org/packages/36/c4/6960a76686ed668f2c60f84e9799ba4c0d56abdb36b1577b60c1d061d1ec/matplotlib-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5a6104ed666402ba5106d7f36e0e0cdca4e8d7fa4d39708ca88019e2835a2eb", size = 9659771, upload-time = "2026-04-24T00:12:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0d/271aace3342157c64700c9ff4c59c7b392f3dbab393692e8db6fbe7ab96c/matplotlib-3.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:d730e984eddf56974c3e72b6129c7ca462ac38dc624338f4b0b23eb23ecba00f", size = 8205112, upload-time = "2026-04-24T00:12:15.773Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ee/cb57ad4754f3e7b9174ce6ce66d9205fb827067e48a9f58ac09d7e7d6b77/matplotlib-3.10.9-cp311-cp311-win_arm64.whl", hash = "sha256:51bf0ddbdc598e060d46c16b5590708f81a1624cefbaaf62f6a81bf9285b8c80", size = 8132310, upload-time = "2026-04-24T00:12:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/35/c6/5581e26c72233ebb2a2a6fed2d24fb7c66b4700120b813f51b0555acf0b6/matplotlib-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0c3c28d9fbcc1fe7a03be236d73430cf6409c41fb2383a7ac52fe932b072cb1", size = 8319908, upload-time = "2026-04-24T00:12:21.323Z" }, + { url = "https://files.pythonhosted.org/packages/b7/18/4880dd762e40cd360c1bf06e890c5a97b997e91cb324602b1a19950ad5ce/matplotlib-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cb28c2bd769aa3e98322c6ab09854cbcc52ab69d2759d681bba3e327b2b320", size = 8216016, upload-time = "2026-04-24T00:12:23.4Z" }, + { url = "https://files.pythonhosted.org/packages/32/91/d024616abdba99e83120e07a20658976f6a343646710760c4a51df126029/matplotlib-3.10.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae20801130378b82d647ff5047c07316295b68dc054ca6b3c13519d0ea624285", size = 8789336, upload-time = "2026-04-24T00:12:26.096Z" }, + { url = "https://files.pythonhosted.org/packages/5c/04/030a2f61ef2158f5e4c259487a92ac877732499fb33d871585d89e03c42d/matplotlib-3.10.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c63ebcd8b4b169eb2f5c200552ae6b8be8999a005b6b507ed76fb8d7d674fe2", size = 9604602, upload-time = "2026-04-24T00:12:29.052Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c2/541e4d09d87bb6b5830fc28b4c887a9a8cf4e1c6cee698a8c05552ae2003/matplotlib-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d75d11c949914165976c621b2324f9ef162af7ebf4b057ddf95dd1dba7e5edcf", size = 9670966, upload-time = "2026-04-24T00:12:32.131Z" }, + { url = "https://files.pythonhosted.org/packages/04/a1/4571fc46e7702de8d0c2dc54ad1b2f8e29328dea3ee90831181f7353d93c/matplotlib-3.10.9-cp312-cp312-win_amd64.whl", hash = "sha256:d091f9d758b34aaaaa6331d13574bf01891d903b3dec59bfff458ef7551de5d6", size = 8217462, upload-time = "2026-04-24T00:12:35.226Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d0/2269edb12aa30c13c8bcc9382892e39943ce1d28aab4ec296e0381798e81/matplotlib-3.10.9-cp312-cp312-win_arm64.whl", hash = "sha256:10cc5ce06d10231c36f40e875f3c7e8050362a4ee8f0ee5d29a6b3277d57bb42", size = 8136688, upload-time = "2026-04-24T00:12:37.442Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d3/8d4f6afbecb49fc04e060a57c0fce39ea51cc163a6bd87303ccd698e4fa6/matplotlib-3.10.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b580440f1ff81a0e34122051a3dfabb7e4b7f9e380629929bde0eff9af72165f", size = 8320331, upload-time = "2026-04-24T00:12:39.688Z" }, + { url = "https://files.pythonhosted.org/packages/63/d9/9e14bc7564bf92d5ffa801ae5fac819ce74b925dfb55e3ebde61a3bbad3e/matplotlib-3.10.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b1b745c489cd1a77a0dc1120a05dc87af9798faebc913601feb8c73d89bf2d1e", size = 8216461, upload-time = "2026-04-24T00:12:42.494Z" }, + { url = "https://files.pythonhosted.org/packages/8a/17/4402d0d14ccf1dfc70932600b68097fbbf9c898a4871d2cbbe79c7801a32/matplotlib-3.10.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f3bcac1ca5ed000a6f4337d47ba67dfddf37ed6a46c15fd7f014997f7bf865f", size = 8790091, upload-time = "2026-04-24T00:12:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0b/322aeec06dd9b91411f92028b37d447342770a24392aa4813e317064dad5/matplotlib-3.10.9-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a8d66a55def891c33147ba3ba9bfcabf0b526a43764c818acbb4525e5ed0838", size = 9605027, upload-time = "2026-04-24T00:12:47.583Z" }, + { url = "https://files.pythonhosted.org/packages/74/88/5f13482f55e7b00bcfc09838b093c2456e1379978d2a146844aae05350ad/matplotlib-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d843374407c4017a6403b59c6c81606773d136f3259d5b6da3131bc814542cc2", size = 9671269, upload-time = "2026-04-24T00:12:50.878Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/0840fd2f93da988ec660b8ad1984abe9f25d2aed22a5e394ff1c68c88307/matplotlib-3.10.9-cp313-cp313-win_amd64.whl", hash = "sha256:f4399f64b3e94cd500195490972ae1ee81170df1636fa15364d157d5bdd7b921", size = 8217588, upload-time = "2026-04-24T00:12:53.784Z" }, + { url = "https://files.pythonhosted.org/packages/47/b9/d706d06dd605c49b9f83a2aed8c13e3e5db70697d7a80b7e3d7915de6b17/matplotlib-3.10.9-cp313-cp313-win_arm64.whl", hash = "sha256:ba7b3b8ef09eab7df0e86e9ae086faa433efbfbdb46afcb3aa16aabf779469a8", size = 8136913, upload-time = "2026-04-24T00:12:56.501Z" }, + { url = "https://files.pythonhosted.org/packages/9b/45/6e32d96978264c8ca8c4b1010adb955a1a49cfaf314e212bbc8908f04a61/matplotlib-3.10.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:09218df8a93712bd6ea133e83a153c755448cf7868316c531cffcc43f69d1cc9", size = 8368019, upload-time = "2026-04-24T00:12:58.896Z" }, + { url = "https://files.pythonhosted.org/packages/86/0a/c8e3d3bba245f0f7fc424937f8ff7ef77291a36af3edb97ccd78aa93d84f/matplotlib-3.10.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:82368699727bfb7b0182e1aa13082e3c08e092fa1a25d3e1fd92405bff96f6d4", size = 8264645, upload-time = "2026-04-24T00:13:01.406Z" }, + { url = "https://files.pythonhosted.org/packages/3d/aa/5bf5a14fe4fed73a4209a155606f8096ff797aad89c6c35179026571133e/matplotlib-3.10.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3225f4e1edcb8c86c884ddf79ebe20ecd0a67d30188f279897554ccd8fded4dc", size = 8802194, upload-time = "2026-04-24T00:13:03.702Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5e/b4be852d6bba6fd15893fadf91ff26ae49cb91aac789e95dde9d342e664f/matplotlib-3.10.9-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de2445a0c6690d21b7eb6ce071cebad6d40a2e9bdf10d039074a96ba19797b99", size = 9622684, upload-time = "2026-04-24T00:13:06.647Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/ed428c971139112ef730f62770654d609467346d09d4b62617e1afd68a5a/matplotlib-3.10.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b2b9516251cb89ff618d757daec0e2ed1bf21248013844a853d87ef85ab3081d", size = 9680790, upload-time = "2026-04-24T00:13:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/e7/09/052e884aaf2b985c63cb79f715f1d5b6a3eaa7de78f6a52b9dbc077d5b53/matplotlib-3.10.9-cp313-cp313t-win_amd64.whl", hash = "sha256:e9fae004b941b23ff2edcf1567a857ed77bafc8086ffa258190462328434faf8", size = 8287571, upload-time = "2026-04-24T00:13:13.087Z" }, + { url = "https://files.pythonhosted.org/packages/f4/38/ae27288e788c35a4250491422f3db7750366fc8c97d6f36fbdecfc1f5518/matplotlib-3.10.9-cp313-cp313t-win_arm64.whl", hash = "sha256:6b63d9c7c769b88ab81e10dc86e4e0607cf56817b9f9e6cf24b2a5f1693b8e38", size = 8188292, upload-time = "2026-04-24T00:13:15.546Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e6/3bd8afd04949f02eabc1c17115ea5255e19cacd4d06fc5abdde4eeb0052c/matplotlib-3.10.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:172db52c9e683f5d12eaf57f0f54834190e12581fe1cc2a19595a8f5acb4e77d", size = 8321276, upload-time = "2026-04-24T00:13:18.318Z" }, + { url = "https://files.pythonhosted.org/packages/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97e35e8d39ccc85859095e01a53847432ba9a53ddf7986f7a54a11b73d0e143f", size = 8218218, upload-time = "2026-04-24T00:13:20.974Z" }, + { url = "https://files.pythonhosted.org/packages/85/8f/becc9722cafc64f5d2eb0b7c1bf5f585271c618a45dbd8fabeb021f898b6/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aba1615dabe83188e19d4f75a253c6a08423e04c1425e64039f800050a69de6b", size = 9608145, upload-time = "2026-04-24T00:13:23.228Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf8167e023ad956c15f36302911d5406bd99a9862c1a8499ea6f7c0e015dc2", size = 9885085, upload-time = "2026-04-24T00:13:25.849Z" }, + { url = "https://files.pythonhosted.org/packages/a5/fd/fa69f2221534e80cc5772ac2b7d222011a2acafc2ec7216d5dd174c864ae/matplotlib-3.10.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59476c6d29d612b8e9bb6ce8c5b631be6ba8f9e3a2421f22a02b192c7dd28716", size = 9672358, upload-time = "2026-04-24T00:13:28.906Z" }, + { url = "https://files.pythonhosted.org/packages/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl", hash = "sha256:336b9acc64d309063126edcdaca00db9373af3c476bb94388fe9c5a53ad13e6f", size = 8349970, upload-time = "2026-04-24T00:13:31.904Z" }, + { url = "https://files.pythonhosted.org/packages/64/dc/95d60ecaefe30680a154b52ea96ab4b0dab547f1fd6aa12f5fb655e89cae/matplotlib-3.10.9-cp314-cp314-win_arm64.whl", hash = "sha256:2dc9477819ffd78ad12a20df1d9d6a6bd4fec6aaa9072681465fddca052f1456", size = 8272785, upload-time = "2026-04-24T00:13:34.511Z" }, + { url = "https://files.pythonhosted.org/packages/70/a0/005d68bc8b8418300ce6591f18586910a8526806e2ab663933d9f20a41e9/matplotlib-3.10.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:da4e09638420548f31c354032a6250e473c68e5a4e96899b4844cf39ddea23fe", size = 8367999, upload-time = "2026-04-24T00:13:36.962Z" }, + { url = "https://files.pythonhosted.org/packages/22/05/1236cc9290be70b2498af20ca348add76e3fffe7f67b477db5133a84f3ea/matplotlib-3.10.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:345f6f68ecc8da0ca56fad2ea08fde1a115eda530079eca185d50a7bc3e146c6", size = 8264543, upload-time = "2026-04-24T00:13:39.851Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c2/071f5a5ff6c5bd63aaaf2f45c811d9bf2ced94bde188d9e1a519e21d0cba/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4edcfbd8565339aa62f1cd4012f7180926fdbe71850f7b0d3c379c175cd6b66c", size = 9622800, upload-time = "2026-04-24T00:13:42.296Z" }, + { url = "https://files.pythonhosted.org/packages/95/57/da7d1f10a85624b9e7db68e069dd94e58dc41dbf9463c5921632ecbe3661/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6be157fe17fc37cb95ac1d7374cf717ce9259616edec911a78d9d26dae8522d4", size = 9888561, upload-time = "2026-04-24T00:13:45.026Z" }, + { url = "https://files.pythonhosted.org/packages/67/b2/ef8d6bb59b0edb6c16c968b70f548aa13b54348972def5aa6ac85df67145/matplotlib-3.10.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e42042d54db34fda4e95a7bd3e5789c2a995d2dad3eb8850232ee534092fbbf", size = 9680884, upload-time = "2026-04-24T00:13:48.066Z" }, + { url = "https://files.pythonhosted.org/packages/61/1c/d21bfeb9931881ebe96bcfcff27c7ae4b160ae0ec291a714c42641a56d75/matplotlib-3.10.9-cp314-cp314t-win_amd64.whl", hash = "sha256:c27df8b3848f32a83d1767566595e43cfaa4460380974da06f4279a7ec143c39", size = 8432333, upload-time = "2026-04-24T00:13:51.008Z" }, + { url = "https://files.pythonhosted.org/packages/78/23/92493c3e6e1b635ccfff146f7b99e674808787915420373ac399283764c2/matplotlib-3.10.9-cp314-cp314t-win_arm64.whl", hash = "sha256:a49f1eadc84ca85fd72fa4e89e70e61bf86452df6f971af04b12c60761a0772c", size = 8324785, upload-time = "2026-04-24T00:13:53.633Z" }, + { url = "https://files.pythonhosted.org/packages/2c/2b/0e92ad0ac446633f928a1563db4aa8add407e1924faf0ded5b95b35afb27/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1872fb212a05b729e649754a72d5da61d03e0554d76e80303b6f83d1d2c0552b", size = 8293058, upload-time = "2026-04-24T00:13:56.339Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/74682fd369f5299ceda438fea2a0662e6383b85c9383fb9cdfcf04713e07/matplotlib-3.10.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:985f2238880e2e69093f588f5fe2e46771747febf0649f3cf7f7b7480875317f", size = 8186627, upload-time = "2026-04-24T00:13:58.623Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e8/368aab88f3c4cd8992800f31abfe0670c3e47540ba20a97e9fdbcde594b3/matplotlib-3.10.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6640f75af2c6148293caa0a2b39dd806a492dd66c8a8b04035813e33d0fd2585", size = 8764117, upload-time = "2026-04-24T00:14:01.684Z" }, + { url = "https://files.pythonhosted.org/packages/63/e2/9f66ca6a651a52abfe0d4964ce01439ed34f3f1e119de10ff3a07f403043/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:42fb814efabe95c06c1994d8ab5a8385f43a249e23badd3ba931d4308e5bca20", size = 8304420, upload-time = "2026-04-24T00:14:04.57Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e8/467c03568218792906aa87b5e7bb379b605e056ed0c74fe00c051786d925/matplotlib-3.10.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f76e640a5268850bfda54b5131b1b1941cc685e42c5fa98ed9f2d64038308cba", size = 8197981, upload-time = "2026-04-24T00:14:07.233Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/afead29192170917537934c6aff4b008c805fff7b1ccea0c79120d96beda/matplotlib-3.10.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3fc0364dfbe1d07f6d15c5ebd0c5bf89e126916e5a8667dd4a7a6e84c36653d4", size = 8774002, upload-time = "2026-04-24T00:14:09.816Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "maturin" +version = "1.13.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/1c/612d23d33ec21b9ae7ece7b3f0dd5f9dfd57b4009e9d2938165869ebd6ae/maturin-1.13.3.tar.gz", hash = "sha256:771e1e9e71a278e56db01552e0d1acfd1464259f9575b6e72842f893cd299079", size = 357934, upload-time = "2026-05-11T07:43:39.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/66/18c2aaac0b2a5dea9f1db5984ce83b905ad205cfc7c02d0091e707c0c2e7/maturin-1.13.3-py3-none-linux_armv6l.whl", hash = "sha256:3cc13929ca82aefa4adbf0f2c35419369796213c6fb0eb24e914945f50ef5d8c", size = 10190971, upload-time = "2026-05-11T07:43:10.431Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/26a988d092e4fd6a9523d46d44400a46cad7cdf3fd206ce702240c748aee/maturin-1.13.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:53b08bd075649ce96513ad9abf241a43cb685ed6e9e7790f8dbc2d66e95d8323", size = 19716714, upload-time = "2026-05-11T07:43:36.911Z" }, + { url = "https://files.pythonhosted.org/packages/82/5c/f3fd0e184255d9fc7e272c62af3dfa84c617b2577ef83af9ce615f5279cc/maturin-1.13.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4cd478e6e4c56251e48ed079b8efd55b30bc5c09cf695a1bdafaeb582ee735a0", size = 10194726, upload-time = "2026-05-11T07:43:07.05Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e1/f4edb69fb647b77c4769a9bfd4d6fb62961e653d164bc277ecdffac3ab61/maturin-1.13.3-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:a2675e25f313034ae6f57388cf14818f87d8961c4a96795287f3e155f59beb11", size = 10172781, upload-time = "2026-05-11T07:43:40.796Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7d/a1be934690cdcc3c6609769ceaad322ab7501c2ee5bafcac1b14d609e403/maturin-1.13.3-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:4667ef609ab446c1b5e0bfe4f9fb99699ab6d8548433f8d1a684256e0b67217f", size = 10682670, upload-time = "2026-05-11T07:43:13.132Z" }, + { url = "https://files.pythonhosted.org/packages/18/f5/372ae19b72ce8f6e37e5864ae4dc5b252ee9fce0619ccc3aa366aa3a7f97/maturin-1.13.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:3db93337ed97e60ffc878aa8b493cd7ae44d3a5e1a37256db3a4491f57565018", size = 10060363, upload-time = "2026-05-11T07:43:21.107Z" }, + { url = "https://files.pythonhosted.org/packages/cb/5b/c68340cca09368af0df80965dfabed4234205a492a93da00793c7b9aae20/maturin-1.13.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:1cc0a110b224ca90406b668a3e3c1f5a515062e59e26292f6dbaf5fd4909c6f3", size = 10017551, upload-time = "2026-05-11T07:43:33.916Z" }, + { url = "https://files.pythonhosted.org/packages/28/1e/f90fb2b000bad9e6d850cd5afb88b2f1e2a279cfb4de02ea40078484690e/maturin-1.13.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:c00ea6428dea17bf616fe93770837634454b28c2de1a876e42ef8036c616079a", size = 13301712, upload-time = "2026-05-11T07:43:26.492Z" }, + { url = "https://files.pythonhosted.org/packages/be/58/1670f68a8f04ccd7b90df11047bd9a046585310e84e1967cc9849cd1c5a3/maturin-1.13.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49fd6ab08da28098ccf37afca24cdba72376ba9c1eedf9dd25ff82ed771961ff", size = 10946765, upload-time = "2026-05-11T07:43:16.135Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ac/00c955c2ef134817b1a7bdaa76b0309e9c5291eb17d9ff88069eecd08bc2/maturin-1.13.3-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:b6741d7bf4af97da937528fd1e523c6ab54f53d9a21870fa735d6e67fd88e273", size = 10388661, upload-time = "2026-05-11T07:43:18.727Z" }, + { url = "https://files.pythonhosted.org/packages/97/c6/cbf8a51dde19c19aeba0d9b075095a2effb9b31fd312b1aae3ac79f8aea2/maturin-1.13.3-py3-none-win32.whl", hash = "sha256:0ef257e692cc756c87af5bea95ddfe7d3ac49d3376a7a87f728d63f06e7b6f8b", size = 8901838, upload-time = "2026-05-11T07:43:23.76Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ff/c6a50a59dc8313097d43ac5f4d74df6a500c8cb62b0dc9e054f53e203a48/maturin-1.13.3-py3-none-win_amd64.whl", hash = "sha256:def4a435ea9d2ee93b18ba579dc8c9cf898889a66f312cd379b5e374ec3e3ad6", size = 10340801, upload-time = "2026-05-11T07:43:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/6c/93/e32e79333f0902ba292b996f504f5f06be59587f7d02ab8d5ed1e3066445/maturin-1.13.3-py3-none-win_arm64.whl", hash = "sha256:2389fe92d017cea9d94e521fa0175314a4c52f79a1057b901fbc9f8686ef7d0b", size = 9706562, upload-time = "2026-05-11T07:43:31.743Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0", size = 56114, upload-time = "2026-05-13T09:03:38.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d", size = 66663, upload-time = "2026-05-13T09:03:37.76Z" }, +] + +[[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 = "mistune" +version = "3.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003, upload-time = "2026-05-03T14:33:22.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749, upload-time = "2026-05-03T14:33:20.551Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/f4da6f02cdffe04d6362210b807146a26044c88d839208aec273bb0d9184/more_itertools-11.1.0.tar.gz", hash = "sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d", size = 145772, upload-time = "2026-05-22T14:14:29.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" }, +] + +[[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.20.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "librt", marker = "platform_python_implementation != 'PyPy' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz", hash = "sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665", size = 3817349, upload-time = "2026-04-21T17:12:28.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/97/ce2502df2cecf2ef997b6c6527c4a223b92feb9e7b790cdc8dcd683f3a8a/mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cf5a4db6dca263010e2c7bff081c89383c72d187ba2cf4c44759aac970e2f0c4", size = 14457059, upload-time = "2026-04-21T17:06:14.935Z" }, + { url = "https://files.pythonhosted.org/packages/c9/34/417ee60b822cc80c0f3dc9f495ad7fd8dbb8d8b2cf4baf22d4046d25d01d/mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b0e817b518bff7facd7f85ea05b643ad8bdcce684cf29784987b0a7c8e1f997", size = 13346816, upload-time = "2026-04-21T17:10:41.433Z" }, + { url = "https://files.pythonhosted.org/packages/4a/85/e20951978702df58379d0bcc2e8f7ccdca4e78cd7dc66dd3ddbf9b29d517/mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97d7b9a485b40f8ca425460e89bf1da2814625b2da627c0dcc6aa46c92631d14", size = 13772593, upload-time = "2026-04-21T17:08:11.24Z" }, + { url = "https://files.pythonhosted.org/packages/63/a5/5441a13259ec516c56fd5de0fd96a69a9590ae6c5e5d3e5174aa84b97973/mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e1c12f6d2db3d78b909b5f77513c11eb7f2dd2782b96a3ab6dffc7d44575c99", size = 14656635, upload-time = "2026-04-21T17:09:54.042Z" }, + { url = "https://files.pythonhosted.org/packages/3b/51/b89c69157c5e1f19fd125a65d991166a26906e7902f026f00feebbcfa2b9/mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:89dce27e142d25ffbc154c1819383b69f2e9234dc4ed4766f42e0e8cb264ab5c", size = 14943278, upload-time = "2026-04-21T17:09:15.599Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/6b0eeecfe96d7cce1d71c66b8e03cb304aa70ec11f1955dc1d6b46aca3c3/mypy-1.20.2-cp310-cp310-win_amd64.whl", hash = "sha256:f376e37f9bf2a946872fc5fd1199c99310748e3c26c7a26683f13f8bdb756cbd", size = 10851915, upload-time = "2026-04-21T17:06:03.5Z" }, + { url = "https://files.pythonhosted.org/packages/3c/36/6593dc88545d75fb96416184be5392da5e2a8e8c2802a8597913e16ae25c/mypy-1.20.2-cp310-cp310-win_arm64.whl", hash = "sha256:6e2b469efd811707bc530fd1effef0f5d6eebcb7fe376affae69025da4b979a2", size = 9786676, upload-time = "2026-04-21T17:07:02.035Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4d/9ebeae211caccbdaddde7ed5e31dfcf57faac66be9b11deb1dc6526c8078/mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c", size = 14371307, upload-time = "2026-04-21T17:08:56.442Z" }, + { url = "https://files.pythonhosted.org/packages/95/d7/93473d34b61f04fac1aecc01368485c89c5c4af7a4b9a0cab5d77d04b63f/mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3", size = 13258917, upload-time = "2026-04-21T17:05:50.978Z" }, + { url = "https://files.pythonhosted.org/packages/e2/30/3dd903e8bafb7b5f7bf87fcd58f8382086dea2aa19f0a7b357f21f63071b/mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254", size = 13700516, upload-time = "2026-04-21T17:11:33.161Z" }, + { url = "https://files.pythonhosted.org/packages/07/05/c61a140aba4c729ac7bc99ae26fc627c78a6e08f5b9dd319244ea71a3d7e/mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98", size = 14562889, upload-time = "2026-04-21T17:05:27.674Z" }, + { url = "https://files.pythonhosted.org/packages/fd/87/da78243742ffa8a36d98c3010f0d829f93d5da4e6786f1a1a6f2ad616502/mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac", size = 14803844, upload-time = "2026-04-21T17:10:06.2Z" }, + { url = "https://files.pythonhosted.org/packages/37/52/10a1ddf91b40f843943a3c6db51e2df59c9e237f29d355e95eaab427461f/mypy-1.20.2-cp311-cp311-win_amd64.whl", hash = "sha256:baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67", size = 10846300, upload-time = "2026-04-21T17:12:23.886Z" }, + { url = "https://files.pythonhosted.org/packages/20/02/f9a4415b664c53bd34d6709be59da303abcae986dc4ac847b402edb6fa1e/mypy-1.20.2-cp311-cp311-win_arm64.whl", hash = "sha256:20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100", size = 9779498, upload-time = "2026-04-21T17:09:23.695Z" }, + { url = "https://files.pythonhosted.org/packages/71/4e/7560e4528db9e9b147e4c0f22660466bf30a0a1fe3d63d1b9d3b0fd354ee/mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b", size = 14539393, upload-time = "2026-04-21T17:07:12.52Z" }, + { url = "https://files.pythonhosted.org/packages/32/d9/34a5efed8124f5a9234f55ac6a4ced4201e2c5b81e1109c49ad23190ec8c/mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4", size = 13361642, upload-time = "2026-04-21T17:06:53.742Z" }, + { url = "https://files.pythonhosted.org/packages/d1/14/eb377acf78c03c92d566a1510cda8137348215b5335085ef662ab82ecd3a/mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6", size = 13740347, upload-time = "2026-04-21T17:12:04.73Z" }, + { url = "https://files.pythonhosted.org/packages/b9/94/7e4634a32b641aa1c112422eed1bbece61ee16205f674190e8b536f884de/mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066", size = 14734042, upload-time = "2026-04-21T17:07:43.16Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f3/f7e62395cb7f434541b4491a01149a4439e28ace4c0c632bbf5431e92d1f/mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102", size = 14964958, upload-time = "2026-04-21T17:11:00.665Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0d/47e3c3a0ec2a876e35aeac365df3cac7776c36bbd4ed18cc521e1b9d255b/mypy-1.20.2-cp312-cp312-win_amd64.whl", hash = "sha256:d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9", size = 10911340, upload-time = "2026-04-21T17:10:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/d6/b2/6c852d72e0ea8b01f49da817fb52539993cde327e7d010e0103dc12d0dac/mypy-1.20.2-cp312-cp312-win_arm64.whl", hash = "sha256:785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58", size = 9833947, upload-time = "2026-04-21T17:09:05.267Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026", size = 14524670, upload-time = "2026-04-21T17:10:30.737Z" }, + { url = "https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943", size = 13336218, upload-time = "2026-04-21T17:08:44.069Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517", size = 13724906, upload-time = "2026-04-21T17:08:01.02Z" }, + { url = "https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15", size = 14726046, upload-time = "2026-04-21T17:11:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee", size = 14955587, upload-time = "2026-04-21T17:12:16.033Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl", hash = "sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f", size = 10922681, upload-time = "2026-04-21T17:06:35.842Z" }, + { url = "https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl", hash = "sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330", size = 9830560, upload-time = "2026-04-21T17:07:51.023Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30", size = 14524561, upload-time = "2026-04-21T17:06:27.325Z" }, + { url = "https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924", size = 13363883, upload-time = "2026-04-21T17:11:11.239Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb", size = 13742945, upload-time = "2026-04-21T17:08:34.181Z" }, + { url = "https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc", size = 14706163, upload-time = "2026-04-21T17:05:15.51Z" }, + { url = "https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558", size = 14938677, upload-time = "2026-04-21T17:05:39.562Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl", hash = "sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8", size = 11089322, upload-time = "2026-04-21T17:06:44.29Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl", hash = "sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3", size = 10017775, upload-time = "2026-04-21T17:07:20.732Z" }, + { url = "https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609", size = 15549002, upload-time = "2026-04-21T17:08:23.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2", size = 14401942, upload-time = "2026-04-21T17:07:31.837Z" }, + { url = "https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c", size = 15041649, upload-time = "2026-04-21T17:09:34.653Z" }, + { url = "https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744", size = 15864588, upload-time = "2026-04-21T17:11:44.936Z" }, + { url = "https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6", size = 16093956, upload-time = "2026-04-21T17:10:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec", size = 12568661, upload-time = "2026-04-21T17:11:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382", size = 10389240, upload-time = "2026-04-21T17:09:42.719Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl", hash = "sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563", size = 2637314, upload-time = "2026-04-21T17:05:54.5Z" }, +] + +[[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 = "myst-nb" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "ipykernel" }, + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "ipython", version = "9.14.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jupyter-cache" }, + { name = "myst-parser" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pyyaml" }, + { name = "sphinx" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/b4/ff1abeea67e8cfe0a8c033389f6d1d8b0bfecfd611befb5cbdeab884fce6/myst_nb-1.4.0.tar.gz", hash = "sha256:c145598de62446a6fd009773dd071a40d3b76106ace780de1abdfc6961f614c2", size = 82285, upload-time = "2026-03-02T21:14:56.95Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/93/0a378b48488879a1d925b42a804edfc6e0cd0ef854220f2dce738a46e7e9/myst_nb-1.4.0-py3-none-any.whl", hash = "sha256:0e2c86e7d3b82c3aa51383f82d6268f7714f3b772c23a796ab09538a8e68b4e4", size = 82555, upload-time = "2026-03-02T21:14:55.652Z" }, +] + +[[package]] +name = "myst-parser" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "jinja2" }, + { name = "markdown-it-py" }, + { name = "mdit-py-plugins" }, + { name = "pyyaml" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/64/e2f13dac02f599980798c01156393b781aec983b52a6e4057ee58f07c43a/myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87", size = 92392, upload-time = "2024-04-28T20:22:42.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/de/21aa8394f16add8f7427f0a1326ccd2b3a2a8a3245c9252bc5ac034c6155/myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1", size = 83163, upload-time = "2024-04-28T20:22:39.985Z" }, +] + +[[package]] +name = "nbclient" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, +] + +[[package]] +name = "nbconvert" +version = "7.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/b1/708e53fe2e429c103c6e6e159106bcf0357ac41aa4c28772bd8402339051/nbconvert-7.17.1.tar.gz", hash = "sha256:34d0d0a7e73ce3cbab6c5aae8f4f468797280b01fd8bd2ca746da8569eddd7d2", size = 865311, upload-time = "2026-04-08T00:44:14.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/f8/bb0a9d5f46819c821dc1f004aa2cc29b1d91453297dbf5ff20470f00f193/nbconvert-7.17.1-py3-none-any.whl", hash = "sha256:aa85c087b435e7bf1ffd03319f658e285f2b89eccab33bc1ba7025495ab3e7c8", size = 261927, upload-time = "2026-04-08T00:44:12.845Z" }, +] + +[[package]] +name = "nbformat" +version = "5.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 = "nbmake" +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "pygments" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/9a/aae201cee5639e1d562b3843af8fd9f8d018bb323e776a2b973bdd5fc64b/nbmake-1.5.5.tar.gz", hash = "sha256:239dc868ea13a7c049746e2aba2c229bd0f6cdbc6bfa1d22f4c88638aa4c5f5c", size = 85929, upload-time = "2024-12-23T18:33:46.774Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl", hash = "sha256:c6fbe6e48b60cacac14af40b38bf338a3b88f47f085c54ac5b8639ff0babaf4b", size = 12818, upload-time = "2024-12-23T18:33:44.566Z" }, +] + +[[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 = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +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/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.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "nh3" +version = "0.3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/5f/1d19bdc7d27238e37f3672cdc02cb77c56a4a86d140cd4f4f23c90df6e16/nh3-0.3.5.tar.gz", hash = "sha256:45855e14ff056064fec77133bfcf7cd691838168e5e17bbef075394954dc9dc8", size = 20743, upload-time = "2026-04-25T10:44:16.066Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/b0/8587ac42a9627ab88e7e221601f1dfccbf4db80b2a29222ea63266dc9abc/nh3-0.3.5-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:23a312224875f72cd16bde417f49071451877e29ef646a60e50fcb69407cc18a", size = 1420126, upload-time = "2026-04-25T10:43:39.834Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/1dbc4d0c43f12e8c1784ede17eaee6f061d4fbe5505757c65c49b2ceab95/nh3-0.3.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387abd011e81959d5a35151a11350a0795c6edeb53ebfa02d2e882dc01299263", size = 793943, upload-time = "2026-04-25T10:43:41.363Z" }, + { url = "https://files.pythonhosted.org/packages/47/9f/d6758d7a14ee964bf439cc35ae4fa24a763a93399c8ef6f22bd11d532d29/nh3-0.3.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48f45e3e914be93a596431aa143dedf1582557bf41a58153c296048d6e3798c9", size = 841150, upload-time = "2026-04-25T10:43:43.007Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/d5d1ae8374612c98f390e1ea7c610fa6c9716259a03bbf4d15b269f40073/nh3-0.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0a09f51806fd51b4fedbf9ea2b61fef388f19aef0d62fe51199d41648be14588", size = 1008415, upload-time = "2026-04-25T10:43:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8f/d13a9c3fd2d9c131a2a281737380e9379eb0f8c33fea24c2b923aaafbb15/nh3-0.3.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c357f1d042c67f135a5e6babb2b0e3b9d9224ff4a3543240f597767b01384ffd", size = 1092706, upload-time = "2026-04-25T10:43:45.653Z" }, + { url = "https://files.pythonhosted.org/packages/bb/57/2f3add7f8680fcc896afa6a675cb2bab09982853ee8af40bad621f6b61c4/nh3-0.3.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:38748140bf76383ab7ce2dce0ad4cb663855d8fbc9098f7f3483673d09616a17", size = 1048346, upload-time = "2026-04-25T10:43:46.974Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c3/2f9e4ffa82863074d1361bfe949bc46393d91b3411579dfbbd090b24cac5/nh3-0.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:84bdeb082544fbcb77a12c034dd77d7da0556fdc0727b787eb6214b958c15e29", size = 1029038, upload-time = "2026-04-25T10:43:48.569Z" }, + { url = "https://files.pythonhosted.org/packages/e8/10/2804deb3f3315184c9cae41702e293c87524b5a21f766b07d7fe3ffbcfbb/nh3-0.3.5-cp314-cp314t-win32.whl", hash = "sha256:c3aae321f67ae66cff2a627115f106a377d4475d10b0e13d97959a13486b9a88", size = 603263, upload-time = "2026-04-25T10:43:49.851Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/f6685248b49f7548fc9a8c335ab3a52f68610b72e8a61576447151e4e2e6/nh3-0.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c88605d8d468f7fc1b31e06129bc91d6c96f6c621776c9b504a0da9beac9df5f", size = 616866, upload-time = "2026-04-25T10:43:51.005Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/d8c9018635d4acfefde6b68470daa510eed715a350cbaa2f928ba0609f81/nh3-0.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:72c5bdedec27fa33de6a5326346ea8aa3fe54f6ac294d54c4b204fb66a9f1e79", size = 602566, upload-time = "2026-04-25T10:43:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/85/30/d162e99746a2fb1d98bb0ef23af3e201b156cf09f7de867c7390c8fe1c06/nh3-0.3.5-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3bb854485c9b33e5bb143ff3e49e577073bc6bc320f0ff8fc316dd89c0d3c101", size = 1442393, upload-time = "2026-04-25T10:43:53.556Z" }, + { url = "https://files.pythonhosted.org/packages/25/8c/072120d506978ab053e1732d0efa7c86cb478fee0ee098fda0ac0d31cb34/nh3-0.3.5-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d401ab2d8e86d59e2126e3ab2a2f45840c405842b626d9a51624b3a33b6878", size = 837722, upload-time = "2026-04-25T10:43:55.073Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/d4e06e28c5ad1c4b065f89737d02631bd49f1660b6ebcf17a87ffcd201da/nh3-0.3.5-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:acfd354e61accbe4c74f8017c6e397a776916dfe47c48643cf7fd84ade826f93", size = 822872, upload-time = "2026-04-25T10:43:56.581Z" }, + { url = "https://files.pythonhosted.org/packages/0a/62/50659255213f241ec5797ae7427464c969397373e83b3659372b341ae869/nh3-0.3.5-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:52d877980d7ca01dc3baf3936bf844828bc6f332962227a684ed79c18cce14c3", size = 1100031, upload-time = "2026-04-25T10:43:58.098Z" }, + { url = "https://files.pythonhosted.org/packages/00/7a/a12ae77593b2fcf3be25df7bc1c01967d0de448bdb4b6c7ec80fe4f5a74f/nh3-0.3.5-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:207c01801d3e9bb8ec08f08689346bdd30ce15b8bf60013a925d08b5388962a4", size = 1057669, upload-time = "2026-04-25T10:43:59.328Z" }, + { url = "https://files.pythonhosted.org/packages/2d/71/5647dc04c0233192a3956fc91708822b21403a06508cacf78083c68e7bf0/nh3-0.3.5-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea232933394d1d58bf7c4bb348dc4660eae6604e1ae81cd2ba6d9ed80d390f3b", size = 914795, upload-time = "2026-04-25T10:44:00.52Z" }, + { url = "https://files.pythonhosted.org/packages/1b/0e/bf298920729f216adcb002acf7ea01b90842603d2e4e2ce9b900d9ee8fab/nh3-0.3.5-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe3a787dc76b50de6bee54ef242f26c41dfe47654428e3e94f0fae5bb6dd2cc1", size = 806976, upload-time = "2026-04-25T10:44:01.743Z" }, + { url = "https://files.pythonhosted.org/packages/85/01/26761e1dc2b848e65a62c19e5d39ad446283287cd4afddc89f364ab86bc9/nh3-0.3.5-cp38-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:488928988caad25ba14b1eb5bc74e25e21f3b5e40341d956f3ce4a8bc19460dc", size = 834904, upload-time = "2026-04-25T10:44:03.454Z" }, + { url = "https://files.pythonhosted.org/packages/33/53/0766113e679540ac1edc1b82b1295aecd321eeb75d6fead70109a838b6ee/nh3-0.3.5-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c069570b06aa848457713ad7af4a9905691291548c4466a9ad78ee95808382b", size = 857159, upload-time = "2026-04-25T10:44:05.003Z" }, + { url = "https://files.pythonhosted.org/packages/58/36/734d353dfaf292fed574b8b3092f0ef79dc6404f3879f7faaa61a4701fad/nh3-0.3.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eeedc90ed8c42c327e8e10e621ccfa314fc6cce35d5929f4297ff1cdb89667c4", size = 1018600, upload-time = "2026-04-25T10:44:06.18Z" }, + { url = "https://files.pythonhosted.org/packages/6b/aa/d9c59c1b49669fcb7bababa55df82385f029ad5c2651f583c3a1141cfdd1/nh3-0.3.5-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:de8e8621853b6470fe928c684ee0d3f39ea8086cebafe4c416486488dea7b68d", size = 1103530, upload-time = "2026-04-25T10:44:07.68Z" }, + { url = "https://files.pythonhosted.org/packages/90/b0/cdd210bfb8d9d43fb02fc3c868336b9955934d8e15e66eb1d15a147b8af0/nh3-0.3.5-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:6ea58cc44d274c643b83547ca9654a0b1a817609b160601356f76a2b744c49ad", size = 1061754, upload-time = "2026-04-25T10:44:09.362Z" }, + { url = "https://files.pythonhosted.org/packages/ce/cb/7a39e72e668c8445bdd95e494b3e21cfdddc68329be8ea3522c8befb46c4/nh3-0.3.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e49c9b564e6bcb03ecd2f057213df9a0de15a95812ac9db9600b590db23d3ae9", size = 1040938, upload-time = "2026-04-25T10:44:10.775Z" }, + { url = "https://files.pythonhosted.org/packages/af/4c/fc2f9ed208a3801a319f59b5fea03cdc20cf3bd8af14be930d3a8de01224/nh3-0.3.5-cp38-abi3-win32.whl", hash = "sha256:559e4c73b689e9a7aa97ac9760b1bc488038d7c1a575aa4ab5a0e19ee9630c0f", size = 611445, upload-time = "2026-04-25T10:44:12.317Z" }, + { url = "https://files.pythonhosted.org/packages/db/1a/e4c9b5e2ae13e6092c9ec16d8ca30646cb01fcdea245f36c5b08fd21fbd5/nh3-0.3.5-cp38-abi3-win_amd64.whl", hash = "sha256:45e6a65dc88a300a2e3502cb9c8e6d1d6b831d6fba7470643333609c6aab1f30", size = 626502, upload-time = "2026-04-25T10:44:13.682Z" }, + { url = "https://files.pythonhosted.org/packages/80/7c/19cd0671d1ba2762fb388fc149697d20d0568ccfeef833b11280a619e526/nh3-0.3.5-cp38-abi3-win_arm64.whl", hash = "sha256:8f85285700a18e9f3fc5bff41fe573fa84f81542ef13b48a89f9fecca0474d3b", size = 611069, upload-time = "2026-04-25T10:44:14.934Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +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.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.0.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/a5/fce49e2ae977e0ccc084e5adafceb4f0ac0c8333cb6863501618a7277f67/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c86fc7f7ae36d7528288c5d88098edcb7b02c633d262e7ddbb86b0ad91be5df2", size = 542851226, upload-time = "2025-10-09T08:59:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" }, + { url = "https://files.pythonhosted.org/packages/10/f5/f50bc3f5c2bb57ab8f5b4d78bc1146b57810d42cb8fcb28cbe2e14050376/nvidia_cublas-13.1.0.3-py3-none-win_amd64.whl", hash = "sha256:2a3b94a37def342471c59fad7856caee4926809a72dd5270155d6a31b5b277be", size = 404355960, upload-time = "2025-10-09T09:07:00.987Z" }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.8.4.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/99/db44d685f0e257ff0e213ade1964fc459b4a690a73293220e98feb3307cf/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b86f6dd8935884615a0683b663891d43781b819ac4f2ba2b0c9604676af346d0", size = 590537124, upload-time = "2025-03-07T01:43:53.556Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" }, + { url = "https://files.pythonhosted.org/packages/70/61/7d7b3c70186fb651d0fbd35b01dbfc8e755f69fd58f817f3d0f642df20c3/nvidia_cublas_cu12-12.8.4.1-py3-none-win_amd64.whl", hash = "sha256:47e9b82132fa8d2b4944e708049229601448aaad7e6f296f630f2d1a32de35af", size = 567544208, upload-time = "2025-03-07T01:53:30.535Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, + { url = "https://files.pythonhosted.org/packages/ad/df/b74b10025c1205695c5676373f2edd3e87a7202cc62ead0dfbc373b0f6ea/nvidia_cuda_cupti-13.0.85-py3-none-win_amd64.whl", hash = "sha256:683f58d301548deeefcb8f6fac1b8d907691b9d8b18eccab417f51e362102f00", size = 7736776, upload-time = "2025-09-04T08:38:08.38Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/1f/b3bd73445e5cb342727fd24fe1f7b748f690b460acadc27ea22f904502c8/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4412396548808ddfed3f17a467b104ba7751e6b58678a4b840675c56d21cf7ed", size = 9533318, upload-time = "2025-03-07T01:40:10.421Z" }, + { url = "https://files.pythonhosted.org/packages/f8/02/2adcaa145158bf1a8295d83591d22e4103dbfd821bcaf6f3f53151ca4ffa/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182", size = 10248621, upload-time = "2025-03-07T01:40:21.213Z" }, + { url = "https://files.pythonhosted.org/packages/41/bc/83f5426095d93694ae39fe1311431b5d5a9bb82e48bf0dd8e19be2765942/nvidia_cuda_cupti_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:bb479dcdf7e6d4f8b0b01b115260399bf34154a1a2e9fe11c85c517d87efd98e", size = 7015759, upload-time = "2025-03-07T01:51:11.355Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/4a/af/345fedb9f4c76c84ab4fa445b36bd4048a4d9db60e6bc76b4f913ff4b852/nvidia_cuda_nvrtc-13.0.88-py3-none-win_amd64.whl", hash = "sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872", size = 76807835, upload-time = "2025-09-04T08:39:15.274Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/6b/32f747947df2da6994e999492ab306a903659555dddc0fbdeb9d71f75e52/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994", size = 88040029, upload-time = "2025-03-07T01:42:13.562Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d1/e50d0acaab360482034b84b6e27ee83c6738f7d32182b987f9c7a4e32962/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc1fec1e1637854b4c0a65fb9a8346b51dd9ee69e61ebaccc82058441f15bce8", size = 43106076, upload-time = "2025-03-07T01:41:59.817Z" }, + { url = "https://files.pythonhosted.org/packages/45/51/52a3d84baa2136cc8df15500ad731d74d3a1114d4c123e043cb608d4a32b/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:7a4b6b2904850fe78e0bd179c4b655c404d4bb799ef03ddc60804247099ae909", size = 73586838, upload-time = "2025-03-07T01:52:13.483Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/b7/94/6b867483bec07da24ffa32736c79fabb94ef3a7af4d787a9d4a974868576/nvidia_cuda_runtime-13.0.96-py3-none-win_amd64.whl", hash = "sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492", size = 2927037, upload-time = "2025-10-09T09:04:23.782Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/75/f865a3b236e4647605ea34cc450900854ba123834a5f1598e160b9530c3a/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:52bf7bbee900262ffefe5e9d5a2a69a30d97e2bc5bb6cc866688caa976966e3d", size = 965265, upload-time = "2025-03-07T01:39:43.533Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9b/a997b638fcd068ad6e4d53b8551a7d30fe8b404d6f1804abf1df69838932/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90", size = 954765, upload-time = "2025-03-07T01:40:01.615Z" }, + { url = "https://files.pythonhosted.org/packages/30/a5/a515b7600ad361ea14bfa13fb4d6687abf500adc270f19e89849c0590492/nvidia_cuda_runtime_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:c0c6027f01505bfed6c3b21ec546f69c687689aad5f1a377554bc6ca4aa993a8", size = 944318, upload-time = "2025-03-07T01:51:01.794Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, + { url = "https://files.pythonhosted.org/packages/3d/90/0bd6e586701b3a890fd38aa71c387dab4883d619d6e5ad912ccbd05bfd67/nvidia_cudnn_cu12-9.10.2.21-py3-none-win_amd64.whl", hash = "sha256:c6288de7d63e6cf62988f0923f96dc339cea362decb1bf5b3141883392a7d65e", size = 692992268, upload-time = "2025-06-06T21:55:18.114Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu13" +version = "9.15.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/93/b3c9db2c35d6183361333d2dcfea50e094c012d012c8a4d7effbfb53ef62/nvidia_cudnn_cu13-9.15.1.9-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:44cd2ec83c3ef62a7357614bd02ce7f3dac35ffcbb04ad20999e730741f0ba17", size = 415636241, upload-time = "2025-11-12T20:22:26.582Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d0/90f98fc55c48a7d8f5ad0a03a6321acc1a7024bdd550d96b3547a04ea6b4/nvidia_cudnn_cu13-9.15.1.9-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ebc9a647918df0d7298d67cfaf41579fd4c78ead9aba246f5ad9414d61b9ec4c", size = 351298418, upload-time = "2025-11-12T20:23:21.455Z" }, + { url = "https://files.pythonhosted.org/packages/01/e4/f899b1cd1b3be20e8a5065fba3670d492f634da07eba5e09425bc96647be/nvidia_cudnn_cu13-9.15.1.9-py3-none-win_amd64.whl", hash = "sha256:e99068ca372b9791483759705ff79545e6e0ab5fe6352772e084cc6d1a419ab6", size = 336136012, upload-time = "2025-11-12T20:24:43.179Z" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, + { url = "https://files.pythonhosted.org/packages/85/b2/f8af21a2ed1beed337a6a02c5a28aeb85441f4d578ec3d529543c775ea4b/nvidia_cufft-12.0.0.61-py3-none-win_amd64.whl", hash = "sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb", size = 213342123, upload-time = "2025-09-04T08:40:51.145Z" }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.3.3.83" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/bc/7771846d3a0272026c416fbb7e5f4c1f146d6d80704534d0b187dd6f4800/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:848ef7224d6305cdb2a4df928759dca7b1201874787083b6e7550dd6765ce69a", size = 193109211, upload-time = "2025-03-07T01:44:56.873Z" }, + { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, + { url = "https://files.pythonhosted.org/packages/7d/ec/ce1629f1e478bb5ccd208986b5f9e0316a78538dd6ab1d0484f012f8e2a1/nvidia_cufft_cu12-11.3.3.83-py3-none-win_amd64.whl", hash = "sha256:7a64a98ef2a7c47f905aaf8931b69a3a43f27c55530c698bb2ed7c75c0b42cb7", size = 192216559, upload-time = "2025-03-07T01:53:57.106Z" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, +] + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.1.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/fe/1bcba1dfbfb8d01be8d93f07bfc502c93fa23afa6fd5ab3fc7c1df71038a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc", size = 1197834, upload-time = "2025-03-07T01:45:50.723Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f5/5607710447a6fe9fd9b3283956fceeee8a06cda1d2f56ce31371f595db2a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:4beb6d4cce47c1a0f1013d72e02b0994730359e17801d395bdcbf20cfb3bb00a", size = 1120705, upload-time = "2025-03-07T01:45:41.434Z" }, +] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, + { url = "https://files.pythonhosted.org/packages/99/27/72103153b1ffc00e09fdc40ac970235343dcd1ea8bd762e84d2d73219ffa/nvidia_curand-10.4.0.35-py3-none-win_amd64.whl", hash = "sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f", size = 55242481, upload-time = "2025-08-04T10:30:41.831Z" }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.9.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/5e/92aa15eca622a388b80fbf8375d4760738df6285b1e92c43d37390a33a9a/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:dfab99248034673b779bc6decafdc3404a8a6f502462201f2f31f11354204acd", size = 63625754, upload-time = "2025-03-07T01:46:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/fb/aa/6584b56dc84ebe9cf93226a5cde4d99080c8e90ab40f0c27bda7a0f29aa1/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9", size = 63619976, upload-time = "2025-03-07T01:46:23.323Z" }, + { url = "https://files.pythonhosted.org/packages/b9/75/70c05b2f3ed5be3bb30b7102b6eb78e100da4bbf6944fd6725c012831cab/nvidia_curand_cu12-10.3.9.90-py3-none-win_amd64.whl", hash = "sha256:f149a8ca457277da854f89cf282d6ef43176861926c7ac85b2a0fbd237c587ec", size = 62765309, upload-time = "2025-03-07T01:54:20.478Z" }, +] + +[[package]] +name = "nvidia-cusolver" +version = "12.0.4.66" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparse", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, + { url = "https://files.pythonhosted.org/packages/99/ef/332a0101260ca78a1daef046bf0b06199e8ed4dac1d2aa698289c358169c/nvidia_cusolver-12.0.4.66-py3-none-win_amd64.whl", hash = "sha256:16515bd33a8e76bb54d024cfa068fa68d30e80fc34b9e1090813ea9362e0cb65", size = 193551444, upload-time = "2025-09-04T08:41:46.813Z" }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparse-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/32/f7cd6ce8a7690544d084ea21c26e910a97e077c9b7f07bf5de623ee19981/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:db9ed69dbef9715071232caa9b69c52ac7de3a95773c2db65bdba85916e4e5c0", size = 267229841, upload-time = "2025-03-07T01:46:54.356Z" }, + { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, + { url = "https://files.pythonhosted.org/packages/13/c0/76ca8551b8a84146ffa189fec81c26d04adba4bc0dbe09cd6e6fd9b7de04/nvidia_cusolver_cu12-11.7.3.90-py3-none-win_amd64.whl", hash = "sha256:4a550db115fcabc4d495eb7d39ac8b58d4ab5d8e63274d3754df1c0ad6a22d34", size = 256720438, upload-time = "2025-03-07T01:54:39.898Z" }, +] + +[[package]] +name = "nvidia-cusparse" +version = "12.6.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, + { url = "https://files.pythonhosted.org/packages/02/b0/b043d6f3480f102f885cf87fc3ffd3edcb5e23b855025a50e2ef4d059185/nvidia_cusparse-12.6.3.3-py3-none-win_amd64.whl", hash = "sha256:cbcf42feb737bd7ec15b4c0a63e62351886bd3f975027b8815d7f720a2b5ea79", size = 143783033, upload-time = "2025-09-04T08:42:12.391Z" }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/f7/cd777c4109681367721b00a106f491e0d0d15cfa1fd59672ce580ce42a97/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b6c161cb130be1a07a27ea6923df8141f3c295852f4b260c65f18f3e0a091dc", size = 288117129, upload-time = "2025-03-07T01:47:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, + { url = "https://files.pythonhosted.org/packages/62/07/f3b2ad63f8e3d257a599f422ae34eb565e70c41031aecefa3d18b62cabd1/nvidia_cusparse_cu12-12.5.8.93-py3-none-win_amd64.whl", hash = "sha256:9a33604331cb2cac199f2e7f5104dfbb8a5a898c367a53dfda9ff2acb6b6b4dd", size = 284937404, upload-time = "2025-03-07T01:55:07.742Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/b9/598f6ff36faaece4b3c50d26f50e38661499ff34346f00e057760b35cc9d/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8878dce784d0fac90131b6817b607e803c36e629ba34dc5b433471382196b6a5", size = 283835557, upload-time = "2025-02-26T00:16:54.265Z" }, + { url = "https://files.pythonhosted.org/packages/56/79/12978b96bd44274fe38b5dde5cfb660b1d114f70a65ef962bcbbed99b549/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623", size = 287193691, upload-time = "2025-02-26T00:15:44.104Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d8/a6b0d0d0c2435e9310f3e2bb0d9c9dd4c33daef86aa5f30b3681defd37ea/nvidia_cusparselt_cu12-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f67fbb5831940ec829c9117b7f33807db9f9678dc2a617fbe781cac17b4e1075", size = 271020911, upload-time = "2025-02-26T00:14:47.204Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu13" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/10/8dcd1175260706a2fc92a16a52e306b71d4c1ea0b0cc4a9484183399818a/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:400c6ed1cf6780fc6efedd64ec9f1345871767e6a1a0a552a1ea0578117ea77c", size = 220791277, upload-time = "2025-08-13T19:22:40.982Z" }, + { url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" }, + { url = "https://files.pythonhosted.org/packages/57/de/8f0578928b9b1246d7b1324db0528e6b9f9fb54496a49f40bf71f09f1a27/nvidia_cusparselt_cu13-0.8.0-py3-none-win_amd64.whl", hash = "sha256:e80212ed7b1afc97102fbb2b5c82487aa73f6a0edfa6d26c5a152593e520bb8f", size = 156459710, upload-time = "2025-08-13T19:24:18.043Z" }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.27.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/1c/857979db0ef194ca5e21478a0612bcdbbe59458d7694361882279947b349/nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:31432ad4d1fb1004eb0c56203dc9bc2178a1ba69d1d9e02d64a6938ab5e40e7a", size = 322400625, upload-time = "2025-06-26T04:11:04.496Z" }, + { url = "https://files.pythonhosted.org/packages/6e/89/f7a07dc961b60645dbbf42e80f2bc85ade7feb9a491b11a1e973aa00071f/nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457", size = 322348229, upload-time = "2025-06-26T04:11:28.385Z" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.28.9" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/55/1920646a2e43ffd4fc958536b276197ed740e9e0c54105b4bb3521591fc7/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:01c873ba1626b54caa12272ed228dc5b2781545e0ae8ba3f432a8ef1c6d78643", size = 196561677, upload-time = "2025-11-18T05:49:03.45Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, + { url = "https://files.pythonhosted.org/packages/e4/01/07530b0e37546231052e30234540289c42eaffa486f1a34a87fed340157b/nvidia_nvjitlink-13.0.88-py3-none-win_amd64.whl", hash = "sha256:634e96e3da9ef845ae744097a1f289238ecf946ce0b82e93cdce14b9782e682f", size = 36035115, upload-time = "2025-09-04T08:43:03.001Z" }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/74/86a07f1d0f42998ca31312f998bd3b9a7eff7f52378f4f270c8679c77fb9/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88", size = 39254836, upload-time = "2025-03-07T01:49:55.661Z" }, + { url = "https://files.pythonhosted.org/packages/2a/a2/8cee5da30d13430e87bf99bb33455d2724d0a4a9cb5d7926d80ccb96d008/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:adccd7161ace7261e01bb91e44e88da350895c270d23f744f0820c818b7229e7", size = 38386204, upload-time = "2025-03-07T01:49:43.612Z" }, + { url = "https://files.pythonhosted.org/packages/ed/d7/34f02dad2e30c31b10a51f6b04e025e5dd60e5f936af9045a9b858a05383/nvidia_nvjitlink_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:bd93fbeeee850917903583587f4fc3a4eafa022e34572251368238ab5e6bd67f", size = 268553710, upload-time = "2025-03-07T01:56:24.13Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu12" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/6a/03aa43cc9bd3ad91553a88b5f6fb25ed6a3752ae86ce2180221962bc2aa5/nvidia_nvshmem_cu12-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b48363fc6964dede448029434c6abed6c5e37f823cb43c3bcde7ecfc0457e15", size = 138936938, upload-time = "2025-09-06T00:32:05.589Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/6ea3ea725f82e1e76684f0708bbedd871fc96da89945adeba65c3835a64c/nvidia_nvshmem_cu12-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:042f2500f24c021db8a06c5eec2539027d57460e1c1a762055a6554f72c369bd", size = 139103095, upload-time = "2025-09-06T00:32:31.266Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, +] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, + { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, + { url = "https://files.pythonhosted.org/packages/d2/50/0e2220f8620a177de994211186ffc5bfa9f2ce1e1282797f8f90096f9f88/nvidia_nvtx-13.0.85-py3-none-win_amd64.whl", hash = "sha256:d66ea44254dd3c6eacc300047af6e1288d2269dd072b417e0adffbf479e18519", size = 137066, upload-time = "2025-09-04T08:39:25.649Z" }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/c0/1b303feea90d296f6176f32a2a70b5ef230f9bdeb3a72bddb0dc922dc137/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7ad891da111ebafbf7e015d34879f7112832fc239ff0d7d776b6cb685274615", size = 91161, upload-time = "2025-03-07T01:42:23.922Z" }, + { url = "https://files.pythonhosted.org/packages/a2/eb/86626c1bbc2edb86323022371c39aa48df6fd8b0a1647bc274577f72e90b/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f", size = 89954, upload-time = "2025-03-07T01:42:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/9f/99/4c9c0c329bf9fc125008c3b54c7c94c0023518d06fc025ae36431375e1fe/nvidia_nvtx_cu12-12.8.90-py3-none-win_amd64.whl", hash = "sha256:619c8304aedc69f02ea82dd244541a83c3d9d40993381b3b590f1adaed3db41e", size = 56492, upload-time = "2025-03-07T01:52:24.69Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "python-dateutil", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pytz", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "tzdata", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { 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/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { 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/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { 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/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { 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/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { 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/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { 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/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { 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]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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 = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/aa/d0b28e1c811cd4d5f5c2bfe2e022292bd255ae5744a3b9ac7d6c8f72dd75/pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f", size = 5354355, upload-time = "2026-04-01T14:42:15.402Z" }, + { url = "https://files.pythonhosted.org/packages/27/8e/1d5b39b8ae2bd7650d0c7b6abb9602d16043ead9ebbfef4bc4047454da2a/pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97", size = 4695871, upload-time = "2026-04-01T14:42:18.234Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c5/dcb7a6ca6b7d3be41a76958e90018d56c8462166b3ef223150360850c8da/pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff", size = 6269734, upload-time = "2026-04-01T14:42:20.608Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/aa1bb13b2f4eba914e9637893c73f2af8e48d7d4023b9d3750d4c5eb2d0c/pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec", size = 8076080, upload-time = "2026-04-01T14:42:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2a/8c79d6a53169937784604a8ae8d77e45888c41537f7f6f65ed1f407fe66d/pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136", size = 6382236, upload-time = "2026-04-01T14:42:25.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/42/bbcb6051030e1e421d103ce7a8ecadf837aa2f39b8f82ef1a8d37c3d4ebc/pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c", size = 7070220, upload-time = "2026-04-01T14:42:28.68Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e1/c2a7d6dd8cfa6b231227da096fd2d58754bab3603b9d73bf609d3c18b64f/pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3", size = 6493124, upload-time = "2026-04-01T14:42:31.579Z" }, + { url = "https://files.pythonhosted.org/packages/5f/41/7c8617da5d32e1d2f026e509484fdb6f3ad7efaef1749a0c1928adbb099e/pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa", size = 7194324, upload-time = "2026-04-01T14:42:34.615Z" }, + { url = "https://files.pythonhosted.org/packages/2d/de/a777627e19fd6d62f84070ee1521adde5eeda4855b5cf60fe0b149118bca/pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032", size = 6376363, upload-time = "2026-04-01T14:42:37.19Z" }, + { url = "https://files.pythonhosted.org/packages/e7/34/fc4cb5204896465842767b96d250c08410f01f2f28afc43b257de842eed5/pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5", size = 7083523, upload-time = "2026-04-01T14:42:39.62Z" }, + { url = "https://files.pythonhosted.org/packages/2d/a0/32852d36bc7709f14dc3f64f929a275e958ad8c19a6deba9610d458e28b3/pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024", size = 2463318, upload-time = "2026-04-01T14:42:42.063Z" }, + { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, + { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, + { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401, upload-time = "2026-04-01T14:42:54.343Z" }, + { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105, upload-time = "2026-04-01T14:42:59.847Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149, upload-time = "2026-04-01T14:43:05.274Z" }, + { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626, upload-time = "2026-04-01T14:43:08.557Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531, upload-time = "2026-04-01T14:43:10.743Z" }, + { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279, upload-time = "2026-04-01T14:43:13.246Z" }, + { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490, upload-time = "2026-04-01T14:43:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462, upload-time = "2026-04-01T14:43:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744, upload-time = "2026-04-01T14:43:20.716Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371, upload-time = "2026-04-01T14:43:23.443Z" }, + { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215, upload-time = "2026-04-01T14:43:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783, upload-time = "2026-04-01T14:43:29.56Z" }, + { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112, upload-time = "2026-04-01T14:43:32.091Z" }, + { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489, upload-time = "2026-04-01T14:43:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129, upload-time = "2026-04-01T14:43:37.213Z" }, + { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612, upload-time = "2026-04-01T14:43:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, + { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, + { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, + { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, + { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, + { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, + { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, + { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404, upload-time = "2026-04-01T14:46:06.33Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, + { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, +] + +[[package]] +name = "pip" +version = "26.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/91/47e7d486260f618783899587af63ccf7980fb60245c3e63dd4571c6b57ad/pip-26.1.2.tar.gz", hash = "sha256:f49cd134c61cf2fd75e0ce2676db03e4054504a5a4986d00f8299ae632dc4605", size = 1840799, upload-time = "2026-05-31T17:33:58.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/95/6b5cb3461ea5673ba0995989746db58eb18b91b54dbf331e72f569540946/pip-26.1.2-py3-none-any.whl", hash = "sha256:382ff9f685ee3bc25864f820aa50505825f10f5458ffff07e30a6d96e5715cab", size = 1813144, upload-time = "2026-05-31T17:33:56.772Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + +[[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 = "pre-commit" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +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" } +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" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pybtex" +version = "0.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "latexcodec" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/f5/f30da9c93f0fa6d619332b2f69597219b625f35780473a05164a9981fd9a/pybtex-0.26.1.tar.gz", hash = "sha256:2e5543bea424e60e9e42eef70bff597be48649d8f68ba061a7a092b2477d5464", size = 692991, upload-time = "2026-04-03T13:05:39.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/f6/775eb92e865b28cdb4ad1f2bed7a5446197516f76b58a950faa3be3fd08d/pybtex-0.26.1-py3-none-any.whl", hash = "sha256:e26c0412cc54f5f21b2a6d9d175762a2d2af9ccf3a8f651cdb89ec035db77aa1", size = 126134, upload-time = "2026-04-03T13:05:40.623Z" }, +] + +[[package]] +name = "pybtex-docutils" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "pybtex" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/84/796ea94d26188a853660f81bded39f8de4cfe595130aef0dea1088705a11/pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b", size = 18348, upload-time = "2023-08-22T18:47:54.833Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/b1/ce1f4596211efb5410e178a803f08e59b20bedb66837dcf41e21c54f9ec1/pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9", size = 6385, upload-time = "2023-08-22T06:43:20.513Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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/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.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/4c/f883ab8f0daad69f47efdf95f55a66b51a8b939c430dadce0611508d9e99/pytest_cov-6.3.0.tar.gz", hash = "sha256:35c580e7800f87ce892e687461166e1ac2bcb8fb9e13aea79032518d6e503ff2", size = 70398, upload-time = "2025-09-06T15:40:14.361Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/b4/bb7263e12aade3842b938bc5c6958cae79c5ee18992f9b9349019579da0f/pytest_cov-6.3.0-py3-none-any.whl", hash = "sha256:440db28156d2468cafc0415b4f8e50856a0d11faefa38f30906048fe490f1749", size = 25115, upload-time = "2025-09-06T15:40:12.44Z" }, +] + +[[package]] +name = "pytest-json-report" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, + { name = "pytest-metadata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/d3/765dae9712fcd68d820338908c1337e077d5fdadccd5cacf95b9b0bea278/pytest-json-report-1.5.0.tar.gz", hash = "sha256:2dde3c647851a19b5f3700729e8310a6e66efb2077d674f27ddea3d34dc615de", size = 21241, upload-time = "2022-03-15T21:03:10.2Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/35/d07400c715bf8a88aa0c1ee9c9eb6050ca7fe5b39981f0eea773feeb0681/pytest_json_report-1.5.0-py3-none-any.whl", hash = "sha256:9897b68c910b12a2e48dd849f9a284b2c79a732a8a9cb398452ddd23d3c8c325", size = 13222, upload-time = "2022-03-15T21:03:08.65Z" }, +] + +[[package]] +name = "pytest-metadata" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/85/8c969f8bec4e559f8f2b958a15229a35495f5b4ce499f6b865eac54b878d/pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8", size = 9952, upload-time = "2024-02-12T19:38:44.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/43/7e7b2ec865caa92f67b8f0e9231a798d102724ca4c0e1f414316be1c1ef2/pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b", size = 11428, upload-time = "2024-02-12T19:38:42.531Z" }, +] + +[[package]] +name = "pytest-timeout" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/82/4c9ecabab13363e72d880f2fb504c5f750433b2b6f16e99f4ec21ada284c/pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a", size = 17973, upload-time = "2025-05-05T19:44:34.99Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" }, +] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-discovery" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/12/38c1a0b1e64806780c9563e3fc9f6e472251839662587cfbe9bfaf2ae10a/python_discovery-1.4.0.tar.gz", hash = "sha256:eb8bc7daad3c226c147e45bb4e970a1feb1bf4048ee178e6db59e197b8010ce3", size = 68455, upload-time = "2026-05-28T01:15:37.639Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/8d/3d316429f65029532bb1e28ff77b797d86b5ac3915bb44ca4e19aa283d43/python_discovery-1.4.0-py3-none-any.whl", hash = "sha256:26ed78d703e234879a66244c7d4114563fb13ec5cd30a2d1357e5fb4850782da", size = 33217, upload-time = "2026-05-28T01:15:36.573Z" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +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 = "readme-renderer" +version = "43.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "nh3" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/b5/536c775084d239df6345dccf9b043419c7e3308bc31be4c7882196abc62e/readme_renderer-43.0.tar.gz", hash = "sha256:1818dd28140813509eeed8d62687f7cd4f7bad90d4db586001c5dc09d4fde311", size = 31768, upload-time = "2024-02-26T16:10:59.415Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/be/3ea20dc38b9db08387cf97997a85a7d51527ea2057d71118feb0aa8afa55/readme_renderer-43.0-py3-none-any.whl", hash = "sha256:19db308d86ecd60e5affa3b2a98f017af384678c63c88e5d4556a380e674f3f9", size = 13301, upload-time = "2024-02-26T16:10:57.945Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload-time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload-time = "2022-01-10T00:52:29.594Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130'", +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/5f7ec371001337d8fa61701c186ff8b613ecac1651848c5950f4c4d5f2e9/ruff-0.15.16.tar.gz", hash = "sha256:d05e78d38c78caf020b03789e25106c93017db5a0cb6e2819885018c61343b78", size = 4714267, upload-time = "2026-06-04T16:33:09.974Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/42/53ef1c3953f157956db9bf7861e3bc50b9b887ce93300aa48cdba8336fe6/ruff-0.15.16-py3-none-linux_armv6l.whl", hash = "sha256:6ac3c0b3969cc6cf6b158c4e2f8f682acb58e7d700d8a44b65ecdc72d66ab0b2", size = 10709025, upload-time = "2026-06-04T16:32:51.935Z" }, + { url = "https://files.pythonhosted.org/packages/93/9a/a79159346f19134a956607754e57d8d128f7a4c00f4ad2f7514d224c172c/ruff-0.15.16-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:197c207ed75ffba54a0dec23db4aa939a27a3053073e085e0042433cbdc58e4a", size = 11063550, upload-time = "2026-06-04T16:32:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/bc/72/3ce2ac000a5299ec238e01f51397b3b653c93b077d9b1bfe8715bb895f20/ruff-0.15.16-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a39fec45ab316cc23e7558f23fea4a70403ddb5648ea9a4a3854a16973d0071", size = 10421345, upload-time = "2026-06-04T16:32:37.251Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c2/cc7fad3ec9169373f5b6a18f1917b91080feec40c3f9658334a1d28e2f03/ruff-0.15.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba93191d79003116b95128c9d306e045200fdbd0bccb782b110f3cd1d4abc5cf", size = 10757217, upload-time = "2026-06-04T16:32:54.722Z" }, + { url = "https://files.pythonhosted.org/packages/69/d2/3474009eaa0a65b31fa7152a2fad5e2f050c640ceb1e6b02ee6922e94c82/ruff-0.15.16-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6ee4b90520630120ef032aa5cc10db483852dff950e78b1d717e2993a61ac8d", size = 10507035, upload-time = "2026-06-04T16:33:05.343Z" }, + { url = "https://files.pythonhosted.org/packages/ca/81/b7ae6ccbd11f0c8dc3d5d67fc4be9b57ff57ca86ba56152021378e1277f2/ruff-0.15.16-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e4215bc938bc3c8215c1472c1aa437e310fee20cd427335fec9d7e609563628", size = 11255291, upload-time = "2026-06-04T16:32:49.49Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e1/46e526f1a7cc90857ce6ddf25fbb77eb6568651ac38d71b033af07076dd5/ruff-0.15.16-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c8d26be963b090f10e29abc8b3e74a2a321f6fa34e02424e30b5af89350ecbb", size = 12124922, upload-time = "2026-06-04T16:33:07.821Z" }, + { url = "https://files.pythonhosted.org/packages/1a/da/5c791b088b596b24d0deb967fa28ae02ad751a140c0b9ea81c5ab915d6c0/ruff-0.15.16-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f198cf4123602a2280ed46c307bcbafe41758d6fee5b456b6b6058ca1514b3b4", size = 11332186, upload-time = "2026-06-04T16:33:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/72/11/5da87abe20047c8962361473923ebb2f62b595250126aadfad8c20649c1e/ruff-0.15.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb27515fa6240fb586ae82b901a59e67d24acff86f2190b433dc542fe0435aeb", size = 11373541, upload-time = "2026-06-04T16:32:47.007Z" }, + { url = "https://files.pythonhosted.org/packages/fe/2a/8554754c23a854ae3fd6b507e36ad61ddb121e298c6d5d617dec94ed0f14/ruff-0.15.16-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a267c46ba1593fc26b8eecbea050b39d40c0b6bb7781ee11c90a02cd10032951", size = 11353014, upload-time = "2026-06-04T16:32:34.795Z" }, + { url = "https://files.pythonhosted.org/packages/62/25/62ea41529ec89f742ea3fed9cb1059c72877ec7cf9b9e99ac9cf3294d1d9/ruff-0.15.16-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:528c68f39a91498a8d50e91ff5985df3d105782bab49cc378e73ac26bff083e8", size = 10737467, upload-time = "2026-06-04T16:32:26.348Z" }, + { url = "https://files.pythonhosted.org/packages/90/17/334d3ad9de4d40f9dd58fdd09e35ce64553bb501e2f19a839e2fb6be14fc/ruff-0.15.16-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7ed55c58950df60589a9a7a5d2f8fa5f54ebd287163be805adfe6ee95a9de123", size = 10521910, upload-time = "2026-06-04T16:32:32.54Z" }, + { url = "https://files.pythonhosted.org/packages/4d/bd/3ac7c6ae77a885c1004b3dda2446ea401768d24f851c14b4ad4b24f6639c/ruff-0.15.16-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d482feaf51512b50f9790ceb417a56a61dd1e9d9bf967662b9ed27c01b34f53a", size = 10979190, upload-time = "2026-06-04T16:32:57.492Z" }, + { url = "https://files.pythonhosted.org/packages/33/d7/609546e6a413c3f216fbf2a50c928f97c80939154f6a0503114094a86191/ruff-0.15.16-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1e15bc8c94513dae2a40cc9ef07c94fdd4ecc9e29dabebeebe170f952322c9e3", size = 11477014, upload-time = "2026-06-04T16:32:44.687Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/f2cd247ad32633a5c36e97141a2c21b11c6279f7957bc2ff360b1e08fddd/ruff-0.15.16-py3-none-win32.whl", hash = "sha256:580378f7bd4aa25f72e74aa54948a9622f142b1e509521dd10902e886681cc1e", size = 10735541, upload-time = "2026-06-04T16:32:30.145Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9e/02e845ef151b1dee585e55c4739f8e1734ae1d9f1221dff65761c162208b/ruff-0.15.16-py3-none-win_amd64.whl", hash = "sha256:408256017284eddf98fff77b29aa4fb30f586042d535b2d9befc6512f400aaec", size = 11843403, upload-time = "2026-06-04T16:32:39.76Z" }, + { url = "https://files.pythonhosted.org/packages/15/19/016553f86f207450aebebc2b2b5088d086b901cc8186c02ac4284db3bd88/ruff-0.15.16-py3-none-win_arm64.whl", hash = "sha256:8cd61783afb39638a7133ef0d2dfb1e91277593962f81b5a8423eb0b888a6121", size = 11134555, upload-time = "2026-06-04T16:33:00.136Z" }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload-time = "2024-01-25T13:21:49.598Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra != 'extra-13-torchpfaffian-cpu') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jeepney", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra != 'extra-13-torchpfaffian-cpu') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'emscripten' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'win32' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, +] + +[[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 = "snowballstemmer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/f8/0a71edf031f03c40db17503cb8ca78a69a171254e568e7db241b0ab57ea1/snowballstemmer-3.1.1.tar.gz", hash = "sha256:e07bbc54a0d798fe6010a12398422e62a8bfbba95c394fd0956ef58cb4d3e260", size = 123314, upload-time = "2026-06-03T00:56:40.194Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752", size = 104164, upload-time = "2026-06-03T00:56:38.614Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" }, +] + +[[package]] +name = "sphinx" +version = "6.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/6d/392defcc95ca48daf62aecb89550143e97a4651275e62a3d7755efe35a3a/Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b", size = 6681092, upload-time = "2023-04-25T11:01:40.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/d8/45ba6097c39ba44d9f0e1462fb232e13ca4ddb5aea93a385dcfa964687da/sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912", size = 3024615, upload-time = "2023-04-25T11:01:08.562Z" }, +] + +[[package]] +name = "sphinx-mdinclude" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "mistune" }, + { name = "pygments" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/a7/c9a7888bb2187fdb06955d71e75f6f266b7e179b356ac76138d160a5b7eb/sphinx_mdinclude-0.6.2.tar.gz", hash = "sha256:447462e82cb8be61404a2204227f920769eb923d2f57608e3325f3bb88286b4c", size = 65257, upload-time = "2024-08-03T19:07:37.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/3d/6b41fe1637cd53c4b10d56e0e6f396546f837973dabf9c4b2a1de44620ac/sphinx_mdinclude-0.6.2-py3-none-any.whl", hash = "sha256:648e78edb067c0e4bffc22943278d49d54a0714494743592032fa3ad82a86984", size = 16911, upload-time = "2024-08-03T19:07:30.406Z" }, +] + +[[package]] +name = "sphinx-rtd-theme" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "sphinx" }, + { name = "sphinxcontrib-jquery" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl", hash = "sha256:1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89", size = 7655617, upload-time = "2026-01-12T16:03:28.101Z" }, +] + +[[package]] +name = "sphinx-theme" +version = "1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3e/72404596274be91bcf809bf502f4c06c96a78c9c4791f0bb3df0f44b08b8/sphinx_theme-1.0.tar.gz", hash = "sha256:6a763f2568bb320b9296a1694a2e29ad8341930fc54471b19a38b080e644f3a2", size = 3690298, upload-time = "2017-01-05T02:54:24.817Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/99/aa60497585a4fad7a6b46e9493e146217ef7080712aa6141f6903139b027/sphinx_theme-1.0-py2.py3-none-any.whl", hash = "sha256:42691f1fa370b719a9456a484e8d7573259d4d62cc06866885f3988eba9edb70", size = 5549882, upload-time = "2017-01-05T02:54:11.844Z" }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, +] + +[[package]] +name = "sphinxcontrib-bibtex" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "pybtex" }, + { name = "pybtex-docutils" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/54/94fbcd5eb0532eaa91580d09795c4b6c562b72d5638c2ed5b5cc31d2b1f8/sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa", size = 113310, upload-time = "2022-08-22T13:16:46.025Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/17/3be04de2ed752996654895558db01a30d64759b2c7120e7692402b8d4e19/sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76", size = 39752, upload-time = "2022-08-22T13:16:43.376Z" }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, +] + +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104, upload-time = "2023-03-14T15:01:00.356Z" }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/da/6fbf010c8ebb347679d0d100b22fe9ba5e13fd04046c5df7280d2f0bf706/sqlalchemy-2.0.50.tar.gz", hash = "sha256:af5607d11ef90fd6a5c0549fe0045dce1663d427426bcfb506dcb5346a85a3b9", size = 9907424, upload-time = "2026-05-24T19:20:04.018Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/a9/812a775bd8c1af0966d660238d005baf25e9bced1f038c8e71f00aa637a7/sqlalchemy-2.0.50-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7af6eeb84985bf840ba779018ff9424d61ff69b52e66b8789d3c8da7bf5341b2", size = 2161617, upload-time = "2026-05-24T20:00:00.761Z" }, + { url = "https://files.pythonhosted.org/packages/d5/74/5a6bc5496e9be8f740fbf80f9e6bd4ab965c8a80870eb07ab015e360957a/sqlalchemy-2.0.50-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0fe7822866f3a9fc5f3db21a290ce8961a53050115f05edf9402b6a5feb92a9f", size = 3244104, upload-time = "2026-05-24T20:07:38.158Z" }, + { url = "https://files.pythonhosted.org/packages/81/55/b260d8df2adc9bb0bf294f67b5f802ff0d84d99442b536b9efd0ea72d447/sqlalchemy-2.0.50-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e1b0f6a4dcd9b4839e2320afb5df37a6981cbc20ff9c423ae11c5537bdbd21", size = 3243039, upload-time = "2026-05-24T20:14:23.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/6d/58714005cbf370f16c3f30d30324a43be10069efcfe764f7236a2e851947/sqlalchemy-2.0.50-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e195687f1af431c9515416288373b323b6eb599f774409814e89e9d603a56e39", size = 3195017, upload-time = "2026-05-24T20:07:40.086Z" }, + { url = "https://files.pythonhosted.org/packages/30/e8/67527fee039bd3e1a6ce3f03d2b62fd87ab9099c17052810d79496727b66/sqlalchemy-2.0.50-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ea1a8a2db4b2217d456c8d7a873bfc605f06fe3584d315264ea18c2a17585d0b", size = 3215308, upload-time = "2026-05-24T20:14:26.034Z" }, + { url = "https://files.pythonhosted.org/packages/94/b2/dd3155a6a6706cb89adecf5ee6e0512f7b0ee5cf3e6f4cde67d3c20ebfda/sqlalchemy-2.0.50-cp310-cp310-win32.whl", hash = "sha256:68b154b08088b4ec32bb4d2958bfbb50e57549f91a4cd3e7f928e3553ed69031", size = 2121637, upload-time = "2026-05-24T20:08:06.401Z" }, + { url = "https://files.pythonhosted.org/packages/93/a1/a09c463ee3e7764b5ce5bd19a7f0b6eefbde62e637439ab58498cdbd6b47/sqlalchemy-2.0.50-cp310-cp310-win_amd64.whl", hash = "sha256:66e374271ecb7101273f57af1a62446a953d327eec4f8089147de57c591bbacc", size = 2144673, upload-time = "2026-05-24T20:08:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/b6/5d/3172686af1770e4de2805f919a51441085f589ddadf3dd76ec582f84f497/sqlalchemy-2.0.50-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1aa6e403663a9c43c8fef7ce4bdb4cf48bcd8d352e91deda2a99f963270bd508", size = 2161366, upload-time = "2026-05-24T20:00:02.061Z" }, + { url = "https://files.pythonhosted.org/packages/0f/90/e98dedea3c3e663a17afcd003a34ba45efdac2cea3b6f2e4585e2b1e2537/sqlalchemy-2.0.50-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51b637a84f9fa35ae1f9017e786cb142974a25305085e1b378b3647a67f65ad3", size = 3318926, upload-time = "2026-05-24T20:07:42.369Z" }, + { url = "https://files.pythonhosted.org/packages/3b/4f/501308c2babb62c11753ecb4ee88ba9eef019419a4d6cbf7cb13e2bad353/sqlalchemy-2.0.50-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2dab927761d9108550f0cf8e66ff21af56f907a0ce0a689793db615e2b55f62c", size = 3319199, upload-time = "2026-05-24T20:14:28.551Z" }, + { url = "https://files.pythonhosted.org/packages/ac/39/d88996c5e03ed6248c3a788d20f0b8d8b376b9f8a495e4bab9df7c72d2f8/sqlalchemy-2.0.50-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:545eae198d37bcf837a10ede3684e2af32458d6f35c597c35c2de7502dc38fc4", size = 3270301, upload-time = "2026-05-24T20:07:44.917Z" }, + { url = "https://files.pythonhosted.org/packages/42/1b/1ae0e65161b51cc43e5ca75430ef79d80e23b5042d645586c2c342c3b92e/sqlalchemy-2.0.50-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fec460e18cdbb4c7773531122ce9a27e96c6ca17af3933941d94da475ad2c86", size = 3293465, upload-time = "2026-05-24T20:14:30.501Z" }, + { url = "https://files.pythonhosted.org/packages/83/29/17c0003f2c0dfa6d1b97672475707e3ec5980db09defd7fa20beb6833bbd/sqlalchemy-2.0.50-cp311-cp311-win32.whl", hash = "sha256:e6e814658818fd165e749e3d8490ef16cc7f379a118c37ada8b0589ffbaaac22", size = 2120694, upload-time = "2026-05-24T20:08:09.237Z" }, + { url = "https://files.pythonhosted.org/packages/c9/18/280d00654cc19d1fccf236fa5070f6dd04b84dde6f1b2e637bde0ff340a7/sqlalchemy-2.0.50-cp311-cp311-win_amd64.whl", hash = "sha256:1c5f858fe79c9f5d8fda065c06186356acb7f8df3cd52dbd5ee3f200e4b144f5", size = 2145315, upload-time = "2026-05-24T20:08:10.952Z" }, + { url = "https://files.pythonhosted.org/packages/be/b0/a9d19b43f38f878b1278bca5b00b909f7540d41494396dd2561f9ad0956d/sqlalchemy-2.0.50-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae23d8b9d344d30d0a92f06d45825024a5790f1c1dd4cf452636a50d3e58cb", size = 2159807, upload-time = "2026-05-24T19:27:53.086Z" }, + { url = "https://files.pythonhosted.org/packages/f5/2c/191dd58a248fd2cfd4780fa82c375c505e4ad98c8b522fa69ec492130d77/sqlalchemy-2.0.50-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47b71b933e7b4ebad407c8fdfd70d2c4f08b78b3238bb30eebdd6eb32ca51b89", size = 3343358, upload-time = "2026-05-24T20:09:29.279Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2b/514fce8a7df81cf5bad7ff7865de7ac0c5776a38cc043475c4703eb7fe8b/sqlalchemy-2.0.50-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:110fdac56ace278949f00de805edacbd6141e382d992f9ba28238b3a0827a600", size = 3357994, upload-time = "2026-05-24T20:17:13.495Z" }, + { url = "https://files.pythonhosted.org/packages/35/a6/a0e283f5494f92b0d77e319ff77e437b1ffe4a051ba67c81d53234825475/sqlalchemy-2.0.50-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5e4ac70e9e757f6b3e87c0491ff034442ecd8dfd36d041a50564c322dafc0e", size = 3289399, upload-time = "2026-05-24T20:09:32.239Z" }, + { url = "https://files.pythonhosted.org/packages/b7/96/1b07325ba71752d6a028b77d07bed1483ad545f794e8b1dc89b3ba3b3c68/sqlalchemy-2.0.50-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:724f3dcbe53dd0151e3cb5e7ec4ba4c620bede579caacd16275dc35ce06e8615", size = 3321216, upload-time = "2026-05-24T20:17:15.581Z" }, + { url = "https://files.pythonhosted.org/packages/ed/8e/bad6ed253e8a99edfc99af02f7173ec48a1d3ed1b9b35a1b8bc1700900cc/sqlalchemy-2.0.50-cp312-cp312-win32.whl", hash = "sha256:1208050441471d003b7c8cb4054fb084f185cf35ac3f0ea270803865bca9939a", size = 2119194, upload-time = "2026-05-24T19:50:04.943Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2d/314a6690dda4b9cfc571eab1a63cf6fe6e1470aa3759ccda6aa016ee0f5a/sqlalchemy-2.0.50-cp312-cp312-win_amd64.whl", hash = "sha256:9d1af51558029a156a70986b7df88f042b3d158d7c8d8fb5072912d4b32d89c7", size = 2146186, upload-time = "2026-05-24T19:50:06.74Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c4/c42356b527296e9862f67990efce31ef78b4cf69cd3f80873a528a060320/sqlalchemy-2.0.50-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06a9210bdc5f4298cff0781087e2ff45683922252dacc452846373a58761f093", size = 2156697, upload-time = "2026-05-24T19:27:54.764Z" }, + { url = "https://files.pythonhosted.org/packages/60/a1/b1a70e3c4365ac7fe9e347f3710f19b562c866fb96d45e3c891588789a7b/sqlalchemy-2.0.50-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b53784972ade4f8174b9aa661f31a06f8a936d2cfdd602913ff3c6dd40ae873", size = 3284260, upload-time = "2026-05-24T20:09:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/3f/4a/f3ac3caa19f263d57b0a47f8c91bbf56583dc2d3fc63acfbf644abb24fe0/sqlalchemy-2.0.50-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31648fa14460537e768a7303b078e4344d208e0d23e06867c1f376a227ed82db", size = 3302280, upload-time = "2026-05-24T20:17:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/66/55/ccada3e3d62254587819749a0bc69f41173eb48a6e385d10e66d32a9c88e/sqlalchemy-2.0.50-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03f4323c980ad0e918cc9e5369b015f759f4e534db5bbaf4dc36832c10d05064", size = 3231580, upload-time = "2026-05-24T20:09:36.406Z" }, + { url = "https://files.pythonhosted.org/packages/05/f6/6809349130a2de0e109e7f00fd7d431da9565b9b2868b32ee684754f672b/sqlalchemy-2.0.50-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2b9dcc43afef8ac157cd92fce96985d6b8b0cfbd3df4d666f66b4d55a75d202f", size = 3269375, upload-time = "2026-05-24T20:17:20.34Z" }, + { url = "https://files.pythonhosted.org/packages/48/84/278a811ef4e07be9c89dc5cdd7be833268509a66a68c4897cf585e67428f/sqlalchemy-2.0.50-cp313-cp313-win32.whl", hash = "sha256:60922d6599065ddca2c6f376b9aa2f41a6b85a271725e0909490bbc50b1998a5", size = 2117229, upload-time = "2026-05-24T19:50:08.215Z" }, + { url = "https://files.pythonhosted.org/packages/f6/1c/067cc6187ed32d2ec222fe6d2643acc1659a6d0659f8a7cbc5ad3ae83280/sqlalchemy-2.0.50-cp313-cp313-win_amd64.whl", hash = "sha256:287086e67275a212c4582d166a6fb03a65ccc5551d80866270ce0dd9f34eccd3", size = 2143126, upload-time = "2026-05-24T19:50:09.691Z" }, + { url = "https://files.pythonhosted.org/packages/df/32/10ac51b4be7cdecd7e93d069251c86dfbf70b7adbd7c67b48ccea6c49e1c/sqlalchemy-2.0.50-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c966932507a4d7d0a37314927dbfcd89720e3f37d2a1e3352e7ae7939fa8e8a0", size = 2158519, upload-time = "2026-05-24T19:27:56.472Z" }, + { url = "https://files.pythonhosted.org/packages/5a/76/e703d2f7681d7d66c4c891af3f07c7ccf4c76ad7f18351de035b5eda007a/sqlalchemy-2.0.50-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:faffef4bcc20a1892e65e155293d99d60855bbbc79250ab712819cfd56a8e6bb", size = 3282063, upload-time = "2026-05-24T20:09:38.57Z" }, + { url = "https://files.pythonhosted.org/packages/31/26/ef168b184a25701f9995e8fb7e503fafd7a99c1c77cda1bc1a26ea2ed486/sqlalchemy-2.0.50-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c206aec519a2e7bd08abbfb33436e325fd22c632d9c21a9047e376ce241646e", size = 3287069, upload-time = "2026-05-24T20:17:21.942Z" }, + { url = "https://files.pythonhosted.org/packages/c2/15/765acc2bc693bccc43ca4a95d5b69750da8aaf6db1b5c616536e087f8920/sqlalchemy-2.0.50-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bef4ac756363227ef6402a75fee025a4bc690f92328e825868939b3b3a446a6d", size = 3230453, upload-time = "2026-05-24T20:09:40.398Z" }, + { url = "https://files.pythonhosted.org/packages/63/61/08e03c3adbf5db0087a0b6816746fec8f3032fb2f7fc899a9bb9b2a48ce4/sqlalchemy-2.0.50-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:96fbee6b19c19cd1556c8bf9419447cf2ec149ffcab7ab64348c23e54ef8547f", size = 3252413, upload-time = "2026-05-24T20:17:24.067Z" }, + { url = "https://files.pythonhosted.org/packages/03/0c/370a1f2db38436c615e10134c8a37de3688e74084792380695f3f5083860/sqlalchemy-2.0.50-cp314-cp314-win32.whl", hash = "sha256:8f00e3eb43ba30eb1b238ee03a8a62309486d1321eda3328bb611e0340033ad8", size = 2120063, upload-time = "2026-05-24T19:50:11.08Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a0/fe92bb9817863bc13ba093bda931979a26cc2ca69f8e8f26d07add3d7c6f/sqlalchemy-2.0.50-cp314-cp314-win_amd64.whl", hash = "sha256:15708c613cd5005b7dffe1f66ee6a63ee8f5e46799f71c70ebad74178c676a39", size = 2145830, upload-time = "2026-05-24T19:50:12.452Z" }, + { url = "https://files.pythonhosted.org/packages/cc/ff/e5640a98a0b2f491eb8fde10fb6c773621a2e44340de231fafcc9370f4a9/sqlalchemy-2.0.50-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3699dac4be410e97049a1658e9480da9cde956594aa0f3aebc60b88f21c5ba70", size = 2178435, upload-time = "2026-05-24T19:42:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/b7/85/337116e186f1236375b5fb70c21cfac98e8e8ab0d3a47be838dc47a59e08/sqlalchemy-2.0.50-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96233858e3df43932ac11589e22520da6e8aeb624b03fedfeebb0e8ea213086", size = 3566059, upload-time = "2026-05-24T20:01:20.848Z" }, + { url = "https://files.pythonhosted.org/packages/96/34/bb0e190e161c3c2c24314a65add57218be14a4a9486886b7f5047c1ff7c8/sqlalchemy-2.0.50-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c4e70c46fad30c3bcc6a4708bc0130a3173e11a5b25f0ea4a9d8911b450f1f52", size = 3535366, upload-time = "2026-05-24T20:03:56.768Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/a7f759f97e4fd499c5d4e4488c760d5a7fbecf3028b465a04274fcd52384/sqlalchemy-2.0.50-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1918a3cf564d16d95bca7301005f41ab2ad50b07cd3b9da50d3ed986db148d6a", size = 3474879, upload-time = "2026-05-24T20:01:23.058Z" }, + { url = "https://files.pythonhosted.org/packages/9d/d9/2907ea38eb60687d297bf9c39e5ee58053c87b57fe8a9cae97090cecbf10/sqlalchemy-2.0.50-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b00098cdbdbd38c7be3d568b0c9c3122b8c0ec62b911b57cd5e6e0254d60a76d", size = 3486117, upload-time = "2026-05-24T20:03:59.052Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e3/5aa06f167559f8c0bdae487e297d23ba548150ab016a3418265d617a4985/sqlalchemy-2.0.50-cp314-cp314t-win32.whl", hash = "sha256:1fbd55a969d7ac44a98e3dec75016074f809fa08f871585ace58dde110d1bf3e", size = 2150823, upload-time = "2026-05-24T20:08:58.644Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/112fb8f977582d7489d036e409e3723948bcf5320b3ac465f3c481bbe8f9/sqlalchemy-2.0.50-cp314-cp314t-win_amd64.whl", hash = "sha256:c5c3cdb753a9004183e1ccb634b41611654c989e61bc68617ce878e46d6f1e51", size = 2185794, upload-time = "2026-05-24T20:09:00.319Z" }, + { url = "https://files.pythonhosted.org/packages/d0/10/f7220e9b784d295d241c86ed99aeb537f92afcd469a64861f2717e9bb077/sqlalchemy-2.0.50-py3-none-any.whl", hash = "sha256:92064363517a3ff8212b5a93b8c62876579d8dfd1ca5b561335f30152d884fa9", size = 1943861, upload-time = "2026-05-24T19:59:01.119Z" }, +] + +[[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.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0" +source = { registry = "https://download.pytorch.org/whl/cpu" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:4db72a4d257c45c3502f11764ee41460a87312fdc3dff47a8957812efe961725", upload-time = "2026-02-06T16:27:14Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:0826ac8e409551e12b2360ac18b4161a838cbd111933e694752f351191331d09", upload-time = "2026-02-06T16:27:14Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:7fbbf409143a4fe0812a40c0b46a436030a7e1d14fe8c5234dfbe44df47f617e", upload-time = "2026-02-06T16:27:14Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-1-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:b39cafff7229699f9d6e172cac74d85fd71b568268e439e08d9c540e54732a3e", upload-time = "2026-02-06T16:27:17Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:7417ef370d7c3969dd509dae8d5c7daeb945af335ab76dd38358ba30a91251c1", upload-time = "2026-02-10T19:55:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:90821a3194b8806d9fa9fdaa9308c1bc73df0c26808274b14129a97c99f35794", upload-time = "2026-02-10T19:55:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:358bd7125cbec6e692d60618a5eec7f55a51b29e3652a849fd42af021d818023", upload-time = "2026-02-10T19:55:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-2-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:470de4176007c2700735e003a830828a88d27129032a3add07291da07e2a94e8", upload-time = "2026-02-10T19:55:43Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2d16abfce6c92584ceeb00c3b2665d5798424dd9ed235ea69b72e045cd53ae97", upload-time = "2026-01-23T15:09:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:4584ab167995c0479f6821e3dceaf199c8166c811d3adbba5d8eedbbfa6764fd", upload-time = "2026-01-23T15:09:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:45a1c5057629444aeb1c452c18298fa7f30f2f7aeadd4dc41f9d340980294407", upload-time = "2026-01-23T15:09:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:339e05502b6c839db40e88720cb700f5a3b50cda332284873e851772d41b2c1e", upload-time = "2026-01-23T15:09:57Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:840351da59cedb7bcbc51981880050813c19ef6b898a7fecf73a3afc71aff3fe", upload-time = "2026-01-23T15:09:59Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:c88b1129fd4e14f0f882963c6728315caae35d2f47374d17edeed1edc7697497", upload-time = "2026-01-23T15:09:59Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f4bea7dc451267c028593751612ad559299589304e68df54ae7672427893ff2c", upload-time = "2026-01-23T15:10:01Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "filelock", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, + { name = "fsspec", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, + { name = "jinja2", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "sympy", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/30/bfebdd8ec77db9a79775121789992d6b3b75ee5494971294d7b4b7c999bc/torch-2.10.0-2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2b980edd8d7c0a68c4e951ee1856334a43193f98730d97408fbd148c1a933313", size = 79411457, upload-time = "2026-02-10T21:44:59.189Z" }, + { url = "https://files.pythonhosted.org/packages/0f/8b/4b61d6e13f7108f36910df9ab4b58fd389cc2520d54d81b88660804aad99/torch-2.10.0-2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:418997cb02d0a0f1497cf6a09f63166f9f5df9f3e16c8a716ab76a72127c714f", size = 79423467, upload-time = "2026-02-10T21:44:48.711Z" }, + { url = "https://files.pythonhosted.org/packages/d3/54/a2ba279afcca44bbd320d4e73675b282fcee3d81400ea1b53934efca6462/torch-2.10.0-2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:13ec4add8c3faaed8d13e0574f5cd4a323c11655546f91fbe6afa77b57423574", size = 79498202, upload-time = "2026-02-10T21:44:52.603Z" }, + { url = "https://files.pythonhosted.org/packages/ec/23/2c9fe0c9c27f7f6cb865abcea8a4568f29f00acaeadfc6a37f6801f84cb4/torch-2.10.0-2-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:e521c9f030a3774ed770a9c011751fb47c4d12029a3d6522116e48431f2ff89e", size = 79498254, upload-time = "2026-02-10T21:44:44.095Z" }, + { url = "https://files.pythonhosted.org/packages/16/ee/efbd56687be60ef9af0c9c0ebe106964c07400eade5b0af8902a1d8cd58c/torch-2.10.0-3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a1ff626b884f8c4e897c4c33782bdacdff842a165fee79817b1dd549fdda1321", size = 915510070, upload-time = "2026-03-11T14:16:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/7b562f1808d3f65414cd80a4f7d4bb00979d9355616c034c171249e1a303/torch-2.10.0-3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac5bdcbb074384c66fa160c15b1ead77839e3fe7ed117d667249afce0acabfac", size = 915518691, upload-time = "2026-03-11T14:15:43.147Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7a/abada41517ce0011775f0f4eacc79659bc9bc6c361e6bfe6f7052a6b9363/torch-2.10.0-3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:98c01b8bb5e3240426dcde1446eed6f40c778091c8544767ef1168fc663a05a6", size = 915622781, upload-time = "2026-03-11T14:17:11.354Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c6/4dfe238342ffdcec5aef1c96c457548762d33c40b45a1ab7033bb26d2ff2/torch-2.10.0-3-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:80b1b5bfe38eb0e9f5ff09f206dcac0a87aadd084230d4a36eea5ec5232c115b", size = 915627275, upload-time = "2026-03-11T14:16:11.325Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/72bf18847f58f877a6a8acf60614b14935e2f156d942483af1ffc081aea0/torch-2.10.0-3-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:46b3574d93a2a8134b3f5475cfb98e2eb46771794c57015f6ad1fb795ec25e49", size = 915523474, upload-time = "2026-03-11T14:17:44.422Z" }, + { url = "https://files.pythonhosted.org/packages/f4/39/590742415c3030551944edc2ddc273ea1fdfe8ffb2780992e824f1ebee98/torch-2.10.0-3-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b1d5e2aba4eb7f8e87fbe04f86442887f9167a35f092afe4c237dfcaaef6e328", size = 915632474, upload-time = "2026-03-11T14:15:13.666Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8e/34949484f764dde5b222b7fe3fede43e4a6f0da9d7f8c370bb617d629ee2/torch-2.10.0-3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:0228d20b06701c05a8f978357f657817a4a63984b0c90745def81c18aedfa591", size = 915523882, upload-time = "2026-03-11T14:14:46.311Z" }, + { url = "https://files.pythonhosted.org/packages/0c/1a/c61f36cfd446170ec27b3a4984f072fd06dab6b5d7ce27e11adb35d6c838/torch-2.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5276fa790a666ee8becaffff8acb711922252521b28fbce5db7db5cf9cb2026d", size = 145992962, upload-time = "2026-01-21T16:24:14.04Z" }, + { url = "https://files.pythonhosted.org/packages/b5/60/6662535354191e2d1555296045b63e4279e5a9dbad49acf55a5d38655a39/torch-2.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:aaf663927bcd490ae971469a624c322202a2a1e68936eb952535ca4cd3b90444", size = 915599237, upload-time = "2026-01-21T16:23:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/40/b8/66bbe96f0d79be2b5c697b2e0b187ed792a15c6c4b8904613454651db848/torch-2.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:a4be6a2a190b32ff5c8002a0977a25ea60e64f7ba46b1be37093c141d9c49aeb", size = 113720931, upload-time = "2026-01-21T16:24:23.743Z" }, + { url = "https://files.pythonhosted.org/packages/76/bb/d820f90e69cda6c8169b32a0c6a3ab7b17bf7990b8f2c680077c24a3c14c/torch-2.10.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:35e407430795c8d3edb07a1d711c41cc1f9eaddc8b2f1cc0a165a6767a8fb73d", size = 79411450, upload-time = "2026-01-21T16:25:30.692Z" }, + { url = "https://files.pythonhosted.org/packages/78/89/f5554b13ebd71e05c0b002f95148033e730d3f7067f67423026cc9c69410/torch-2.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3282d9febd1e4e476630a099692b44fdc214ee9bf8ee5377732d9d9dfe5712e4", size = 145992610, upload-time = "2026-01-21T16:25:26.327Z" }, + { url = "https://files.pythonhosted.org/packages/ae/30/a3a2120621bf9c17779b169fc17e3dc29b230c29d0f8222f499f5e159aa8/torch-2.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a2f9edd8dbc99f62bc4dfb78af7bf89499bca3d753423ac1b4e06592e467b763", size = 915607863, upload-time = "2026-01-21T16:25:06.696Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3d/c87b33c5f260a2a8ad68da7147e105f05868c281c63d65ed85aa4da98c66/torch-2.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:29b7009dba4b7a1c960260fc8ac85022c784250af43af9fb0ebafc9883782ebd", size = 113723116, upload-time = "2026-01-21T16:25:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/61/d8/15b9d9d3a6b0c01b883787bd056acbe5cc321090d4b216d3ea89a8fcfdf3/torch-2.10.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:b7bd80f3477b830dd166c707c5b0b82a898e7b16f59a7d9d42778dd058272e8b", size = 79423461, upload-time = "2026-01-21T16:24:50.266Z" }, + { url = "https://files.pythonhosted.org/packages/cc/af/758e242e9102e9988969b5e621d41f36b8f258bb4a099109b7a4b4b50ea4/torch-2.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:5fd4117d89ffd47e3dcc71e71a22efac24828ad781c7e46aaaf56bf7f2796acf", size = 145996088, upload-time = "2026-01-21T16:24:44.171Z" }, + { url = "https://files.pythonhosted.org/packages/23/8e/3c74db5e53bff7ed9e34c8123e6a8bfef718b2450c35eefab85bb4a7e270/torch-2.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:787124e7db3b379d4f1ed54dd12ae7c741c16a4d29b49c0226a89bea50923ffb", size = 915711952, upload-time = "2026-01-21T16:23:53.503Z" }, + { url = "https://files.pythonhosted.org/packages/6e/01/624c4324ca01f66ae4c7cd1b74eb16fb52596dce66dbe51eff95ef9e7a4c/torch-2.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c66c61f44c5f903046cc696d088e21062644cbe541c7f1c4eaae88b2ad23547", size = 113757972, upload-time = "2026-01-21T16:24:39.516Z" }, + { url = "https://files.pythonhosted.org/packages/c9/5c/dee910b87c4d5c0fcb41b50839ae04df87c1cfc663cf1b5fca7ea565eeaa/torch-2.10.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:6d3707a61863d1c4d6ebba7be4ca320f42b869ee657e9b2c21c736bf17000294", size = 79498198, upload-time = "2026-01-21T16:24:34.704Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6f/f2e91e34e3fcba2e3fc8d8f74e7d6c22e74e480bbd1db7bc8900fdf3e95c/torch-2.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5c4d217b14741e40776dd7074d9006fd28b8a97ef5654db959d8635b2fe5f29b", size = 146004247, upload-time = "2026-01-21T16:24:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/98/fb/5160261aeb5e1ee12ee95fe599d0541f7c976c3701d607d8fc29e623229f/torch-2.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6b71486353fce0f9714ca0c9ef1c850a2ae766b409808acd58e9678a3edb7738", size = 915716445, upload-time = "2026-01-21T16:22:45.353Z" }, + { url = "https://files.pythonhosted.org/packages/6a/16/502fb1b41e6d868e8deb5b0e3ae926bbb36dab8ceb0d1b769b266ad7b0c3/torch-2.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2ee399c644dc92ef7bc0d4f7e74b5360c37cdbe7c5ba11318dda49ffac2bc57", size = 113757050, upload-time = "2026-01-21T16:24:19.204Z" }, + { url = "https://files.pythonhosted.org/packages/1a/0b/39929b148f4824bc3ad6f9f72a29d4ad865bcf7ebfc2fa67584773e083d2/torch-2.10.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:3202429f58309b9fa96a614885eace4b7995729f44beb54d3e4a47773649d382", size = 79851305, upload-time = "2026-01-21T16:24:09.209Z" }, + { url = "https://files.pythonhosted.org/packages/d8/14/21fbce63bc452381ba5f74a2c0a959fdf5ad5803ccc0c654e752e0dbe91a/torch-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:aae1b29cd68e50a9397f5ee897b9c24742e9e306f88a807a27d617f07adb3bd8", size = 146005472, upload-time = "2026-01-21T16:22:29.022Z" }, + { url = "https://files.pythonhosted.org/packages/54/fd/b207d1c525cb570ef47f3e9f836b154685011fce11a2f444ba8a4084d042/torch-2.10.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6021db85958db2f07ec94e1bc77212721ba4920c12a18dc552d2ae36a3eb163f", size = 915612644, upload-time = "2026-01-21T16:21:47.019Z" }, + { url = "https://files.pythonhosted.org/packages/36/53/0197f868c75f1050b199fe58f9bf3bf3aecac9b4e85cc9c964383d745403/torch-2.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff43db38af76fda183156153983c9a096fc4c78d0cd1e07b14a2314c7f01c2c8", size = 113997015, upload-time = "2026-01-21T16:23:00.767Z" }, + { url = "https://files.pythonhosted.org/packages/0e/13/e76b4d9c160e89fff48bf16b449ea324bda84745d2ab30294c37c2434c0d/torch-2.10.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:cdf2a523d699b70d613243211ecaac14fe9c5df8a0b0a9c02add60fb2a413e0f", size = 79498248, upload-time = "2026-01-21T16:23:09.315Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/716b5ac0155f1be70ed81bacc21269c3ece8dba0c249b9994094110bfc51/torch-2.10.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:bf0d9ff448b0218e0433aeb198805192346c4fd659c852370d5cc245f602a06a", size = 79464992, upload-time = "2026-01-21T16:23:05.162Z" }, + { url = "https://files.pythonhosted.org/packages/69/2b/51e663ff190c9d16d4a8271203b71bc73a16aa7619b9f271a69b9d4a936b/torch-2.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:233aed0659a2503b831d8a67e9da66a62c996204c0bba4f4c442ccc0c68a3f60", size = 146018567, upload-time = "2026-01-21T16:22:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cd/4b95ef7f293b927c283db0b136c42be91c8ec6845c44de0238c8c23bdc80/torch-2.10.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:682497e16bdfa6efeec8cde66531bc8d1fbbbb4d8788ec6173c089ed3cc2bfe5", size = 915721646, upload-time = "2026-01-21T16:21:16.983Z" }, + { url = "https://files.pythonhosted.org/packages/56/97/078a007208f8056d88ae43198833469e61a0a355abc0b070edd2c085eb9a/torch-2.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:6528f13d2a8593a1a412ea07a99812495bec07e9224c28b2a25c0a30c7da025c", size = 113752373, upload-time = "2026-01-21T16:22:13.471Z" }, + { url = "https://files.pythonhosted.org/packages/d8/94/71994e7d0d5238393df9732fdab607e37e2b56d26a746cb59fdb415f8966/torch-2.10.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f5ab4ba32383061be0fb74bda772d470140a12c1c3b58a0cfbf3dae94d164c28", size = 79850324, upload-time = "2026-01-21T16:22:09.494Z" }, + { url = "https://files.pythonhosted.org/packages/e2/65/1a05346b418ea8ccd10360eef4b3e0ce688fba544e76edec26913a8d0ee0/torch-2.10.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:716b01a176c2a5659c98f6b01bf868244abdd896526f1c692712ab36dbaf9b63", size = 146006482, upload-time = "2026-01-21T16:22:18.42Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b9/5f6f9d9e859fc3235f60578fa64f52c9c6e9b4327f0fe0defb6de5c0de31/torch-2.10.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d8f5912ba938233f86361e891789595ff35ca4b4e2ac8fe3670895e5976731d6", size = 915613050, upload-time = "2026-01-21T16:20:49.035Z" }, + { url = "https://files.pythonhosted.org/packages/66/4d/35352043ee0eaffdeff154fad67cd4a31dbed7ff8e3be1cc4549717d6d51/torch-2.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:71283a373f0ee2c89e0f0d5f446039bdabe8dbc3c9ccf35f0f784908b0acd185", size = 113995816, upload-time = "2026-01-21T16:22:05.312Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0+cpu" +source = { registry = "https://download.pytorch.org/whl/cpu" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform != 'darwin'", +] +dependencies = [ + { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (python_full_version < '3.12' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp310-cp310-linux_aarch64.whl", hash = "sha256:31ae44836c8b9bbd1a3943d29c7c7457709ddf7c6173aa34aefe9d2203e4c405", upload-time = "2026-01-23T15:10:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp310-cp310-linux_s390x.whl", hash = "sha256:beadc2a6a1785b09a46daad378de91ef274b8d3eea7af0bc2d017d97f115afdf", upload-time = "2026-01-23T15:10:03Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:d63ee6a80982fd73fe44bb70d97d2976e010312ff6db81d7bfb9167b06dd45b9", upload-time = "2026-01-23T15:10:05Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a280ffaea7b9c828e0c1b9b3bd502d9b6a649dc9416997b69b84544bd469f215", upload-time = "2026-01-23T15:10:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp310-cp310-win_amd64.whl", hash = "sha256:6c6f0df770144907092a0d067048d96ed4f278a6c840376d2ff0e27e7579b925", upload-time = "2026-01-23T15:10:09Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-linux_aarch64.whl", hash = "sha256:ce5c113d1f55f8c1f5af05047a24e50d11d293e0cbbb5bf7a75c6c761edd6eaa", upload-time = "2026-01-23T15:10:11Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-linux_s390x.whl", hash = "sha256:0e286fcf6ce0cc7b204396c9b4ea0d375f1f0c3e752f68ce3d3aeb265511db8c", upload-time = "2026-01-23T15:10:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1cfcb9b1558c6e52dffd0d4effce83b13c5ae5d97338164c372048c21f9cfccb", upload-time = "2026-01-23T15:10:15Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b7cb1ec66cefb90fd7b676eac72cfda3b8d4e4d0cacd7a531963bc2e0a9710ab", upload-time = "2026-01-23T15:10:15Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-win_amd64.whl", hash = "sha256:17a09465bab2aab8f0f273410297133d8d8fb6dd84dccbd252ca4a4f3a111847", upload-time = "2026-01-23T15:10:19Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp311-cp311-win_arm64.whl", hash = "sha256:c35c0de592941d4944698dbfa87271ab85d3370eca3b694943a2ab307ac34b3f", upload-time = "2026-01-23T15:10:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-linux_aarch64.whl", hash = "sha256:8de5a36371b775e2d4881ed12cc7f2de400b1ad3d728aa74a281f649f87c9b8c", upload-time = "2026-01-23T15:10:22Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:9accc30b56cb6756d4a9d04fcb8ebc0bb68c7d55c1ed31a8657397d316d31596", upload-time = "2026-01-23T15:10:24Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:179451716487f8cb09b56459667fa1f5c4c0946c1e75fbeae77cfc40a5768d87", upload-time = "2026-01-23T15:10:25Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ee40b8a4b4b2cf0670c6fd4f35a7ef23871af956fecb238fbf5da15a72650b1d", upload-time = "2026-01-23T15:10:27Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:21cb5436978ef47c823b7a813ff0f8c2892e266cfe0f1d944879b5fba81bf4e1", upload-time = "2026-01-23T15:10:30Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp312-cp312-win_arm64.whl", hash = "sha256:3eaa727e6a73affa61564d86b9d03191df45c8650d0666bd3d57c8597ef61e78", upload-time = "2026-01-23T15:10:31Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-linux_aarch64.whl", hash = "sha256:fd215f3d0f681905c5b56b0630a3d666900a37fcc3ca5b937f95275c66f9fd9c", upload-time = "2026-01-23T15:10:34Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-linux_s390x.whl", hash = "sha256:170a0623108055be5199370335cf9b41ba6875b3cb6f086db4aee583331a4899", upload-time = "2026-01-23T15:10:35Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e51994492cdb76edce29da88de3672a3022f9ef0ffd90345436948d4992be2c7", upload-time = "2026-01-23T15:10:37Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8d316e5bf121f1eab1147e49ad0511a9d92e4c45cc357d1ab0bee440da71a095", upload-time = "2026-01-23T15:10:38Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-win_amd64.whl", hash = "sha256:b719da5af01b59126ac13eefd6ba3dd12d002dc0e8e79b8b365e55267a8189d3", upload-time = "2026-01-23T15:10:41Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313-win_arm64.whl", hash = "sha256:b67d91326e4ed9eccbd6b7d84ed7ffa43f93103aa3f0b24145f3001f3b11b714", upload-time = "2026-01-23T15:10:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313t-linux_aarch64.whl", hash = "sha256:5af75e5f49de21b0bdf7672bc27139bd285f9e8dbcabe2d617a2eb656514ac36", upload-time = "2026-01-23T15:10:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313t-linux_s390x.whl", hash = "sha256:ba51ef01a510baf8fff576174f702c47e1aa54389a9f1fba323bb1a5003ff0bf", upload-time = "2026-01-23T15:10:48Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:0fedcb1a77e8f2aaf7bfd21591bf6d1e0b207473268c9be16b17cb7783253969", upload-time = "2026-01-23T15:10:48Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:106dd1930cb30a4a337366ba3f9b25318ebf940f51fd46f789281dd9e736bdc4", upload-time = "2026-01-23T15:10:50Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp313-cp313t-win_amd64.whl", hash = "sha256:eb1bde1ce198f05c8770017de27e001d404499cf552aaaa014569eff56ca25c0", upload-time = "2026-01-23T15:10:50Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314-linux_aarch64.whl", hash = "sha256:ea2bcc9d1fca66974a71d4bf9a502539283f35d61fcab5a799b4e120846f1e02", upload-time = "2026-01-23T15:10:53Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314-linux_s390x.whl", hash = "sha256:f8294fd2fc6dd8f4435a891a0122307a043b14b21f0dac1bca63c85bfb59e586", upload-time = "2026-01-23T15:10:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a28fdbcfa2fbacffec81300f24dd1bed2b0ccfdbed107a823cff12bc1db070f6", upload-time = "2026-01-23T15:10:56Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:aada8afc068add586464b2a55adb7cc9091eec55caf5320447204741cb6a0604", upload-time = "2026-01-23T15:10:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314-win_amd64.whl", hash = "sha256:2adc71fe471e98a608723bfc837f7e1929885ebb912c693597711e139c1cda41", upload-time = "2026-01-23T15:11:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314t-linux_aarch64.whl", hash = "sha256:9412bd37b70f5ebd1205242c4ba4cabae35a605947f2b30806d5c9b467936db9", upload-time = "2026-01-23T15:11:03Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314t-linux_s390x.whl", hash = "sha256:e71c476517c33e7db69825a9ff46c7f47a723ec4dac5b2481cff4246d1c632be", upload-time = "2026-01-23T15:11:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:23882f8d882460aca809882fc42f5e343bf07585274f929ced00177d1be1eb67", upload-time = "2026-01-23T15:11:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:4fcd8b4cc2ae20f2b7749fb275349c55432393868778c2d50a08e81d5ee5591e", upload-time = "2026-01-23T15:11:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.10.0%2Bcpu-cp314-cp314t-win_amd64.whl", hash = "sha256:ffc8da9a1341092d6a90cb5b1c1a33cd61abf0fb43f0cd88443c27fa372c26ae", upload-time = "2026-01-23T15:11:10Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-bindings", version = "12.9.4", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "filelock", marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "fsspec", marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jinja2", marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "sympy", marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:e186f57ef1de1aa877943259819468fc6f27efb583b4a91f9215ada7b7f4e6cc", upload-time = "2026-01-21T15:21:34Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:36368507b56eaa51acbd3c96ac8893bb9a86991ffcd0699fea3a1a74a2b8bdcb", upload-time = "2026-01-21T15:21:34Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp310-cp310-win_amd64.whl", hash = "sha256:14d2831b9292c3a9b0d80116451315a08ffe8db745d403d06000bc47165b1f9e", upload-time = "2026-01-21T15:21:34Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:85ed7944655ea6fd69377692e9cbfd7bba28d99696ceae79985e7caa99cf0a95", upload-time = "2026-01-21T15:21:36Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1d01ffaebf64715c0f507a39463149cb19e596ff702bd4bcf862601f2881dabc", upload-time = "2026-01-21T15:21:40Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp311-cp311-win_amd64.whl", hash = "sha256:3523fda6e2cfab2b04ae09b1424681358e508bb3faa11ceb67004113d5e7acad", upload-time = "2026-01-21T15:22:00Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6f09cdf2415516be028ae82e6b985bcfc3eac37bc52ab401142689f6224516ca", upload-time = "2026-01-21T15:22:03Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:628e89bd5110ced7debee2a57c69959725b7fbc64eab81a39dd70e46c7e28ba5", upload-time = "2026-01-21T15:22:11Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp312-cp312-win_amd64.whl", hash = "sha256:fbde8f6a9ec8c76979a0d14df21c10b9e5cab6f0d106a73ca73e2179bc597cae", upload-time = "2026-01-21T15:22:17Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:bdbcc703382f948e951c063448c9406bf38ce66c41dd698d9e2733fcf96c037a", upload-time = "2026-01-21T15:22:29Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7b4bd23ed63de97456fcc81c26fea9f02ee02ce1112111c4dac0d8cfe574b23e", upload-time = "2026-01-21T15:22:51Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:4d1b0b49c54223c7c04050b49eac141d77b6edbc34aea1dfc74a6fdb661baa8c", upload-time = "2026-01-21T15:22:54Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:f1f8b840c64b645a4bc61a393db48effb9c92b2dc26c8373873911f0750d1ea7", upload-time = "2026-01-21T15:23:28Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:23f58258012bcf1c349cb22af387e33aadca7f83ea617b080e774eb41e4fe8ff", upload-time = "2026-01-21T15:23:31Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:01b216e097b17a5277cfb47c383cdcacf06abeadcb0daca0c76b59e72854c3b6", upload-time = "2026-01-21T15:23:53Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:c42377bc2607e3e1c60da71b792fb507c3938c87fd6edab8b21c59c91473c36d", upload-time = "2026-01-21T15:23:56Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:37d71feea068776855686a1512058df3f19f6f040a151f055aa746601678744f", upload-time = "2026-01-21T15:24:08Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314-win_amd64.whl", hash = "sha256:c57017ca29e62271e362fdeee7d20070e254755a5148b30b553d8a10fc83c7ef", upload-time = "2026-01-21T15:24:10Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:777461f50b2daf77e4bdd8e2ad34bdfc5a993bf1bdf2ab9ef39f5edfe4e9c12b", upload-time = "2026-01-21T15:24:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7bcba6a7c5f0987a13298b1ca843155dcceceac758fa3c7ccd5c7af4059a1080", upload-time = "2026-01-21T15:24:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu128/torch-2.10.0%2Bcu128-cp314-cp314t-win_amd64.whl", hash = "sha256:70d89143c956389d4806cb4e5fe0b1129fe0db280e1073288d17fa76c101cba4", upload-time = "2026-01-21T15:24:46Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0+cu130" +source = { registry = "https://download.pytorch.org/whl/cu130" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.0.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "filelock", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "fsspec", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "jinja2", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cublas", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-cupti", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-nvrtc", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cuda-runtime", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cufft", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cufile", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-curand", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusolver", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparse", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvjitlink", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "nvidia-nvtx", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "setuptools", marker = "(python_full_version >= '3.12' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "sympy", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "typing-extensions", marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:adfb2bca94f12a5baca6ccf9aa40d6c5b1259748ebb38938be670b07a24d4e15", upload-time = "2026-01-21T19:02:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0f8566d1b3d8353b7f18d5a15375a00dae89d886bb7d01143bb394f475832286", upload-time = "2026-01-21T19:02:47Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp310-cp310-win_amd64.whl", hash = "sha256:0de43ec229a78a2e80ae8578252f9eb14f898457d1cf2be81c8c91a4108c6c79", upload-time = "2026-01-21T19:00:26Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:ea3239d544b2e569a8f47db5c7fa4fd42a2fe96aefb84bb1eda45ce213020fd2", upload-time = "2026-01-21T19:01:56Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:22cfa45e73f1e8c64f4012737987a727d01d152121b93d196b0ca22f39a3f8e3", upload-time = "2026-01-21T19:02:52Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp311-cp311-win_amd64.whl", hash = "sha256:218ae0f323d5ebe8f2770e46cbfb7bbff9af2c8d192d5187878d0964d43c8b71", upload-time = "2026-01-21T19:00:26Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:4fc8f67637f4c92b989a07d80ffe755e79a3510ca02ebf23ce66396fb277c88d", upload-time = "2026-01-21T19:01:36Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:858f0cbcc78d726fea9499eb3464faa98392fa093845a3262209bd226b7844d6", upload-time = "2026-01-21T19:02:22Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp312-cp312-win_amd64.whl", hash = "sha256:224649fa0ab181ec483cc368e3303dda1760e4ba31bea806b88979f855436aaa", upload-time = "2026-01-21T19:00:27Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:75780283308df9fede371eeda01e9607c8862a1803a2f2f31a08a2c0deaed342", upload-time = "2026-01-21T19:01:39Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7e0d9922e9e91f780b2761a0c5ebac3c15c9740bab042e1b59149afa6d6474eb", upload-time = "2026-01-21T19:02:26Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313-win_amd64.whl", hash = "sha256:48af94af745a9dd9b42be81ea15b56aba981666bcfe10394dceca6d9476a50fa", upload-time = "2026-01-21T19:00:27Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:46699da91f0367d8dfa1b606cb0352aaf190b5853f463010e75ff08f15a94e7d", upload-time = "2026-01-21T19:02:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:775d1fff07e302fb669d555a5005f781aa460aa80dff7a512e8e6e723f9def83", upload-time = "2026-01-21T19:02:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp313-cp313t-win_amd64.whl", hash = "sha256:b38e5b505b015903a51c2b3f12e50a9f152f92fe7e3992e79f504138cf90601d", upload-time = "2026-01-21T19:01:32Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:18f87ae628c02f095f2e97756e4fa249ceef6ed6e87d5a3c79b5338abf842511", upload-time = "2026-01-21T19:01:38Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:db5a61791b7da3c1aa5a496e64cd72dbd4ef3ef2cbb69680fd45dc255b0da2f3", upload-time = "2026-01-21T19:02:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314-win_amd64.whl", hash = "sha256:dda35d473dd34cafa0668be176b9ad2cb69b1ff570d0336715a6541e89e27640", upload-time = "2026-01-21T19:00:26Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:7781235583ea06b214075c10fa95f83b9805f06af44efc6e9946808413cff94f", upload-time = "2026-01-21T19:01:59Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:526b737db11d632281795484ec729baae5f193a5a0d76a1f7d822f7897c8b4f5", upload-time = "2026-01-21T19:02:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp314-cp314t-win_amd64.whl", hash = "sha256:d5ea18790a18b660d655f6e75a8ca6e8d6298b55fc338f8c921764b94c886743", upload-time = "2026-01-21T19:01:35Z" }, +] + +[[package]] +name = "torchpfaffian" +version = "0.0.1" +source = { editable = "." } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra != 'extra-13-torchpfaffian-cu128' and extra != 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "extra == 'extra-13-torchpfaffian-cu128' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "(extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra != 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (extra != 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130')" }, +] + +[package.optional-dependencies] +cpu = [ + { name = "torch", version = "2.10.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "torch", version = "2.10.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-13-torchpfaffian-cpu') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +cu128 = [ + { name = "torch", version = "2.10.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" } }, +] +cu130 = [ + { name = "torch", version = "2.10.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" } }, +] + +[package.dev-dependencies] +dev = [ + { name = "build" }, + { name = "maturin" }, + { name = "mypy" }, + { name = "nbmake" }, + { name = "pip" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "pytest-json-report" }, + { name = "pytest-timeout" }, + { name = "pytest-xdist" }, + { name = "ruff" }, + { name = "seaborn" }, + { name = "tqdm" }, + { name = "twine" }, + { name = "wheel" }, +] +docs = [ + { name = "build" }, + { name = "docutils" }, + { name = "groundwork-sphinx-theme" }, + { name = "ipykernel" }, + { name = "karma-sphinx-theme" }, + { name = "matplotlib" }, + { name = "myst-nb" }, + { name = "nbconvert" }, + { name = "sphinx" }, + { name = "sphinx-mdinclude" }, + { name = "sphinx-rtd-theme" }, + { name = "sphinx-theme" }, + { name = "sphinxcontrib-bibtex" }, + { name = "twine" }, + { name = "wheel" }, +] + +[package.metadata] +requires-dist = [ + { name = "numpy", specifier = ">=1.23,<3.0.0" }, + { name = "torch", specifier = ">=2.1,<3.0.0" }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.1.2,<3.0.0", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "torchpfaffian", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu128'", specifier = ">=2.1.2,<3.0.0", index = "https://download.pytorch.org/whl/cu128", conflict = { package = "torchpfaffian", extra = "cu128" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.1.2,<3.0.0", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "torchpfaffian", extra = "cu130" } }, +] +provides-extras = ["cpu", "cu128", "cu130"] + +[package.metadata.requires-dev] +dev = [ + { name = "build", specifier = ">=1.4,<2" }, + { name = "maturin", specifier = ">=1.0,<2" }, + { name = "mypy", specifier = ">=1.15,<2" }, + { name = "nbmake", specifier = ">=1.5,<2" }, + { name = "pip", specifier = ">=25" }, + { name = "pre-commit", specifier = ">=4.5.1" }, + { name = "pytest", specifier = ">=8.4,<9" }, + { name = "pytest-cov", specifier = ">=6.1,<7" }, + { name = "pytest-json-report", specifier = ">=1.5,<2" }, + { name = "pytest-timeout", specifier = ">=2.4" }, + { name = "pytest-xdist", specifier = ">=3.7,<4" }, + { name = "ruff", specifier = ">=0.9,<1" }, + { name = "seaborn", specifier = ">=0.13.2" }, + { name = "tqdm", specifier = ">=4.68.2" }, + { name = "twine", specifier = ">=6.1,<7" }, + { name = "wheel", specifier = ">=0.45,<0.46" }, +] +docs = [ + { name = "build", specifier = ">=1.4,<2" }, + { name = "docutils", specifier = ">=0.18,<0.20" }, + { name = "groundwork-sphinx-theme", specifier = ">=1.1,<2" }, + { name = "ipykernel", specifier = ">=6.29,<7" }, + { name = "karma-sphinx-theme", specifier = ">=0.0.8,<0.0.9" }, + { name = "matplotlib", specifier = ">=3.8,<4" }, + { name = "myst-nb", specifier = ">=1.1,<2" }, + { name = "nbconvert", specifier = ">=7.16,<8" }, + { name = "sphinx", specifier = ">=6.2,<6.3" }, + { name = "sphinx-mdinclude", specifier = ">=0.6,<0.7" }, + { name = "sphinx-rtd-theme", specifier = ">=3.0,<4" }, + { name = "sphinx-theme", specifier = "~=1.0" }, + { name = "sphinxcontrib-bibtex", specifier = ">=2.5,<2.6" }, + { name = "twine", specifier = ">=6.1,<7" }, + { name = "wheel", specifier = ">=0.45,<0.46" }, +] + +[[package]] +name = "tornado" +version = "6.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/24/95ec527ad67b76d59299e5465b3935d05e4294b7e0290a3924b7487df30b/tornado-6.5.7.tar.gz", hash = "sha256:66c513a76cda70d53907bc27cf1447557699c2e95aa48ba27a442ff61c3ddfc2", size = 519252, upload-time = "2026-06-08T17:34:51.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/dc/c7043cab6fed8ae159fc1923ce829ada35c4dbd797d408a43858ffaf9639/tornado-6.5.7-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:148b2eb15c2c765a50796172c1e499649b35f30d2e3c3d3e15913cfa56bfb163", size = 448543, upload-time = "2026-06-08T17:34:38.052Z" }, + { url = "https://files.pythonhosted.org/packages/92/4f/090b1431e5a43df696feceffc268c5383cc079ecb5f08ce58f917109aafe/tornado-6.5.7-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9da38de27f1da3b78a966f0dae12b5a1ea9afe72ca805d84ff06508272ddf100", size = 446707, upload-time = "2026-06-08T17:34:39.594Z" }, + { url = "https://files.pythonhosted.org/packages/37/d8/ef374952fd5da67d4463122c2b8e5a96536ec10b4b339254c6dcde81d01c/tornado-6.5.7-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8d759e71906ee783f8867b93bf26a265743da4c1e2f4a018464c1ba019862972", size = 449774, upload-time = "2026-06-08T17:34:41.204Z" }, + { url = "https://files.pythonhosted.org/packages/35/37/d434c73f4c6e014b745b9b37085f34f40c022f007efff3d7fe65991899f3/tornado-6.5.7-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a46347a18f23fb92b396beebe0fb78f61dda0cc302445202c16203d8a18848b", size = 450745, upload-time = "2026-06-08T17:34:42.531Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2b/56b9aff361d7f1ab728a805ec7d7ea835f8807afa9f5cc690ea0e630efb9/tornado-6.5.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7778b30bef919231265e91c69963ce0f49a1e9c07ac900bbe75b19ce2575ba92", size = 450578, upload-time = "2026-06-08T17:34:43.787Z" }, + { url = "https://files.pythonhosted.org/packages/02/30/a7444fb23aa76860a14198fab96ac79f1866b0a6e19e26c4381b0938e50f/tornado-6.5.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e726f0c75da7726eec023aa62751ff8878bd2737e34fbdd33b1ae5897d2200f5", size = 449985, upload-time = "2026-06-08T17:34:45.326Z" }, + { url = "https://files.pythonhosted.org/packages/5c/42/5f0e56c01e8d9d36f4e23f367b85ae6cae0c1ecddd5e6977d8388ad27488/tornado-6.5.7-cp39-abi3-win32.whl", hash = "sha256:f8de3bf12d3efdd0cbe7c8887868198f8a91415e3f29fcf258d9b8eb7b1d9ae4", size = 451047, upload-time = "2026-06-08T17:34:46.784Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/b393076ffb21b469eec5b328a0534cf03a3b90bfc6b1f09507cdd075d938/tornado-6.5.7-cp39-abi3-win_amd64.whl", hash = "sha256:de942f843533a039ef9fa3d9c88c7cd8a7c94553fb5ad0154270989b3d99a2c4", size = 451485, upload-time = "2026-06-08T17:34:48.248Z" }, + { url = "https://files.pythonhosted.org/packages/71/2e/7b1c769803121b809112cf9a00681c472eae1d80e32d7ec0e0bd61d0d0e1/tornado-6.5.7-cp39-abi3-win_arm64.whl", hash = "sha256:ff934fce95643af5f11efdae618eaa73d469dc588641e5c8d19295a0c65c4796", size = 450506, upload-time = "2026-06-08T17:34:49.702Z" }, +] + +[[package]] +name = "tqdm" +version = "4.68.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/05/0d5260f1f1ca784f4a4a0def9cbe6affe587f5b4025328d446c3d67765f4/tqdm-4.68.2.tar.gz", hash = "sha256:89c230e8dbc67c7615c142487111222f878c77427ea09549960f62389e258add", size = 171923, upload-time = "2026-06-09T13:26:42.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/75/1a0392bcc21c44dcdf87b3cf2d137e7829be2c083a1e38d44efca3d57a16/tqdm-4.68.2-py3-none-any.whl", hash = "sha256:d4240441fb5353290b87d6a85968c9decc131a99b8c7faa28269d829de669ede", size = 78578, upload-time = "2026-06-09T13:26:40.731Z" }, +] + +[[package]] +name = "traitlets" +version = "5.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, +] + +[[package]] +name = "triton" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/ba/b1b04f4b291a3205d95ebd24465de0e5bf010a2df27a4e58a9b5f039d8f2/triton-3.6.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c723cfb12f6842a0ae94ac307dba7e7a44741d720a40cf0e270ed4a4e3be781", size = 175972180, upload-time = "2026-01-20T16:15:53.664Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f7/f1c9d3424ab199ac53c2da567b859bcddbb9c9e7154805119f8bd95ec36f/triton-3.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6550fae429e0667e397e5de64b332d1e5695b73650ee75a6146e2e902770bea", size = 188105201, upload-time = "2026-01-20T16:00:29.272Z" }, + { url = "https://files.pythonhosted.org/packages/0f/2c/96f92f3c60387e14cc45aed49487f3486f89ea27106c1b1376913c62abe4/triton-3.6.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49df5ef37379c0c2b5c0012286f80174fcf0e073e5ade1ca9a86c36814553651", size = 176081190, upload-time = "2026-01-20T16:16:00.523Z" }, + { url = "https://files.pythonhosted.org/packages/e0/12/b05ba554d2c623bffa59922b94b0775673de251f468a9609bc9e45de95e9/triton-3.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8e323d608e3a9bfcc2d9efcc90ceefb764a82b99dea12a86d643c72539ad5d3", size = 188214640, upload-time = "2026-01-20T16:00:35.869Z" }, + { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0b/37d991d8c130ce81a8728ae3c25b6e60935838e9be1b58791f5997b24a54/triton-3.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c7f76c6e72d2ef08df639e3d0d30729112f47a56b0c81672edc05ee5116ac9", size = 188289450, upload-time = "2026-01-20T16:00:49.136Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" }, + { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" }, + { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" }, + { url = "https://files.pythonhosted.org/packages/df/3d/9e7eee57b37c80cec63322c0231bb6da3cfe535a91d7a4d64896fcb89357/triton-3.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a17a5d5985f0ac494ed8a8e54568f092f7057ef60e1b0fa09d3fd1512064e803", size = 188273063, upload-time = "2026-01-20T16:01:07.278Z" }, + { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" }, + { url = "https://files.pythonhosted.org/packages/f6/56/6113c23ff46c00aae423333eb58b3e60bdfe9179d542781955a5e1514cb3/triton-3.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46bd1c1af4b6704e554cad2eeb3b0a6513a980d470ccfa63189737340c7746a7", size = 188397994, upload-time = "2026-01-20T16:01:14.236Z" }, +] + +[[package]] +name = "twine" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "id" }, + { name = "keyring", marker = "(platform_machine != 'ppc64le' and platform_machine != 's390x') or (platform_machine == 'ppc64le' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (platform_machine == 'ppc64le' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (platform_machine == 'ppc64le' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130') or (platform_machine == 's390x' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (platform_machine == 's390x' and extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (platform_machine == 's390x' and extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, + { name = "packaging" }, + { name = "readme-renderer" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "rfc3986" }, + { name = "rich" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/a8/949edebe3a82774c1ec34f637f5dd82d1cf22c25e963b7d63771083bbee5/twine-6.2.0.tar.gz", hash = "sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf", size = 172262, upload-time = "2025-09-04T15:43:17.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" }, +] + +[[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" } +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" }, +] + +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu128') or (extra == 'extra-13-torchpfaffian-cpu' and extra == 'extra-13-torchpfaffian-cu130') or (extra == 'extra-13-torchpfaffian-cu128' and extra == 'extra-13-torchpfaffian-cu130')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/0d/4e93c8e6d1001a75763f87d8f5ecda8ebc7f4aa2153dddfaf4ae8892821a/virtualenv-21.4.2.tar.gz", hash = "sha256:38e6ee0a555615c0ea9da2ac7e9998fe8dc3b911dd33ad8eaad2020957653b0c", size = 7613326, upload-time = "2026-05-31T17:01:22.827Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/c4/557dc082be035381b85fdb2b74e21d3d21b57750b74f2b47a32f3a639ff9/virtualenv-21.4.2-py3-none-any.whl", hash = "sha256:854210ca524a1a4d0d744734f4acbc721c3ffe163b85bbf5d56d14d5ae2f0fae", size = 7594079, upload-time = "2026-05-31T17:01:20.735Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072, upload-time = "2026-06-08T05:57:23.146Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092, upload-time = "2026-06-08T05:57:21.413Z" }, +] + +[[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 = "wheel" +version = "0.45.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545, upload-time = "2024-11-23T00:18:23.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494, upload-time = "2024-11-23T00:18:21.207Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +]